У меня есть проект, в котором я первоначально использовал подмодули для некоторого зависимого кода. Оказывается, что подмодули не подходят для этого проекта (и их трудно использовать на практике), поэтому я преобразовываю каждый подмодуль в поддерево (используя новую функцию git-subtree).
В моем рабочем репозитории я успешно удалил каждый подмодуль и добавил старый подмодуль репо в качестве поддерева. Нет проблем с этим.
Когда я перехожу к другому клону и пытаюсь извлечь из первого, я получаю следующую ошибку на шаге слияния:
error: The following untracked working tree files would be overwritten by merge:
sub/.gitignore
sub/Makefile
sub/README
sub/src/main.c
... and so on for all files in sub/
Aborting
Похоже, что это связано с тем, что файлы в sub/ никогда не существовали в основном репозитории в первую очередь, а когда Git применяет патч для обновления .gitmodules, он не удаляет каталог с подмодулем файлы. При обработке следующего коммита, где Git пытается создать новые файлы в sub/, которые теперь являются частью основного репозитория, все эти файлы конфликтуют с все еще существующими файлами в sub/.
Обходной путь, который я нашел, заключается в использовании rm -rf sub до git pull, что позволяет избежать этой проблемы.
Мой вопрос: есть ли какой-либо переключатель командной строки, который я могу использовать с git merge, который говорит "Перезаписать все файлы, которые существуют в рабочем каталоге"? Еще лучше будет функция, в которой git merge будет смотреть содержимое существующего файла, и если содержимое идентично файлу, который он собирается создать, подавите сообщение об ошибке и продолжайте.
UPDATE. Я создал репозитории Git, которые демонстрируют эту проблему, чтобы точно показать, о чем я говорю. Воспроизведение:
$ git clone https://github.com/ghewgill/q14224966.git
$ cd q14224966
$ git submodule init
$ git submodule update
$ git merge origin/branch
Это должно привести к сообщению об ошибке
error: The following untracked working tree files would be overwritten by merge:
sub/Makefile
sub/README
sub/src/main.c
Please move or remove them before you can merge.
Aborting

