
kevin rave
tengo un repositorio llamado myrepo
en el control remoto beanstalk
servidor.
Lo cloné en mi máquina local. Creó dos sucursales adicionales: staging
y dev
. Empujó estas ramas a control remoto 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 pago o me comprometo desde/hacia la rama de repositorio.
La razón por la que quiero esto es que tenemos un script de implementación que extrae (paga) la rama específica y se implementa en los servidores respectivos. Así que necesitamos config.xml
El archivo de esa rama específica va al servidor específico como se indicó anteriormente cuando se implementa.
supongo .gitignore
no funcionará ¿Cuáles son las otras opciones? Tenga en cuenta que el archivo ignorado debe ser parte del pago y confirmación, lo cual es importante. debe ignorarse solo durante las fusiones.
¡Gracias!

unmesh-gurjar
Superé este problema usando el comando git merge con el --no-commit
y luego eliminó explícitamente el archivo provisional e ignoró los cambios en el archivo. Por ejemplo: digamos que quiero ignorar cualquier cambio en 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 declaraciones 2 y 3 en un bucle for, si tiene una lista de archivos para omitir.

kevin rave
Terminé encontrando git attributes
. probándolo Trabajando hasta ahora. Todavía no comprobó todos los escenarios. Pero debe ser la solución.
Fusionar estrategias: atributos de Git

eigenharsha
.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.xml
para nuestra sucursal. Necesitamos establecer el merge=foo
para config.xml
en .gitattributes
expediente.
merge=foo
dígale a git que use nuestro archivo (rama actual), si ocurre un conflicto de fusión.
-
Agrega un .gitattributes
archivo en el nivel raíz del repositorio
-
Puede configurar un atributo para confix.xml en el .gitattributes
expediente
<pattern> merge=foo
Tomemos un ejemplo para config.xml
config.xml merge=foo
-
Y luego definir un dummy foo
fusionar estrategia con:
$ git config --global merge.foo.driver true
Si fusionas el stag
formulario dev
rama, en lugar de que la combinación entre en conflicto con la config.xml
archivo, el archivo config.xml de la rama de ciervo se conserva en la versión que tenía originalmente.
para más referencia: fusionar_estrategias
Podrías empezar usando git merge --no-commit
y luego edite la combinación como desee, es decir, anulando config.xml
o cualquier otro archivo, luego confirme. Sospecho que querrías automatizarlo aún más después de eso usando ganchos, pero creo que valdría la pena hacerlo manualmente al menos una vez.

único sensei
Ejemplo:
- Tienes dos sucursales:
master
, develop
- Usted creó el archivo en
develop
rama y quiero ignorarlo mientras se fusiona
Código:
git config --global merge.ours.driver true
git checkout master
echo "path/file_to_ignore merge=ours" >> .gitattributes
git merge develop
También puede ignorar archivos con la misma extensión
por ejemplo todos los archivos con .txt
extensión:
echo "*.txt merge=ours" >> .gitattributes

caballero
podrías usar .gitignore
para mantener la config.xml
fuera del repositorio, y luego use un gancho posterior a la confirmación para subir el apropiado config.xml
archivo al servidor.
Como comentaron muchos, se debe tener en cuenta que la respuesta aceptada y las copias de la misma (usando una estrategia de combinación personalizada para un archivo o archivos específicos) solo funciona en los casos en que habría conflictos de fusión reales.
2 casos simples que no darían lugar a conflictos de fusión y, por lo tanto, se comprometen a fusionarse:
- Usted tiene un
config.xml
archivo en una rama de función y no en maestro. Desea excluirlo durante la fusión
- Tu
config.xml
archivo en ambas ramas se basan en la misma confirmación. El nuevo código se agrega al archivo en función.
Cualquiera de los usos merge --no-commit
como lo demuestra unmesh-gurjar o simplemente seleccionar compromisos individuales en el maestro. Este último, por supuesto, es bastante engorroso y viene con un par de otras trampas (nuevas ID SHA1, etc.)
En su modo predeterminado, git pull es una abreviatura de git fetch seguido de git merge FETCH_HEAD. Así que sus declaraciones entran en conflicto entre sí.
– zzk
5 de marzo de 2013 a las 19:07
Bueno, yo diría, su pago. No tirar. Actualizaré la pregunta para que quede claro.
–Kevin Rave
5 de marzo de 2013 a las 19:08
posible duplicado de Git: ignore algunos archivos durante una fusión (mantenga algunos archivos restringidos a una rama)
– givanse
12 de febrero de 2014 a las 21:24
¿alguna vez encontraste una solución a esto? Los atributos de git solo son útiles en el caso de que el archivo tenga conflictos entre las ramas que se fusionan, por lo que no siempre es suficiente.
– pvinis
23 de agosto de 2016 a las 6:00
¿Buscaste enlaces simbólicos (no seguidos de git) o incluso enlaces duros para el rescate?
– Frank Noke
1 de noviembre de 2017 a las 8:10