Git
Git子模組顯示新送出,子模組狀態表示沒有送出
在 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