有没有办法在使用git add --patch
时忽略脏子模块?
我已经按照这里的说明设置了ignore = dirty
。这似乎只适用于git status
和git diff
。我喜欢git add -p
。每次想添加一个小改变时都需要跳过10个脏子模块让我感到沮丧。
我还没有完全弄清楚git add -i
,但看起来它处理脏子模块的方式相同。
有没有办法在使用git add --patch
时忽略脏子模块?
我已经按照这里的说明设置了ignore = dirty
。这似乎只适用于git status
和git diff
。我喜欢git add -p
。每次想添加一个小改变时都需要跳过10个脏子模块让我感到沮丧。
我还没有完全弄清楚git add -i
,但看起来它处理脏子模块的方式相同。
--ignore-submodules
选项,因为git add -p
已经学会忽略子模块的本地更改,这些更改不会影响常规更改的部分添加。参见提交12434ef(2018年1月13日)由Nguyễn Thái Ngọc Duy (pclouds
)提交。(由Junio C Hamano -- gitster
--合并于提交e7e8077,2018年1月23日)
在 'add -i
' 和 'add -p
' 中,我们对于一个脏的子模块条目唯一能够采取的行动是使用其 HEAD
的新值更新索引。
内部的内容更改(来自其自身的索引、未跟踪的文件等)无关紧要,至少在 'git add -i
' 学习在子模块中启动新的交互式添加会话之前如此。
忽略所有其他子模块的更改,只考虑 HEAD。
这减少了用户在 'git add -i
' 中需要检查的条目数量,也减少了当存在脏子模块时他们需要回答 'git add -p
' 的 'no
' 数量。
在IT领域,忽略子模块更新的添加似乎太危险了,引用克林特的话说,太危险了。
我不知道如何使用add --patch来完成它,但是我可以通过add --edit和vim键映射来实现相似的效果:
map <Leader>\x :%!sed '/^diff --git/\!{H;$\!d};x;1{$\!d;x};/\nindex[^\n]*160000\n/d'<CR>
将会映射\\x
以消除所有子模块更新块。其中的\!
是vim特定的bang转义字符,请删除这些反斜杠以在其他地方使用sed。
git add -p
或git add -i
时,您将不再遇到子模块的问题:请参见下面的答案。 - VonC