2012-07-04 15 views
16

Tengo una rama especial (rama de publicación) que es una copia exacta de la rama principal con algunos archivos y directorios eliminados. No se está produciendo ningún desarrollo en esta rama, sin embargo, debe estar sincronizado con el maestro, por lo que las actualizaciones en el maestro deben enviarse constantemente a esa rama.Estrategia de combinación de Git para ignorar los archivos eliminados

Al hacer una fusión normal (git merge master) Recibo constantemente conflictos como (un archivo de ejemplo README por ejemplo):

CONFLICT (delete/modify): README deleted in HEAD and modified in master

que se esperaba: Trato de combinar los cambios en los archivos, que yo' ve eliminado Entonces, para resolverlos, no uso git rm README.

Para automatizarlo, pensé que podría usar la resolución automática de conflictos especificando -X nuestro. Las páginas man sugieren que es una cosa correcta para mí:

This option forces conflicting hunks to be auto-resolved cleanly by favoring our version. Changes from the other tree that do not conflict with our side are reflected to the merge result.

Sin embargo, cuando lo haga git merge -s recursive -X ours master sigo teniendo el mismo sin resolver de borrar/modificar los conflictos. ¿Qué estoy haciendo mal? ¿Hay alguna otra forma de automatizar la resolución de conflictos?

+0

posible duplicado de [Cómo configurar un controlador git hacer caso omiso de una carpeta de fusión] (http://stackoverflow.com/questions/3111515/how-to-setup-a-git-driver-to- ignore-a-folder-on-merge) - y eso tiene una gran respuesta. – rescdsk

Respuesta

2

Al tener un vistazo a this question, parece que la estrategia recursiva con nuestro o su opción no tiene en cuenta una deleción como un conflicto.

Lo que puedes hacer es utilizar this feature para especificar una estrategia específica para algunos archivos. Apostaría que la nuestra estrategia (no la opción) haría el truco para esos archivos.

EDIT:

Como se indica en el comentario, no se puede hacer esto!

Debe definitivamente la lista de contactos de correo Git si esto es una característica muy importante para usted ([email protected])

+0

Parece que podría ser la solución, pero no funciona para mí (o estoy haciendo algo mal de nuevo): en la rama creada y comprometida .gitattribute con el contenido "README merge = ours". Cuando hago 'git merge master' aparece el mismo conflicto –

+1

Intenté crear a.gitignore file también y poniendo 'README' en él. Mismo resultado –

+1

Tal vez, el controlador de combinación personalizada es lo que necesito? http://stackoverflow.com/questions/928646/how-do-i-tell-git-to-always-select-my-local-version-for-conflicted-merges-on-as –

-1

Se puede utilizar en lugar de rebase de combinación para actualizar rama de lanzamiento.

+2

¿Cómo haría eso la diferencia? –

11

Probablemente hay una forma mejor de hacer esto, pero resuelto un problema similar al hacer la fusión (con la estrategia de combinación por defecto) y luego ejecutar

git status --porcelain | awk '{if ($1=="DU") print $2}' | xargs git rm 

Después de esto, usted debe resolver otros conflictos como normales y luego cometer

Esto simplemente elimina todos los archivos que se han eliminado en la rama actual, que creo que es lo que quiere.

+3

Si realmente quieres jugar con 'git status', deberías usar' --porcelain' para obtener un resultado predictivo. –

+1

@ MichałGórny [Hecho] (http://stackoverflow.com/a/36470587/1485952) – fnkr

+0

Editado la respuesta para incluir los ajustes de @fnkr. Gracias –

3
git merge master 
git status --porcelain | awk '{if ($1=="DU") print $2}' | xargs git rm 
git commit 
Cuestiones relacionadas