Git-Ignorar archivos durante la fusión


Tengo un repositorio llamado myrepo en el servidor remoto beanstalk.

Lo cloné en mi máquina local. Se crearon dos ramas adicionales: staging y dev. Empujó estas ramas a distancia también.

Ahora:

 local                   remote                   server
 --------------------------------------------------------  
 master  ==> Pushes to  `master`  ==> deployed to `prod`
 staging ==> Pushes to  `staging` ==> deployed to `staging`
 dev     ==> Pushes to  `dev`     ==> deployed to `dev`

Tengo un archivo llamado config.xml que es diferente en cada rama.

Quiero ignorar este archivo solo durante las fusiones. Pero quiero que esto se incluya cuando realice el checkout o commit desde / hacia la rama repo.

La razón por la que quiero esto es, tenemos un despliegue script que extrae (checkout) la rama específica y se despliega en los servidores respectivos. Así que necesitamos config.xml archivo de esa rama específica ir al servidor específico como se indica anteriormente cuando se implementa.

Supongo que .gitignore no funcionará. ¿Cuáles son las otras opciones? Tenga en cuenta que el archivo ignorado debe ser parte de checkout y commit, lo cual es importante. debe ignorarse solo durante las fusiones.

Gracias!

Author: Kevin Rave, 2013-03-05

6 answers

Superé este problema usando el comando git merge con la opción --no-commit y luego eliminé explícitamente el archivo preparado e ignoré los cambios en el archivo. Por ejemplo: digamos que quiero ignorar cualquier cambio a myfile.txt Procedo de la siguiente manera:

git merge --no-ff --no-commit <merge-branch>
git reset HEAD myfile.txt
git checkout -- myfile.txt
git commit -m "merged <merge-branch>"

Puede poner las sentencias 2 y 3 en un bucle for, si tiene una lista de archivos que omitir.

 52
Author: unmesh-gurjar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-14 16:13:21

Terminé encontrando git attributes. Intentándolo. Trabajando hasta ahora. No comprobó todos los escenarios todavía. Pero debería ser la solución.

Merge Strategies-Atributos de Git

 30
Author: Kevin Rave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-21 09:53:53

.gitattributes - es un archivo de nivel raíz de su repositorio que define los atributos de un subdirectorio o subconjunto de archivos.

Puede especificar el atributo para decirle a Git que use diferentes estrategias de fusión para un archivo específico. Aquí, queremos preservar el config.xml existente para nuestra rama. Necesitamos establecer el merge=ours a config.xml en el archivo .gitattributes.

merge=ours dile a git que use nuestro archivo (rama actual), si se produce un conflicto de fusión.

  1. Añadir un archivo .gitattributes en la raíz nivel de repositorio

  2. Puede configurar un atributo para confix.xml en .gitattributes archivo

    config.xml merge=ours
    
  3. Y luego definir un maniquí nuestra estrategia de fusión con:

    $ git config --global merge.ours.driver true
    

Si fusiona stag forma dev rama, en lugar de tener la fusión entra en conflicto con config.archivo xml, configuración de la rama stag.xml preservar en cualquier versión que originalmente tenía.

 5
Author: eigenharsha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-22 07:49:10

Puedes comenzar usando git merge --no-commit, y luego editar la combinación como quieras, es decir, desagregando config.xml o cualquier otro archivo, y luego confirmar. Sospecho que querrías automatizarlo aún más después de eso usando hooks, pero creo que valdría la pena hacerlo manualmente al menos una vez.

 4
Author: gcbenison,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-05 19:07:24

Podría usar .gitignore para mantener el config.xml fuera del repositorio, y luego usar un post commit hook para cargar el archivo config.xml apropiado al servidor.

 3
Author: tlehman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-05 19:24:49

Aquí git-update-index - Register el contenido del archivo en el árbol de trabajo al índice.

git update-index --assume-unchanged <PATH_OF_THE_FILE>

Ejemplo: -

git update-index --assume-unchanged somelocation/pom.xml

 1
Author: Sireesh Yarlagadda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-28 17:00:10