这是因为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
wiki
作为子模块添加到目录Wiki中。我不希望来自wiki
(即Wiki目录)的任何更改都反映在我的主代码存储库中。如果我只是添加.gitmodules
路径在我的.gitignore
主仓库的?我应该怎么做?