Tengo una cantidad de repositorios remotos que quiero fusionar. Algunos de los subárboles en esos repositorios son exclusivos del control remoto (contienen datos que son específicos del host), otros subárboles contienen datos que (se supone que son) comunes en todos los controles remotos."git merge -s theirs" necesario, pero sé que no existe
Lo que quiero hacer, esencialmente, es ejecutar "git pull" para cada control remoto. Esto adelantará rápidamente la rama maestra local a lo largo de la rama de seguimiento para el maestro remoto para los archivos específicos del host que han cambiado en el control remoto, y no hará nada por los archivos comunes porque no habrán cambiado.
Un cambio en un archivo común (llámalo F, con el cambio siendo F ') no debería ser un problema, incluso si solo ocurre en un control remoto al principio. git-merge hará lo correcto y me dará una copia de F 'en mi espacio de trabajo compuesto, que es lo que quiero. El problema viene si el mismo archivo común cambia de una manera diferente en otro control remoto (llámalo F "). Git-merge me dará un compuesto de F 'y F", que no es lo que quiero. Todo lo que quiero es F "
Cuando trabajé con ClearCase llamamos a esto una fusión de copias. El resultado de la fusión siempre fue una copia exacta del colaborador. Esto suena muy parecido a" git merge -s theirs " sería, excepto que no existe.
Me pregunto si puedo cocinar algo con "git-read-tree -m --trivial" para obtener las fusiones rápidas fuera del camino, luego lo hago algo de magia con git-merge y una herramienta de combinación personalizada que simplemente copia el archivo $ REMOTE en $ MERGED. Pero incluso con eso no veo cómo puedo evitar que git-merge componga F 'y F "si es que la fusión es trivial.
He leído el enlace Is there a "theirs" version of "git merge -s ours"? en este sitio, y la publicación de Junio Hamano hace referencia explicando por qué "git merge -s theirs" es una mala idea, pero este no es el caso para mí. Valoro la historia anterior, pero necesito abandonar el barco y seguir el cambio en el sitio remoto cuando ocurra. No se realiza ningún trabajo nuevo en el sitio local. Simplemente necesita formar un conjunto de todos los sitios remotos, tomando el último archivo "común" desde el último control remoto cuando uno cambia.
Gracias de antemano por cualquier ayuda que pueda darme.
Desde la página gitattributes hombre: la hora de decidir qué atributos son asignados a un path, git consulta el archivo $ GIT_DIR/info/attributes (que tiene la prioridad más alta), el archivo .gitattributes en el mismo directorio que la ruta en cuestión, y sus directorios principales hasta el nivel superior del árbol de trabajo (más el directorio que contiene .gitattributes es de la ruta en cuestión, menor es su precedencia) ... así que pon tu .gitattribute en la parte superior del árbol correspondiente. el controlador de combinación personalizado solo se aplicará a ese árbol. – VonC
'echo * merge = keepTheir> dirWithCopyMerge \ .gitattributes' debe hacerlo para todos los archivos en' dirWithCopyMerge', no para todos los archivos de todo el repositorio. Eso debería ser lo que estás buscando. – VonC
Acabo de completar mi respuesta para reflejar mis comentarios anteriores. – VonC