默认情况下如何使git忽略对子模块的更改

时间:2012-10-31 14:14:01

标签: git git-submodules gitignore git-config

由于git模块是在Git中引入的,我喜欢这样添加它们:

[submodule "actionbarsherlock"]
path = actionbarsherlock
url = git://github.com/JakeWharton/ActionBarSherlock.git
ignore = dirty

这里的重要部分是ignore = dirty

使用git submodule add命令时,我被迫在.gitmodules文件中自行添加此行。

如何将此作为我在未来中所做的每个git submodule add的默认行为?

我知道submodule.<name>.ignore配置,但默认情况下如何将其应用于所有配置?

5 个答案:

答案 0 :(得分:4)

请注意,即使有这样的配置,git 2。0。1(2014年6月25日)仍会显示已经暂存的子模块。

commit 1d2f393

Jens Lehmann (jlehmann)
  

目前将submodule.<name>.ignore和/或diff.ignoreSubmodules设置为“all”会抑制差异系列,状态和提交的所有子模块更改输出。

     

对于状态和提交,这确实令人困惑,因为即使用户选择通过手动添加它来为忽略的子模块记录新提交,此更改也不会显示在待提交的更改下。
  为了增加对伤害的侮辱,当只有被忽略的子模块被暂存时,后来的“git commit”会出现“nothing to commit”错误。

     

通过使wt_status始终打印暂存的子模块更改来解决此问题,无论是否配置了忽略设置。
  唯一的例外是当用户明确使用“--ignore-submodules=all”命令行选项时,在这种情况下,子模块输出仍然被抑制。
  当只修改被忽略的子模块时,这也会使“git commit”再次起作用   staged,因为该命令使用wt_status结构的“可提交”成员来确定是否存在分阶段更改。

另请参阅git commit部分的commit c215d3d

答案 1 :(得分:3)

所以要关闭它,没有,它没有默认选项(遗憾的是)。

答案 2 :(得分:2)

今天我发现可以使用git config来更改.gitmodules文件,因此可以添加ignore dirty标志而无需进入文件并手动添加行:

git config -f .gitmodules submodule.actionbarsherlock.ignore dirty

就我而言,我能够使用该命令自动执行脚本中的两个步骤。

答案 3 :(得分:1)

我不确定默认选项。如果它是二元状态(忽略与否),你可以获得:

diff.ignoreSubmodules
   Sets the default value of --ignore-submodules. Note that this affects only git diff Porcelain, and not lower level diff commands such as git diff-files.  git checkout also
   honors this setting when reporting uncommitted changes.

但是当你使用dirty时,我不确定是否有办法设置默认值。无论如何,您可以使用$PATH中的git别名来执行此操作。编写一个接受子模块作为参数的脚本并设置正确的dirty配置值,然后将该脚本添加到$PATH。称之为git-<command>,它将以git <command>形式提供。

答案 4 :(得分:-1)

你是说这个吗?

git config --global core.ignore dirty

将首选项写入~/.gitconfig文件。