【问题标题】:git add -p --ignore-submodules?git add -p --ignore-submodules?
【发布时间】:2011-08-04 02:32:14
【问题描述】:
有没有办法在使用git add --patch时忽略脏子模块?
我设置了ignore = dirty as explained here。这似乎只适用于git status 和git diff。我爱git add -p。每次我想添加一个小改动时都必须跳过 10 个脏子模块,这让我很沮丧。
我还没有完全弄清楚git add -i,但看起来它处理脏子模块的方式相同。
【问题讨论】:
-
使用 Git 2.16.x/2.17(2018 年第一季度),您在执行 git add -p 或 git add -i 时不会再遇到子模块问题:请参阅 my answer below
标签:
git
add
git-submodules
【解决方案1】:
引用 Clint 的话,默默地添加忽略子模块更新似乎太危险了。
我不知道如何使用 add --patch 来完成,但我可以使用 add --edit 和 vim 键映射非常接近:
map <Leader>\x :%!sed '/^diff --git/\!{H;$\!d};x;1{$\!d;x};/\nindex[^\n]*160000\n/d'<CR>
while 将映射\\x 以消除所有子模块更新块。 \!s 是 vim 特定的 bang 转义,去掉那些反斜杠以在其他地方使用 sed。
【解决方案2】:
使用 Git 2.16.x/2.17,您甚至不需要 --ignore-submodules 选项,
因为 "git add -p" 被教导忽略对子模块的本地更改
它们不会干扰定期更改的部分添加
无论如何。
见commit 12434ef(2018 年 1 月 13 日)Nguyễn Thái Ngọc Duy (pclouds)。
(由 Junio C Hamano -- gitster -- 合并到 commit e7e8077,2018 年 1 月 23 日)
add--interactive:忽略除 HEAD 之外的子模块更改
对于 'add -i' 和 'add -p',我们可以对肮脏的行为采取的唯一措施
子模块条目是使用来自其HEAD 的新值更新索引。
内部的内容更改(来自其自己的索引,未跟踪的文件......)不会
重要的是,至少在“git add -i”了解启动新的
子模块内的交互式添加会话。
忽略除 HEAD 之外的所有其他子模块更改。
这减少了用户必须在“git add -i”中检查的条目数量,以及当存在脏子模块时他们必须回答“git add -p”的“no”数量。