git add -p --ignore-submodules?

5

有没有办法在使用git add --patch时忽略脏子模块?

我已经按照这里的说明设置了ignore = dirty。这似乎只适用于git statusgit diff。我喜欢git add -p。每次想添加一个小改变时都需要跳过10个脏子模块让我感到沮丧。

我还没有完全弄清楚git add -i,但看起来它处理脏子模块的方式相同。


使用 Git 2.16.x/2.17 (2018年第一季度),在执行 git add -pgit add -i 时,您将不再遇到子模块的问题:请参见下面的答案 - VonC
2个回答

1
使用Git 2.16.x/2.17版本,您甚至不需要--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--interactive: 忽略子模块除HEAD以外的更改

在 'add -i' 和 'add -p' 中,我们对于一个脏的子模块条目唯一能够采取的行动是使用其 HEAD 的新值更新索引。
内部的内容更改(来自其自身的索引、未跟踪的文件等)无关紧要,至少在 'git add -i' 学习在子模块中启动新的交互式添加会话之前如此。

忽略所有其他子模块的更改,只考虑 HEAD。
这减少了用户在 'git add -i' 中需要检查的条目数量,也减少了当存在脏子模块时他们需要回答 'git add -p' 的 'no' 数量。


1

在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。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接