Как объединить / вытащить из удаленного хранилища - PullRequest
4 голосов
/ 20 марта 2011

Я пытаюсь объединить несколько подкаталогов из удаленного git-репозитория в мой репозиторий. И удаленный, и локальный репозитории включают в себя весь репозиторий ядра, и меня интересуют только файлы, относящиеся к беспроводной сети. Я попытался следовать инструкциям в разделе «Как использовать стратегию слияния поддеревьев» , но поскольку большинство файлов существует как в локальном, так и в удаленном репозитории, git read-tree --prefix=dir-B/ -u Bproject/master команда не выполнена. Я не смог использовать опции -m и --prefix в одной командной строке.

Это объединение фактически должно обновить (объединить / вытащить) все соответствующие беспроводные каталоги / файлы в соответствии с файлами в удаленном хранилище, где конфликты должны быть решены путем предпочтения удаленных файлов.

Чтобы сделать мой вопрос общим - скажем, у вас есть репозиторий A и B. Оба имеют папку wireless_dir: A / wireless_dir, B / wireless_dir. Я работаю над хранилищем B и хотел бы обновить все его файлы в B / wireless_dir из A / wireless_dir, где изменения в A / wireless_dir предпочтительнее, когда возникают конфликты слияния.

Ответы [ 2 ]

1 голос
/ 06 апреля 2011

Из того, что прокомментировал Jeformi, похоже, что у вас уже есть ситуация, когда папка является отдельным репозиторием, и в этом случае вам нужно всего лишь git pull.

Однако, если у коммитов, которые вы ищете, есть файлы из других папок, которые вам не нужны, Git позволяет вам «отменять» коммиты в обход, как указано здесь: redhatmagazine

Шаги для этого (немного более обобщенные для вашей ситуации):

1) Запишите коммит, в котором находится ваш HEAD, давайте назовем его <OLD_HEAD> для развлечения. Это можно получить из журнала и посмотреть на sha1 самого последнего коммита, используя:

git log

2) Внесите изменения из репо А в свою ветку (сюда войдут все, что вам может не понадобиться):

git pull <repo A> <branch_name>

3) Теперь пришло время использовать <OLD_HEAD> (не вульгарно) ... это делается путем сброса

git reset --mixed <OLD_HEAD>

4) Со всем, что вы сделали, вы HEAD вернулись на <OLD_HEAD>, и ваш индекс тоже, но в вашем рабочем каталоге у вас теперь есть изменения из репозитория A, которые вы искали, так как а также потенциал для файлов вне папки wireless_dir. Чтобы в интерактивном режиме объединить эти файлы в вашем рабочем каталоге с вашим индексом (только для файлов из wireless_dir, если это все, что вам нужно):

git add --patch <filename>

5) И наконец:

git commit -m “Selectively merged my files”

Примечание. Если вы не хотите испортить ветку, создайте новую ветку, прежде чем пытаться выполнить приведенное выше.

0 голосов
/ 06 апреля 2011

Самый простой способ сделать это - объединить всю ветку, скопировать эту папку за пределы вашего дерева мерзавцев, отменить или прервать объединение, а затем скопировать папку обратно.возникли проблемы, если какие-либо изменения имеют зависимости вне этой папки.Вы, вероятно, захотите cherry-pick полных коммитов всего, что касается этой папки (из git log subdir), чтобы получить зависимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...