слияние мерзавца с переименованными файлами

У меня есть большой веб-сайт, который я перемещаю в новую платформу и в мерзавце добавления процесса. Текущий сайт не имеет никакого управления версиями на нем.

Я запустил путем копирования сайта в новый репозиторий мерзавца. Я сделал новое ответвление и внес все изменения, которые были необходимы, чтобы заставить его работать с новой платформой. Один из тех шагов изменял расширение файла всех страниц.

Теперь во время, когда я работал над новыми изменениями сайта, были сделаны в файлы на старом сайте. Таким образом, я переключился на ведущее устройство и скопировал все те изменения в.

Проблема состоит в том, когда я объединяю ответвление с новой платформой назад на ведущее устройство существует конфликт на каждом файле, который был изменен на основном ответвлении.

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

Как я могу объединить эти 2 ответвления, не имея дело с каждым файлом?

45
задан respectTheCode 23 April 2010 в 20:27
поделиться

2 ответа

Я нашел решение. Поскольку переименование файлов было выполнено с помощью сценария, я смог скопировать новые файлы .php и перезапустить сценарий перед слиянием. Поскольку файлы имели одно и то же имя, слияние прошло без конфликтов.

Вот шаги для всего процесса.

  1. Создать репозиторий git git init
  2. Скопировать существующие файлы в
  3. Зафиксировать
  4. Запустить сценарий для переименования файлов
  5. Зафиксировать
  6. Создать ветку, но не извлекать ее
  7. Внесите исправления с фиксацией изменений по мере продвижения
  8. Проверьте ветку, которую вы создали на шаге 6
  9. Скопируйте новые версии файлов
  10. Запустите сценарий, чтобы переименовать файлы (это должно заменить те, которые были при первом запуске)
  11. Коммит
  12. Мастер оформления заказа
  13. объединяет ветку с мастером

Это работает, потому что для git изменения были внесены в файлы с новым именем.

2
ответ дан 26 November 2019 в 21:17
поделиться

Должен работать автоматически благодаря обнаружению переименования. Ниже приведен пример сеанса:

$ git init test
Initialized empty Git repository in /tmp/jnareb/test/.git/
$ cp ~/git/README .    # example file, large enough so that rename detection works
$ git add .
$ git commit -m 'Initial commit'
[master (root-commit) b638320] Initial commit
 1 files changed, 54 insertions(+), 0 deletions(-)
 create mode 100644 README
$ git checkout -b new-feature        
Switched to a new branch 'new-feature'
$ git mv README README.txt
$ git commit -m 'Renamed README to README.txt'
[new-feature ce7b731] Renamed README to README.txt
 1 files changed, 0 insertions(+), 0 deletions(-)
 rename README => README.txt (100%)
$ git checkout master
Switched to branch 'master'
$ sed -e 's/UNIX/Unix/g' README+ && mv -f README+ README
$ git commit -a -m 'README changed'
[master 57b1114] README changed
 1 files changed, 1 insertions(+), 1 deletions(-)
$ git merge new-feature 
Merge made by recursive.
 README => README.txt |    0
 1 files changed, 0 insertions(+), 0 deletions(-)
 rename README => README.txt (100%)

Если бы вы выполняли "git merge master" в ветке 'new-feature' вместо, как выше, "git merge new-feature" на 'master', вы бы получили:

$ git merge master
Merge made by recursive.
 README.txt |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

Не могли бы вы сказать, что вы делали по-другому?

Обратите внимание, что обычная команда «git rebase» (и «git pull --rebase») не принимает переименований: вам нужно запустить «git rebase -m» или интерактивную rebase.

15
ответ дан 26 November 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: