Як альтернатива запитанню 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-non-related-histories -s ours - не фіксувати infochimps / master
(це виконує злиття за допомогою стратегії 'ours' ( -s ours), яка відкидає зміни з вихідної гілки. Це реєструє факт infochimps/masterоб'єднання, фактично не змінюючи жодного файлу в цільовій гілці)
- Об'єднати лише
infochimps/cookbooks/cassandraвcassandra
git read-tree --prefix = cassandra / -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
Але звичайно, перевірте вручну, що це робить те, що ви хочете.