使用git add --patch
时有没有办法忽略脏子模块?
我设置了ignore = dirty
as explained here。这似乎只适用于git status
和git diff
。我喜欢git add -p
。每次我想添加一个小的改变时,不得不跳过10个脏的子模块让我感到沮丧。
我还没有弄清楚git add -i
,但看起来它以同样的方式处理脏子模块。
如果引用Clint,那么静默添加忽略子模块更新似乎太危险了。
我不知道如何使用add --patch来实现它,但是我可以通过添加--edit和vim键映射来完成:
map <Leader>\x :%!sed '/^diff --git/\!{H;$\!d};x;1{$\!d;x};/\nindex[^\n]*160000\n/d'<CR>
同时将映射\\x
以消除所有子模块更新帅哥。其中的\!
s是vim特定的爆炸逃脱,剥去那些反斜杠以在其他地方使用sed。
使用Git 2.16.x / 2.17,您甚至不需要--ignore-submodules
选项,
因为“git add -p
”被教导忽略对子模块的局部变化,因为它们无论如何都不会干扰部分添加常规变化。
参见commit 12434ef撰写的Nguyễn Thái Ngọc Duy (pclouds
)(2018年1月13日)。
(由Junio C Hamano -- gitster
--合并于commit e7e8077,2018年1月23日)
add - interactive:忽略除HEAD之外的子模块更改
对于'
add -i
'和'add -p
',我们可以对脏子模块条目采取的唯一操作是使用HEAD
中的新值更新索引。 内部更改(来自其自己的索引,未跟踪文件...)无关紧要,至少在'git add -i
'了解到在子模块内启动新的交互式添加会话之前。忽略除HEAD之外的所有其他子模块更改。 这减少了用户在'
git add -i
'中检查的条目数,以及当存在脏子模块时他们必须回答'no
'的'git add -p
'的数量。