0

次のことを行うコミット (またはコミットのセット) を git pull しようとすると、Git はマージを中止します。

  1. サブディレクトリにあるサブモジュールを削除します
  2. サブディレクトリにサブモジュールの内容を追加します (異なるファイル、同じファイル名)

これをアクションごとに個別の git pull に分割すると、マージの競合は発生しません。ただし、これには問題があります。他のユーザーが 2 番目のコミットを git pull するまでプロジェクトをコンパイルできないためです。誰かが最初のコミットをプルしていない限り、2 番目のコミットをプッシュすることはできません。

Git でこのような変更を早送りする方法はありますか?

アップデート:

これは私のリポジトリ構造です:

|-- 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 しようとしています:

$ 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

「2 つの個別の git プル」とは、同僚がサブモジュールを削除する最初のコミットをプルしたときのことです。これにより問題は発生しません。その後、2 番目のコミットをプッシュします。これにより、ファイルがメイン リポジトリに追加されます。最後に、2 番目のコミットをプルします。繰り返しますが、問題はありません。

上記の段落で説明したように、これが「2 つの git pull で」機能し、1 つの git pull では機能しないのはなぜですか?

これを 1 つの git pull で機能させるためにできることはありますか?

4

0 に答える 0