Tengo un repositorio llamado myrepoen el beanstalkservidor remoto .
Lo cloné en mi máquina local. Creó dos ramas adicionales: stagingy 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.xmlque es diferente en cada rama.
Quiero ignorar este archivo solo durante las fusiones. Pero quiero que esto se incluya cuando realice el pago o confirme desde / hacia la rama de repositorio.
La razón por la que quiero esto es que tenemos un script de implementación que extrae (comprueba) la rama específica y se implementa en los servidores respectivos. Entonces, necesitamos que el config.xmlarchivo de esa rama específica ingrese al servidor específico como se indicó anteriormente cuando se implemente.
Supongo que .gitignoreno funcionará. ¿Cuáles son las otras opciones? Tenga en cuenta que el archivo ignorado debe ser parte de la verificación y confirmación, lo cual es importante. solo debe ignorarse durante las fusiones.
¡Gracias!

Respuestas:
Superé este problema usando el comando git merge con la
--no-commitopción y luego eliminé explícitamente el archivo por etapas e ignoré los cambios en el archivo. Por ejemplo: digamos que quiero ignorar cualquier cambio paramyfile.txtproceder de la siguiente manera:Puede poner las declaraciones 2 y 3 en un bucle for, si tiene una lista de archivos para omitir.
fuente
git reset HEAD myfile.txtexactamente? ¿Cómo ayuda con nuestro objetivo aquí?Terminé encontrando a git
attributes. Probándolo. Trabajando hasta ahora. No comprobé todos los escenarios todavía. Pero debería ser la solución.Fusionar estrategias: atributos de Git
fuente
.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 combinación para un archivo específico. Aquí, queremos preservar lo existente
config.xmlpara nuestra rama. Tenemos que establecer elmerge=oursqueconfig.xmlen.gitattributesel archivo.merge=oursdígale a git que use nuestro archivo (rama actual), si ocurre un conflicto de fusión.Agregar un
.gitattributesarchivo en el nivel raíz del repositorioPuede configurar un atributo para confix.xml en el
.gitattributesarchivoY luego defina una estrategia ficticia de fusión nuestra con:
Si fusiona la rama de
stagformulariodev, en lugar de que la fusión entre en conflicto con el archivo config.xml, el config.xml de la rama de ciervo se conserva en la versión que tenía originalmente.fuente
config.xmlha cambiado completamente desde la base de fusión a cualquiera de las versiones de punta de rama, Git solo toma la versión modificada, sin mirando elmerge.ours.driverescenario. Así que tienes razón al preocuparte.theirses una estrategia de fusión incorporada. Pero parece que se puede escribir<pattern> merge=foo, entoncesgit config --global merge.foo.driver true, y funcionará de la misma manera.Puede comenzar usando
git merge --no-commit, y luego editar la combinación como desee, es decir, desestabilizandoconfig.xmlo cualquier otro archivo, luego confirme . Sospecho que querrás automatizarlo aún más después de eso usando ganchos, pero creo que valdría la pena revisarlo manualmente al menos una vez.fuente
git attributesalguna solución directa? No puedo entender esto. git-scm.com/book/en/…Puede usar
.gitignorepara mantener el archivoconfig.xmlfuera del repositorio y luego usar un enlace posterior a la confirmación para cargar elconfig.xmlarchivo apropiado en el servidor.fuente
attributes? ¿Alguna idea de cómo funciona? No puedo entender esto. git-scm.com/book/en/…Ejemplo:
master,developdeveloprama y desea ignorarlo mientras fusionaCódigo:
También puede ignorar archivos con la misma extensión
por ejemplo, todos los archivos con
.txtextensión:fuente
Aquí git-update-index: registra el contenido del archivo en el árbol de trabajo en el índice.
Ejemplo:-
fuente