为什么';t git add--修补程序使用二进制文件的git add-N?
为什么';t git add--修补程序使用二进制文件的git add-N?,git,binaryfiles,git-add,Git,Binaryfiles,Git Add,git add--patch不适用于使用git add-N添加的二进制文件。有人知道为什么吗?在下面的示例中,您可以看到,git add--patch拾取的是文本文件a,而不是二进制文件0 echo a > a echo '\0' > 0 git add -N 0 git add -N a git add --patch diff --git a/a b/a index e69de29..7898192 100644 --- a/a +++ b/a @@ -0,0 +1 @@ +a
git add--patch
不适用于使用git add-N
添加的二进制文件。有人知道为什么吗?在下面的示例中,您可以看到,git add--patch
拾取的是文本文件a
,而不是二进制文件0
echo a > a
echo '\0' > 0
git add -N 0
git add -N a
git add --patch
diff --git a/a b/a
index e69de29..7898192 100644
--- a/a
+++ b/a
@@ -0,0 +1 @@
+a
Stage this hunk [y,n,q,a,d,/,e,?]? y
该实现明确排除了二进制文件。见第7行:
1 sub patch_update_cmd {
2 my @all_mods = list_modified($patch_mode_flavour{FILTER});
3 error_msg sprintf(__("ignoring unmerged: %s\n"), $_->{VALUE})
4 for grep { $_->{UNMERGED} } @all_mods;
5 @all_mods = grep { !$_->{UNMERGED} } @all_mods;
6
7 my @mods = grep { !($_->{BINARY}) } @all_mods;
8 my @them;
9
10 if (!@mods) {
11 if (@all_mods) {
12 print STDERR __("Only binary files changed.\n");
13 } else {
14 print STDERR __("No changes.\n");
15 }
16 return 0;
17 }
18 if ($patch_mode_only) {
19 @them = @mods;
20 }
21 else {
22 @them = list_and_choose({ PROMPT => __('Patch update'),
23 HEADER => $status_head, },
24 @mods);
25 }
26 for (@them) {
27 return 0 if patch_update_file($_->{VALUE});
28 }
29 }
很有趣。知道为什么吗?自从2006年引入命令(commit 5cde71d64aff)以来,情况就是这样。我只能推测原因——也许是因为补丁添加二进制文件没有意义,因为它不能被分割成大块。