Wenn Sie einfach nur git diff
beziehen, die große Stück Kontextgröße ist konfigurierbar: es über die -U
Option gesetzt, falls angegeben, sonst von Ihrer diff.context
Einstellung, wenn gesetzt. Wenn all dies fehlschlägt, ist der Standard drei Zeilen Kontext (oben und unten).
Daraus folgt:
$ git config --global diff.context 1
reduziert den diff Kontext in jede Richtung auf eine Linie, statt 3. Es gibt auch einen --inter-hunk-context
Option Wert, den Sie mehr große Stücke verschmelzen verwenden können, um (das ist das Gegenteil von was Sie wollen, so erwähne ich es nur der Vollständigkeit halber, siehe diff.interHunkContext
, verfügbar in Git 2.12 und später, und siehe auch --function-context
aka -W
).
jedoch git add --interactive
läuft git diff-files
oder git diff-index
eher als Normal git diff
und als the git config
documentation cleverly hides:
diff.autoRefreshIndex
Wenn mit git diff mit Arbeit Baum Dateien zu vergleichen, Berücksichtigen Sie nicht, dass sich Änderungen nur als geändert ändern. Führen Sie stattdessen im Hintergrund git update-index --refresh
aus, um die zwischengespeicherten Statistikinformationen für Pfade zu aktualisieren, deren Inhalt im Arbeitsbaum mit den Inhalten im Index übereinstimmt. Diese Option ist standardmäßig wahr. Beachten Sie, dass dies betrifft nur git diff Porzellan, und nicht niedrigere Ebene diff Befehle wie git diff-Dateien.
(Fettdruck Betonung meins).
Obwohl dies die diff.autoRefreshIndex
Einstellung spricht über, gilt es für alle der konfigurierbaren Elemente: git diff
liest und gehorcht der Konfiguration, aber git diff-index
und git diff-files
und so weiter nicht (absichtlich, so dass Skripte, die Sanitär verwenden sollten Befehle statt Porzellan, kann das richtige Verhalten unabhängig von neu hinzugefügten Optionen erhalten).
Das bedeutet am Ende, dass, wenn Sie speziell auf git add --interactive
beziehen, die Antwort ist nicht, oder eher nicht ohne ein bisschen Arbeit. Das interaktive Perl-Skript zum Hinzufügen verwendet die Sanitärbefehle, nicht das Porzellan git diff
, so dass es eine solche Einstellung selbst erhalten und verwenden muss.Es tut erhalten und verwenden Sie Ihre diff.algorithm
und diff.compactionHeuristic
Einstellungen, aber es tut nicht verwenden Sie Ihre diff.context
Einstellung.
es so zu machen tun ist einfach, aber erfordert Modifizierung leicht Git:
diff --git a/usr/local/libexec/git-core/git-add--interactive b/tmp/git-add--interactive
index 235fb88..ba001a1 100755
--- a/usr/local/libexec/git-core/git-add--interactive
+++ b/tmp/git-add--interactive
@@ -47,2 +47,3 @@ my $normal_color = $repo->get_color("", "reset");
+my $diff_context_size = $repo->config('diff.context');
my $diff_algorithm = $repo->config('diff.algorithm');
@@ -753,2 +754,6 @@ sub parse_diff {
}
+ if (defined $diff_context_size) {
+ my $Uarg = sprintf("-U%d", $diff_context_size);
+ splice @diff_cmd, 1, 0, "$Uarg";
+ }
if ($diff_compaction_heuristic) {
(es kann eine bessere Möglichkeit, das -U
Argument einzurichten, mein Perl ungeschickt ist). Der interaktive Patch (oder git add -p
) -Modus benötigt dieses Snippet hinzugefügt, wenn es Ihre diff.context
Einstellung gehorchen soll.
Natürlich können Sie einfach split
(s
) ein großes Stück bei der interaktiven Zusatz, wie pedrorijo91 reminded us in a comment-Can I modify git-add's hunk size? Verknüpfung, also gibt es keine wirkliche Notwendigkeit dafür. Es könnte aber auch schön sein, wenn es dabei wäre.
siehe http://stackoverflow.com/questions/1122210/can-i-modify-git-adds-hunk-size – pedrorijo91
Danke pedrorijo91, nicht das, was ich suche. – repara2