Git子模块与修改和untracked内容 – 为什么以及如何删除它?
这就是我的git status
的结果:
# On branch master # Changed but not updated: # (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: vim/bundle/pathogen (modified content) # modified: vim/bundle/sparkup (untracked content) # no changes added to commit (use "git add" and/or "git commit -a")
运行git diff vim
显示:
diff --git a/vim/bundle/pathogen b/vim/bundle/pathogen --- a/vim/bundle/pathogen +++ b/vim/bundle/pathogen @@ -1 +1 @@ -Subproject commit fcf77f5101f3e589ce006c40ad3a0432735a05cf +Subproject commit fcf77f5101f3e589ce006c40ad3a0432735a05cf-dirty diff --git a/vim/bundle/sparkup b/vim/bundle/sparkup --- a/vim/bundle/sparkup +++ b/vim/bundle/sparkup @@ -1 +1 @@ -Subproject commit 04a81b41f116a19184359a6f8685c192f5c36c70 +Subproject commit 04a81b41f116a19184359a6f8685c192f5c36c70-dirty
为什么一个没有跟踪,另一个是修改,差异是什么意思? 但最重要的是:它是如何发生的以及如何去除它?
vim/bundle/pathogen
一个跟踪文件已经被修改了。 在子模块vim/bundle/sparkup
还有一些未跟踪的(并且是不受限制的)内容。 在这两种情况下,找出被修改/未被跟踪的东西的方法是切换到子模块目录并运行git status
。 (在子模块中没有跟踪文件的情况下,这通常是一个未在上游添加到.gitignore
的构build产品。)
将ignore = dirty
添加到位于repo根目录的.gitmodules
文件中的每个有问题的submodule
部分。 例:
[submodule "vim/bundle/nerdtree"] path = vim/bundle/nerdtree url = https://github.com/scrooloose/nerdtree.git ignore = dirty
正如NilsH的如何忽略git子模块中的更改一样 。 find感谢同步插件与git子模块和病原体 vimcast。
进入子模块的目录,并确保没有任何东西正在build造(某种types的输出)而不知道。
cd submoduledir/ git status
如果你在这里看到任何未跟踪的文件,只要做到这一点删除它们:
git reset --hard HEAD git clean -fxd
如果你真的确定要这样做(我正在pipe理带有病原和git子模块的vim包,还有一些我如何设法在回收站中获得一些标签文件夹 – 而且他们只需要去),你可以通过子模块删除未跟踪的文件。
cd YOUR_REPO_WITH_SUBMODULES/ git submodule foreach git clean -f -d
-f
强制, -d
删除目录
你可以在这里查看文档: https : //git-scm.com/docs/git-clean
作为FAQ中病原体的作者,您可以忽略全局标签:
git config --global core.excludesfile '~/.cvsignore' echo tags >> ~/.cvsignore
您可以使用以下命令清理存储库
git clean -fd -f is force and git won't do anything without the flat -d is for also removing directories
如果目录由不同的存储库pipe理,则使用f标志两次将其删除
git clean -ffd
文档: git干净