В качестве альтернативы вопросу SO « Как объединить отдельные файлы с помощью git-merge? » Я нашел этот поток GitHub, который можно было бы более приспособить для слияния всего подкаталога на основе дерева чтения git :
- Мой репозиторий =>
cookbooks
Целевой каталог моего репозитория =>cookbooks/cassandra
- Удаленный репозиторий =>
infochimps
Источник удаленного репозитория, который я хочу объединить cookbooks/cassandra=>infochimps/cookbooks/cassandra
Вот команды, которые я использовал для их объединения
- Добавьте репозиторий и загрузите его
git удаленное добавление -f infochimps git: //github.com/infochimps/cluster_chef.git
git merge --allow-unrelated-stories -s ours --no-commit infochimps / master
(это выполняет слияние с использованием стратегии 'ours' ( -s ours), которая отбрасывает изменения из исходной ветки. Это записывает факт infochimps/masterслияния без фактического изменения какого-либо файла в целевой ветке)
- Слияние только
infochimps/cookbooks/cassandraсcassandra
git read-tree --prefix = кассандра / -u infochimps / master: кулинарные книги / кассандра
Это считывает дерево только для необходимого подкаталога с исходным кодом, т. Е. В cookbooks/cassandraвосходящей ветке исходного репозитория.
Обратите внимание, что имя целевого подкаталога также должно быть cookbooks/cassandra, иначе вы увидите:
fatal: Not a valid object name
git commit -m 'слияние в infochimps cassandra'
Дополнение
Это странно, [отредактируйте меня] - но read-treeшаг может потерпеть неудачу вот так:
error: Entry 'infochimps/cookbooks/cassandra/README' overlaps with 'cookbooks/cassandra/README'. Cannot bind.
... даже если оба файла идентичны . Это может помочь:
git rm -r cassandra
git read-tree --prefix=cassandra/ -u infochimps/master:cookbooks/cassandra
Но, конечно, проверьте вручную, что это делает то, что вы хотите.