Git merge приводит к 400 конфликтам переименования / переименования, как их быстро разрешить? - PullRequest
0 голосов
/ 02 мая 2018

Итак, у меня есть несколько сайтов Wordpress, управляемых с помощью Git-репозитория, и все они являются ветвями центрального верхнего уровня Git-репозитория. Недавно я применил несколько обновлений к родительскому репо, но одно из дочерних репозиториев веб-сайта обновило плагин до другой версии и теперь вызывает около 400 конфликтов переименования / переименования. Все эти конфликты находятся в каталоге плагинов восходящего потока, который можно было бы просто разрешить в пользу ветки восходящего потока.

Я хочу сделать следующее:

  1. Убедитесь, что исходная версия файлов "выигрывает" конфликт слияния (например, что делает флаг --theirs с checkout)
  2. Создание объединяемой истории (Если коллеге небезопасно набирать «git pull origin master» со старым репо, это не вариант. Я религиозно против перебазирования.)
  3. Не реструктурировать мой Git-репозиторий (Мой хостинг-провайдер, Pantheon, не будет устанавливать зависимости Composer во время развертывания. Вышестоящие плагины должны быть частью репо.)
  4. Не получить повторяющуюся травму из-за стресса (должно быть достаточно небольшое количество команд, потому что я должен разрешать подобные ошибки один раз в месяц или около того).

Если я просто наберу "git checkout wp-content / plugins / ** --theirs", мне попадет в лицо около 400 ошибок, и Git отказывается проверять файлы. Они выглядят так:

....400 or so errors omitted...
error: path 'wp-content/plugins/wordpress-seo/js/dist/wp-seo-quick-edit-handler-710.min.js' does not have their version
error: path 'wp-content/plugins/wordpress-seo/js/dist/wp-seo-quick-edit-handler-720.min.js' does not have their version
error: path 'wp-content/plugins/wordpress-seo/js/dist/wp-seo-recalculate-710.min.js' does not have their version
error: path 'wp-content/plugins/wordpress-seo/js/dist/wp-seo-recalculate-720.min.js' does not have their version

Я категорически отказываюсь набирать 400 команд git rm / git add с каждым включенным отдельным путем. git checkout --force не является опцией, так как --theirs и --force несовместимы друг с другом (по некоторым причинам). Мое текущее решение состоит в том, чтобы открыть Git GUI и вручную щелкнуть правой кнопкой мыши -> Использовать удаленную версию и затем нажать Да ... 400 раз. Мне не нужно вводить путь, по крайней мере, но это все еще занимает много времени.

Как эффективно разрешить большое количество конфликтов переименования / переименования в пользу удаленного хранилища?

1 Ответ

0 голосов
/ 03 мая 2018

Вы хотите просто разрешить конфликтующие файлы в пользу удаленного или просто взять целое дерево, как оно есть в удаленном?

Для последнего вы можете сделать это:

  • Просто примите файлы как есть с конфликтами. git add . или аналогичный
  • Совершить слияние.
  • rm -Rf path/in/question
  • git checkout origin/branch -- path/in/question
  • git commit --amend -a

Для первого это, вероятно, что-то похожее

  • Просто примите файлы как есть с конфликтами. git add . или аналогичный
  • Совершить слияние.
  • Поиск файлов с конфликтами. например grep -r -l '>>>>' path/in/question > /tmp/conflicts.txt
  • Удалите файлы с конфликтами, проверьте нужные версии и исправьте коммит, аналогично описанному выше.

(Если есть файлы / пути с пробелами в них, могут потребоваться небольшие корректировки приведенных выше команд. Для ясности я дал более простые версии.)

...