Tengo un repositorio llamado myrepo
en el beanstalk
servidor remoto .
Lo cloné en mi máquina local. Creó 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 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.xml
archivo de esa rama específica ingrese al servidor específico como se indicó anteriormente cuando se implemente.
Supongo que .gitignore
no 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-commit
opció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.txt
proceder 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.txt
exactamente? ¿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.xml
para nuestra rama. Tenemos que establecer elmerge=ours
queconfig.xml
en.gitattributes
el archivo.merge=ours
dígale a git que use nuestro archivo (rama actual), si ocurre un conflicto de fusión.Agregar un
.gitattributes
archivo en el nivel raíz del repositorioPuede configurar un atributo para confix.xml en el
.gitattributes
archivoY luego defina una estrategia ficticia de fusión nuestra con:
Si fusiona la rama de
stag
formulariodev
, 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.xml
ha 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.driver
escenario. Así que tienes razón al preocuparte.theirs
es 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.xml
o 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 attributes
alguna solución directa? No puedo entender esto. git-scm.com/book/en/…Puede usar
.gitignore
para mantener el archivoconfig.xml
fuera del repositorio y luego usar un enlace posterior a la confirmación para cargar elconfig.xml
archivo apropiado en el servidor.fuente
attributes
? ¿Alguna idea de cómo funciona? No puedo entender esto. git-scm.com/book/en/…Ejemplo:
master
,develop
develop
rama y desea ignorarlo mientras fusionaCódigo:
También puede ignorar archivos con la misma extensión
por ejemplo, todos los archivos con
.txt
extensión:fuente
Aquí git-update-index: registra el contenido del archivo en el árbol de trabajo en el índice.
Ejemplo:-
fuente