Git Merge Out of Sync Repos - PullRequest
       0

Git Merge Out of Sync Repos

0 голосов
/ 11 января 2012

Я начал использовать git для отслеживания своих настроек в стороннем веб-приложении. Я общаюсь с консультантами, которые некоторое время использовали git для отслеживания их изменений. Я постараюсь сделать это легко понять.

  • У меня есть копия экспорта из одной из наших сред
  • Я запустил репозиторий, используя экспорт в качестве базы [LOCAL], и регулярно выполняю его
  • У консультантов есть свой собственный актуальный репозиторий (исключая мои изменения) [3RDPARTY]
  • Я разбудил их Git-репо [УДАЛЕНО]

Теперь отсюда все, что я хочу сделать, - это пройти и объединить все файлы, которые отличаются между [LOCAL] и [REMOTE] .

Мне нет дела до ветвей или истории, которые у меня есть в LOCAL. Я забочусь только об использовании REMOTE и отправке / получении запросов на взаимодействие для взаимодействия с консультантами.

Как вы посоветуете мне это сделать? Я попытался создать новую ветку в LOCAL и перезаписать все файлы обновленными файлами из 3RDPARTY. Тогда я надеялся, что слияние между этой новой веткой и моей обычной веткой разработки вызовет конфликт, поэтому я мог бы легко объединить их все с KDiff3, но вместо этого он просто автоматически объединял и переписывал все мои изменения.

1 Ответ

1 голос
/ 12 января 2012

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

Должен быть тег или регистрация 3RDPARTY, которая была идентична точке регистрации в вашемэкспортная среда, которая является первой регистрацией на LOCAL.Я назову эту регистрацию MERGE_BASE.Поэтому попробуйте выполнить следующие действия:

  • Прежде всего выполните git checkout master на REMOTE и убедитесь, что оно соответствует 3RDPARTY с git pull origin.
  • In REMOTE git branch mergeb <MERGE_BASE> <MERGE_BASE> - это регистрация, о которой я говорил в истории, которая идентична или почти идентична той, которую вы имели бы при первоначальном создании LOCAL.
  • Скопируйте источникдля вашей самой последней версии в LOCAL прямо поверх файлов в вашей ветке mergeb, которую мы только что создали в REMOTE.НЕ копируйте каталог .git!
  • В REMOTE в ветке mergeb используйте git add, чтобы убедиться, что все ваши изменения применены к индексу git, а затем запустите git commit.Теперь ваша ветка REMOTE mergeb должна иметь источник, идентичный тому, что находится в LOCAL.(вы можете использовать git remotes, чтобы сделать это с вашими ЛОКАЛЬНЫМИ изменениями, но так как вам не нужна история, я рекомендую просто сделать это таким образом, чтобы упростить процесс).
  • Снова извлеките основную ветвь git checkout master.
  • На этом этапе создайте новую ветку, которую вы будете использовать, чтобы внести в нее свой вклад. Do git checkout -b remote_work.
  • Теперь просто объедините ветку mergeb с вашей веткой remote_workgit merge --no-ff mergeb.В этот момент у вас, вероятно, будут все конфликтующие слияния с их работой и вашей работой для ее разрешения.

Как только вы закончите этот процесс и передадите работу в свою ветку, вы должны быть в том же состоянии, в каком выwanted.

После всего этого, если вы хотите, чтобы вся ваша работа выглядела так, как будто вы начали с того, что в данный момент находится в 3RDPARTY, а в ветке remote_work на REMOTE просто выполните git rebase master.

С этого момента я буду сохранять мастер на REMOTE синхронизированным с их репо 3RDPARTY и сохраняю ваши изменения, которые не были перенесены в 3RDPARTY в remote_work или других различных ветвях наREMOTE репо.

Дайте мне знать, если этот процесс сработает для вас.

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