Git

Git子模組顯示新送出,子模組狀態表示沒有送出

  • May 18, 2020

在 git 儲存庫中,我設置了 .gitmodules 文件以引用 github 儲存庫:

[submodule "src/repo"]
   path = src/repo
   url = repourl

當我在這個 repo 上“git status”時,它顯示:

On branch master
Your branch is up-to-date with 'origin/master'.

Changes not staged for commit:
 (use "git add <file>..." to update what will be committed)
 (use "git checkout -- <file>..." to discard changes in working directory)

modified:   src/repo (new commits)

如果我 cd 到 src/repo 和 repo 上的 git status ,它說沒有什麼可送出的。

為什麼我的頂級 git repo 抱怨?

這是因為 Git 記錄應該為每個子模組簽出哪個送出(不是分支或標籤,恰好是 SHA-1 雜湊中表示的一個送出)。如果您更改子模組目錄中的某些內容,Git 會檢測到它並敦促您在頂級儲存庫中送出這些更改。

git diff在頂級儲存庫中執行以顯示 Git 的實際想法發生了哪些變化。如果您已經在子模組中進行了一些送出(因此在子模組中“清理”),它會報告子模組的雜湊更改。

$ git diff
diff --git a/src/repo b/src/repo
index b0c86e2..a893d84 160000
--- a/src/repo
+++ b/src/repo
@@ -1 +1 @@
-Subproject commit b0c86e28675c9591df51eedc928f991ca42f5fea
+Subproject commit a893d84d323cf411eadf19569d90779610b10280

否則,它會顯示-dirty您無法在頂級儲存庫中暫存或送出的雜湊更改。 git status還聲稱子模組具有未跟踪/修改的內容。

$ git diff
diff --git a/src/repo b/src/repo
--- a/src/repo
+++ b/src/repo
@@ -1 +1 @@
-Subproject commit b0c86e28675c9591df51eedc928f991ca42f5fea
+Subproject commit b0c86e28675c9591df51eedc928f991ca42f5fea-dirty

$ git status
On branch master
Changes not staged for commit:
 (use "git add <file>..." to update what will be committed)
 (use "git checkout -- <file>..." to discard changes in working directory)
 (commit or discard the untracked or modified content in submodules)

   modified:   src/repo (untracked content)

no changes added to commit (use "git add" and/or "git commit -a")

要更新應為子模組簽出的送出記錄,除了送出子模組中的更改外,您還需要 git commit 子模組:

git add src/repo

我剛剛遇到了同一類問題,並且能夠在已接受答案的評論部分中使用**@AugustinAmenabar提供的解決方案。**我的設置有點複雜,所以我添加了--recursive標誌來更新所有依賴項。

git submodule update --recursive src/repo

引用自:https://unix.stackexchange.com/questions/214879