У меня есть двоичный файл в my_branch, и когда я должен буду внести изменения в него, мерзавец, конечно, не объединит его.
Таким образом, то, что я делаю теперь:
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
Но есть ли более легкий путь?
Я не совсем уверен, на чем вождение вашего теста. Вы, кажется, двигаете Gui.bin с дороги, а затем положить его на то, как это было ...
Часто двоичные файлы не нужно объединяться, вы просто хотите выбрать окончательную версию из одного места или другой. Там, где они действительно должны быть объединены, вам либо нужен пользовательский инструмент Merge, либо использовать какой-то редактор и множество ручного вмешательства.
Я замечаю, что вы используете Compys-A
в вашем примере. Одним из первых шагов, чтобы избежать ненужных конфликтов - не совершать какие-либо двоичные файлы, которые могут быть затронуты кстати, если вы не хотите их совершить. Если вы просто Git Add
файлы, которые вам нужно совершать и совершать без -
, то это поможет. В качестве альтернативы, если есть только один файл, который вы не хотите совершать, вы можете Add -U
и сбросить его, прежде чем делать коммит.
git add -u
git reset -- dontcommit.dat
git commit
Когда вы делаете филиалы слияния, которые имеют оба изменить двоичную, вы можете сохранить одну версию, а не другую. После слияния, где GIT говорит вам, что их конфликты в вашем двоике, вы можете сказать Git использовать версию в ветви, которую вы находились, подобные этой:
git checkout --ours binary.dat
git add binary.dat
или от ветви, которую вы объединяетесь в этом:
git checkout --theirs binary.dat
git add binary.dat
Да, это правильно. В вашем примере классы, которые получают из наследства как интерфейса F (), так и для реализации по умолчанию. Но вы заставляете полученные классы для реализации метода f () (даже если это только для вызова реализации по умолчанию, предоставляемой A).
Скотт Мейерс обсуждает это в Эффективное C ++ (2-е издание) Пункт № 36 Дифференцировка между наследством интерфейса и наследования реализации. Номер товара, возможно, изменился в последнем издании.
-121--662361- Вы можете использовать встроенный двоитель
драйвера :
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.
Пример. Гитатрибусы Линия:
*.bin -crlf -diff merge=binary
говорит Git не добавлять линии окончания, не различия, И сохранить локальную версию
http://git-scm.com/docs/gitttributes
, которые сохраняют только вашу рабочую копию ...
Другой способ - использовать пользовательский драйвер слияния:
[merge "binmerge"]
name = my binary merge script
driver = binmerge.sh %O %A %B
Это может проверить конфликтующий файл против списка файлов, которые всегда должны быть перезаписаны вашей локальной версией ...
Чтобы использовать драйвер слияния, определить его в конфигурации, то укажите, какие пути его следует использовать в .gitattribute , как так:
*.bin -crlf -diff merge=binmerge
Binmerge.sh будет призвана для обработки слияния. Это может по сути просто сделать что-то вроде:
#!/bin/sh
echo "Performing merge of binary object ($1, $2, $3)"
touch $2
exit 0