【发布时间】:2011-07-04 20:21:49
【问题描述】:
我似乎无法摆脱 Git 子模块中未跟踪的内容。运行git status 产生:
添加--ignore-submodules 参数会隐藏这些消息;但我想知道是否有办法以更合适、更核心的方式去除这些污垢。
【问题讨论】:
-
这个答案:stackoverflow.com/a/5127213/199649 唤起了更多选择。
标签: git git-submodules
我似乎无法摆脱 Git 子模块中未跟踪的内容。运行git status 产生:
添加--ignore-submodules 参数会隐藏这些消息;但我想知道是否有办法以更合适、更核心的方式去除这些污垢。
【问题讨论】:
标签: git git-submodules
我发现这个blog post 可以正常工作。通过将ignore = dirty 选项添加到.gitmodules 文件中的每个条目。
[submodule "zen-coding-gedit3"]
path = zen-coding-gedit3
url = git://github.com/leafac/zen-coding-gedit3.git
ignore = dirty
【讨论】:
ignore = untracked 也存在,它显示修改后的跟踪文件,但不显示未跟踪文件。如果所有子模块都有一个全局设置,那就太好了......
根据我的经验,对于 MacOS,这可能是因为创建了 ._ 文件:
在这种情况下:试试dot_clean .
【讨论】:
这可能是由于您的子模块分支中的detached HEAD。如果是这种情况,请进入您的子模块路径(例如:./bundle/snipmate),然后运行git checkout master。
【讨论】:
这对我来说效果很好:
git update-index --skip-worktree <path>
如果它不适用于pathname,请尝试使用文件名。
让我知道这是否也适合您。
【讨论】:
我更喜欢使用SourceTree,所以我的解决方案是在 SourceTree 中打开子模块 repo,它会显示所有未跟踪文件的列表。然后我将它们全部分组,然后使用“删除”。
我能够这样做是因为我知道实际上并不需要所有未跟踪的文件。
【讨论】:
当您有另一个 .git [隐藏文件夹] 时可能会发生这种情况 在特定文件夹内..
已修改:./../..(修改后的内容,未跟踪的内容)
确保您的子目录不包含此 .git 文件夹。
如果是这种情况,可以通过从子目录中手动删除 .git 文件夹来解决问题。
【讨论】:
由于 git status 报告未跟踪的内容,因此获得干净状态的实际方法是进入这些子模块中的每一个,并且:
.gitignore 中引用未跟踪的内容。 .git/info/exclude,如peci1 报告in the comments。或在子模块规范中添加脏内容,如 ezraspectre 的 answer 中所述(已投票)。
git config -f .gitmodules submodule.<path>.ignore untracked
或添加一个全局 .gitignore 文件(通常是~/.gitignore-global)。例如.DS_Store 或在我的情况下Carthage/Build 由Marián Černý 在the comments 中报告。见.gitginore man page:
用户希望 Git 在所有情况下都忽略的模式(例如,由用户选择的编辑器生成的备份或临时文件)通常放入用户 @ 中
core.excludesFile指定的文件中987654337@。它的默认值为$XDG_CONFIG_HOME/git/ignore。如果$XDG_CONFIG_HOME未设置或为空,则使用$HOME/.config/git/ignore。
【讨论】:
.DS_Store文件已在我的一个子模块中自动创建(由OS X),阻止我提交主要项目。精氨酸!是时候更新.gitignore...
.git/info/exclude 并在其中添加忽略行(它的工作方式类似于 .gitignore,但不是共享存储库的一部分)。
在我的情况下,我克隆模块作为 ZF2 环境中新模块的起点。这样做是将它自己的 .git 文件夹放入目录中。
这种情况下的解决方案是删除 .git 文件夹(您可能需要显示隐藏文件才能查看它)。
【讨论】:
我昨天在一个有近 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 从所有子模块中删除未跟踪的文件(都是*.pyc、*.pyo 文件)。
要解决另一个问题,我必须运行 git submodule update 来更新每个子模块。
【讨论】:
如果这是一个临时问题,您可以进入子模块文件夹并运行 git reset HEAD --hard,但您将丢失子模块内的所有更改。
【讨论】:
您还可以转到每个子模块目录并充当单独的 git。 例如:
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
毕竟
【讨论】:
git add .。大多数情况下,所做的更改是添加的 .DS_Store 文件 - 正如 zourtney 在答案的第一条评论中提到的那样,这可能会被您的 .gitignore 捕获。
git submodule update --force。