Ignorar files específicos cuando se tira desde un origen ascendente bifurcado

En git, ¿cómo exime ciertos files cuando se tira desde un origen ascendente (es decir, el proyecto original)?

Tengo un proyecto en el que estoy trabajando que originalmente fue bifurcado desde un repository que está muy activo. He agregado el original como un control remoto llamado "en sentido ascendente" para que se pueda ejecutar:

git pull upstream 

y actualice el proyecto a la confirmación más reciente.

El problema: hay algunos files (por ejemplo, mi Gruntfile.js ) que no quiero actualizar junto con el proyecto original. Cada vez que retiraba estas confirmaciones, obtenía conflictos de combinación porque había cambiado los files en mi propia versión.

Quiero hacer un seguimiento de estos files para mis propios commit locales y sacar los cambios de mi propio origen, por lo que agregarlos a .gitignore permanentemente no es una opción.

Mi solución actual es hacer que una tarea Gruntfile.js agregue temporalmente Gruntfile.js y otros a .gitignore , extraer de la stream ascendente y luego eliminarlos de .gitignore para que pueda rastrear mis propios cambios y avanzar hasta mi origen. Sin embargo, esto se siente raro.

¿Hay alguna forma de que pueda ignorar estos files solo cuando se extrae de "aguas arriba"?

Si tu puedes hacerlo.

git pull es una forma abreviada de git fetch seguido de git merge FETCH_HEAD

Entonces primero puedes hacer un,

 git fetch upstream 

seguido por,

 git merge --no-log --no-ff --no-commit upstream/branch 

Git se detendrá antes de comprometerse. Por lo tanto, debería poder modificar la combinación y excluir los files necesarios.

ACTUALIZAR

Los commands se pueden combinar usando git alias.

Crea un alias dentro de ~ / .gitconfig

 [alias] fnm = !git fetch upstream && git merge --no-log --no-ff --no-commit upstream/branch 

Puedes agregar más,

 [alias] fnm = !git fetch upstream && git merge --no-log --no-ff --no-commit upstream/branch && git reset file/path/not/to/be/updated && git checkout file/path/not/to/be/updated 

Use git fnm para la operación completa.

Sin embargo, esto se siente hacky

Una forma less hacky sería evitar save una versión bifurcada del file mientras desea sus actualizaciones. No sé cuáles son sus cambios, pero ¿qué le parece proponer una request de fusión con sus modificaciones?

Si sus modificaciones son bastante personales (p. Ej .: urls locales), ¿qué hay de proponer una request de fusión en la que introduce un file de configuration local?

Eso es lo que se hace, por ejemplo, con https://github.com/fabelier/Doorbell : proporciona un file config.js.template que se usa de forma pnetworkingeterminada, pero los usuarios pueden proporcionar un file config.js para agregar sus propias especificidades; y este file no se guarda en Git.