由于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
配置,但默认情况下如何将其应用于所有配置?
答案 0 :(得分:4)
请注意,即使有这样的配置,git 2。0。1(2014年6月25日)仍会显示已经暂存的子模块。
见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
文件。