У меня есть проект, в котором я изначально использовал подмодули для некоторого зависимого кода. Оказывается, подмодули не совсем подходят для этого проекта (и их сложно использовать на практике), поэтому я конвертирую каждый подмодуль в поддерево (используя новую функцию 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
будет смотреть на содержимое существующего файла, и, если содержимое идентично файлу, который он все равно собирался создать, подавить сообщение об ошибке и продолжить.
ОБНОВЛЕНИЕ: я создал репозитории 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
git merge -s recursive -X theirs origin/master
, и возникла та же ошибка. - person Greg Hewgill   schedule 21.01.2013git merge
. И я жаждал этой награды. - person Maic López Sáenz   schedule 22.01.2013