如何摆脱Git子模块未跟踪状态?

Tom*_*ash 140 git git-submodules

我似乎无法摆脱Git子模块中未跟踪的内容.运行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:   bundle/snipmate (untracked content)
#    modified:   bundle/surround (untracked content)
#    modified:   bundle/trailing-whitespace (untracked content)
#    modified:   bundle/zencoding (untracked content)
#
no changes added to commit (use "git add" and/or "git commit -a")

添加--ignore-submodules参数会隐藏这些消息; 但我想知道是否有办法以更合适的核心方式摆脱这种污垢.

ezr*_*tre 135

我发现这篇博文整体上都有用.通过向文件ignore = dirty中的每个条目添加选项.gitmodules.

[submodule "zen-coding-gedit3"]
    path = zen-coding-gedit3
    url = git://github.com/leafac/zen-coding-gedit3.git
    ignore = dirty
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是`ignore = untracked`也存在,并显示修改后的跟踪文件,但不显示未跟踪的文件.如果所有子模块都有这样的全局设置,那就太好了...... (20认同)

Von*_*onC 88

由于git状态报告未跟踪的内容,因此具有干净状态的实际方法是进入每个子模块,并且:

用户希望Git在所有情况下忽略的模式(例如,由用户选择的编辑器生成的备份或临时文件)通常会进入core.excludesFile用户指定的文件中~/.gitconfig.它的默认值是$XDG_CONFIG_HOME/git/ignore.如果$XDG_CONFIG_HOME未设置或为空,$HOME/.config/git/ignore则使用.

  • +1,我准备尖叫直到我发现这个...然后在我的一个子模块中自动创建了一个`.DS_Store`文件(由OS X),阻止我提交主项目.精氨酸!是时候更新`.gitignore`了... (4认同)
  • 你甚至可以在没有提交和创建.gitignore(它本身变得无法跟踪)的情况下做到.打开子模块的`.git/info/exclude`并在那里添加忽略行(它的工作方式类似于.gitignore,但不是共享存储库的一部分). (2认同)

Ric*_*ins 11

您也可以转到每个子模块目录并充当分离的git.例如:

cd my/project/submodule
git status
Run Code Online (Sandbox Code Playgroud)

.../获取修改文件列表 /

git add .  //to add all of them to commit into submodule
git commit -m "message to your submodule repo"
Run Code Online (Sandbox Code Playgroud)

您还可以使用更新远程子模块库

git submodule update
Run Code Online (Sandbox Code Playgroud)

毕竟

  • 您可能不想在不查看修改过的文件的情况下执行`git add .`.大多数情况下,所做的更改是添加的`.DS_Store`文件 - 这可能应该被你的`.gitignore`捕获,正如zourtney在答案的第一个评论中提到的那样. (5认同)
  • 如果您实际上不想更新子模块并希望恢复到原始状态,您可能需要运行`git submodule update --force`。 (2认同)

小智 8

这对我来说很好:

git update-index --skip-worktree <path>
Run Code Online (Sandbox Code Playgroud)

如果它不适用于pathname,请尝试文件名。让我知道这是否也适合您。


Bro*_*Lin 5

这可能是由于detached HEAD您的子模块分支中的。如果是这种情况,请进入您的子模块路径(例如:./bundle/snipmate),然后运行git checkout master​​。