如何摆脱Git子模块未跟踪的状态?
我似乎无法摆脱Git子模块中未跟踪的内容。 运行git status
产生:
#在分支主机上 #未进行提交的更改: #(使用“git add ...”更新将提交的内容) #(使用“git checkout - ...”放弃工作目录中的更改) #(提交或放弃子模块中未跟踪或修改的内容) # #修改:捆绑/ snipmate(未跟踪的内容) #修改:捆绑/环绕(未跟踪的内容) #修改:捆绑/尾随空白(未追踪的内容) #修改:捆绑/ zencoding(未跟踪的内容) # 没有更改添加到提交(使用“git add”和/或“git commit -a”)
添加--ignore-submodules
参数隐藏这些消息; 但是我想知道是否有办法以更合适的核心方式去除这些污垢。
由于git状态报告未跟踪的内容,所以具有干净状态的实际方法是进入每个子模块,并且:
- 添加并提交那些未追踪的内容,
- 或引用特定于每个模块的
.gitignore
相同的未跟踪内容。 - 或者可以将相同的忽略内容添加到子模块的
.git/info/exclude
,如注释 中的 peci1报告。 -
或者像ezraspectre的答案 (upvoted)中所提到的那样 ,在子模块规范中joindirty。
git config -f .gitmodules submodule.<path>.ignore untracked
我发现这个博客文章工作。 通过将.gitmodules
文件中的每个条目添加ignore = dirty
选项。
[submodule "zen-coding-gedit3"] path = zen-coding-gedit3 url = git://github.com/leafac/zen-coding-gedit3.git ignore = dirty
你也可以去每个子模块的目录,并作为一个分离的混帐。 例如:
cd my/project/submodule git status
… / 获取修改文件列表 /
git add . //to add all of them to commit into submodule git commit -m "message to your submodule repo"
您也可以使用更新远程子模块回购
git submodule update
毕竟
这将是由于子模块分支中的detached HEAD
。 进入你的子模块path(例如: ./bundle/snipmate
),然后git checkout master
。
我希望这个能帮上忙 :)
昨天我在这个问题上遇到了一个有12个子模块的项目。
git status
显示输出。
# On branch master # Changes not staged for commit: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # (commit or discard the untracked or modified content in submodules) # # modified: proj1 (untracked content) # modified: proj1 (modified content, untracked content) # ...
要解决未跟踪的内容错误,我必须使用.gitignore
从所有子模块(全部是由python生成的*.pyc
, *.pyo
文件)中移除未跟踪的文件。
为了解决其他问题,我不得不运行更新每个子模块的git submodule update
。
如果这是一个暂时的问题,你可以进入submodule文件夹并运行git reset HEAD --hard
但是你会失去子模块内部的所有修改。
在我的情况下,我克隆模块作为我的ZF2环境中的一个新模块的起点。 这样做是把自己的.git文件夹放到目录中。
在这种情况下解决scheme是删除.git文件夹(您可能需要显示隐藏的文件来查看它)。