¿Cómo combino un file binary?

Tengo un file binary en my_branch, y cuando necesito hacer cambios en él, git, por supuesto, no lo fusionará.

Entonces, lo que hago ahora es:

git checkout my_branch # make a change to gui.bin mv gui.bin ~/ git commit -a mv ~/gui.bin . git commit -a # git rebase to 1 commit git checkout master git merge my_branch 

Pero, ¿hay una manera más fácil?

No estoy muy seguro de a lo que apunta su caso de testing. Parece que estás moviendo gui.bin fuera del path y luego volviendo a ponerlo como estaba …

A menudo, los files binarys no necesitan combinarse, solo desea elegir una versión definitiva de un lugar u otro. Donde realmente tienen que combinarse, o necesita una herramienta de fusión personalizada, o utiliza algún tipo de editor y mucha intervención manual.

Noté que usas commit -a en tu ejemplo. Un primer paso para evitar conflictos innecesarios es no comprometer ningún file binary que pueda ser tocado de manera incidental a less que desee comprometerlos. Si acaba de git add los files que necesita para confirmar y confirmar sin -a entonces esto ayudará. Alternativamente, si solo hay un file que no desea confirmar, puede add -u y reiniciarlo antes de realizar una confirmación.

 git add -u git reset -- dontcommit.dat git commit 

Cuando fusiona las twigs que tienen ambos cambian un binary, es posible que desee conservar una versión y no la otra. Después de una fusión donde Git te dice que hay conflictos en tu binary puedes decirle a git que use la versión en la twig en la que estabas así:

 git checkout --ours binary.dat git add binary.dat 

o desde la sucursal en la que se está fusionando así:

 git checkout --theirs binary.dat git add binary.dat 

podría usar el controller de combinación binary integrado:

 binary: Keep the version from your branch in the work tree, but leave the path in the conflicted state for the user to sort out. 

ejemplo .gitattributes línea:

 *.bin -crlf -diff merge=binary 

le dice a git que no agregue terminaciones de línea, no a diff, y que mantenga la versión local

http://git-scm.com/docs/gitattributes

que solo conserva tu copy de trabajo …

Otra forma es usar un controller de combinación personalizado:

 [merge "binmerge"] name = my binary merge script driver = binmerge.sh %O %A %B 

Eso podría verificar el file conflictivo contra una list de files que siempre debe sobrescribir su versión local …

para usar un controller de combinación, defínalo en la configuration y luego especifique en qué routes debe usarse en .gitattributes, de esta forma:

 *.bin -crlf -diff merge=binmerge 

binmerge.sh se llamará para manejar la combinación. básicamente puede hacer algo como:

 #!/bin/sh echo "Performing merge of binary object ($1, $2, $3)" touch $2 exit 0