Как я объединяю двоичный файл?

У меня есть двоичный файл в 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

Но есть ли более легкий путь?

15
задан John Rudy 18 January 2010 в 22:06
поделиться

2 ответа

Я не совсем уверен, на чем вождение вашего теста. Вы, кажется, двигаете 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
22
ответ дан 1 December 2019 в 01:38
поделиться

Да, это правильно. В вашем примере классы, которые получают из наследства как интерфейса 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
12
ответ дан 1 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: