Как быстро заменить субмодуль на файлы в Git? - PullRequest
0 голосов
/ 07 апреля 2019

Git прерывает слияние, когда я пытаюсь сделать git pull коммит (или набор коммитов), которые делают следующее:

  • Удалить подмодуль, расположенный в подкаталоге
  • Добавить содержимое подмодуля в подкаталог

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

Есть ли способ перемотки таких изменений в Git?

UPDATE:

Это моя структура хранилища:

|-- Common
|-- Components
|-- Lib
|-- Projects
|   |-- main_project
|   |   |-- some_binary
|   |   |-- some_other_binary
|   |   |-- Sources
|   |   |   |-- SUBMODULE_IS_HERE
|   |   |   |   |-- many_submodule_files.here
|   |   |   |-- files.here
|   |-- other_project
|   |-- other_project_2
|-- Resources
|-- .gitignore
|-- .gitmodules

Это команды, которые я выполняю из локального репозитория:

mv Projects/main_project/Sources/SUBMODULE_IS_HERE SUBMODULE_IS_HERE_tmp

git submodule deinit -f -- Projects/main_project/Sources/SUBMODULE_IS_HERE
rm -rf .git/modules/Projects/main_project/Sources/SUBMODULE_IS_HERE
git rm -rf Projects/main_project/Sources/SUBMODULE_IS_HERE
git rm .gitmodules
git commit -m "Removed submodule"
git push origin master

rm -rf SUBMODULE_IS_HERE_tmp/.git
rm SUBMODULE_IS_HERE_tmp/.gitignore
mv SUBMODULE_IS_HERE_tmp Projects/main_project/Sources/SUBMODULE_IS_HERE
git add .
git commit -m "Added submodule code back into main repository"
git push origin master

Теперь, это состояние другого локального хранилища (например, сотрудника)

$ git log --graph --oneline --all
* e8d95d3ec (origin/master, origin/HEAD) Added submodule code back into main repository
* 9a2fc256b Removed submodule
* 31aeff6da (HEAD -> master) fixed bug #4442

И теперь коллега пытается выполнить обе команды:

$ git pull origin master
From X:/repo-TEST
 * branch                master     -> FETCH_HEAD
error: The following untracked working tree files would be overwritten by merge:
        Projects/main_project/Sources/SUBMODULE_IS_HERE/many_files.here
        Projects/main_project/Sources
Aborting
Updating 31aeff6da..e8d95d3ec

То, что я подразумеваю под «двумя отдельными git pulls», - это когда мой коллега тянет первый коммит, который удаляет подмодуль. Это не вызывает проблем. После этого я нажимаю второй коммит, который добавляет файлы обратно в главный репозиторий. Наконец, они тянут второй коммит. Еще раз, нет проблем.

Почему это работает "в двух git pull", как описано в параграфе выше, и не работает с одним git pull?

Могу ли я что-нибудь сделать, чтобы сделать эту работу одним нажатием?

...