2015-02-25 5 views
6

Ich muss eine vollständige Kontext-Git diff programmatisch für eine Web-UI generieren.Für "git diff" gibt es eine -U <infinity> Option, um die ganze Datei anzuzeigen?

Die vorherrschende Antwort ist wie git diff -U99999

etwas

Mit einer -U/--unified Option:

A CLI für einen Voll Kontext diff Erzeugung wurde in Fragen bedeckt mit einer lächerlich hohen Schwelle (zB 999.999), tun git diff -U999999:

  1. macht mich vermuten, dass es eine Leistung
  2. getroffen werden könnten Schlimmer noch, es ist eine Richtigkeits Problem, wenn meine Datei größer als 1 M Zeilen ist

Gibt es eine Option -U zu zeigen, die ganze Datei?

+1

im Zusammenhang: http://Stackoverflow.com/q/27857967/2541573 – Jubobs

+1

Eine andere Option ist 'git diff -U \' wc -l | Schnitt -f 1 -d "" \ HEAD^ 'aber Sie Ich brauche 'wc' auf der längeren Version der Datei – kdopen

Antwort

4

Wenn Sie nur eine große Anzahl mit -U verwenden, können Sie die große Zahl wählen, könnte der Punkt, an dem Ihre Anwendung kann‘sein t handle Anzeige einer so großen Datei (diff).

es ist ein Richtigkeits Problem, wenn meine Datei größer als 1 M Zeilen ist

Und dieses Problem zu beheben, können Sie die Ausgabe für mehr als eine @@ ... @@ Linie überprüfen, um zu bestimmen, ob es vollständig ist - dies ermöglicht es Ihnen, um zu vermeiden, eine falsche Nummer zu geben.

+2

Experimentell fand ich 'git diff -U999999999999999999'' Segmentierungsfehler (Core Dumped) '. Eine Ziffer weniger, "-U99999999999999999", funktionierte. Außerdem führte das Hinzufügen von zwei oder mehr Ziffern zum ersten Befehl "-U999999999999999999999999" dazu, dass es sich so benahm, als ob die Option tatsächlich "-U0" gewesen wäre. –

0

Ehrlich gesagt, ist die beste Option, git difftool statt Vanille git diff zu verwenden. welche Werkzeuge Ihre Version von git Stützen zu sehen, geben Sie

git difftool --tool-help 

die, mit meiner Version (2.3.0) zeigt die folgende

$ git difftool --tool-help 
'git difftool --tool=<tool>' may be set to one of the following: 
     araxis 
     gvimdiff 
     gvimdiff2 
     gvimdiff3 
     meld 
     vimdiff 
     vimdiff2 
     vimdiff3 

The following tools are valid, but not currently available: 
     bc 
     bc3 
     codecompare 
     deltawalker 
     diffmerge 
     diffuse 
     ecmerge 
     emerge 
     kdiff3 
     kompare 
     opendiff 
     p4merge 
     tkdiff 
     xxdiff 

ich in der Regel meld verwenden, aber das ist nur eine persönliche Präferenz . git difftool nimmt die gleichen Argumente wie git diff plus ein paar, um mit dem Prozess zu helfen (Ich finde -y nützlich, um die Aufforderungen zu verhindern, wenn Sie von einer Datei zur nächsten bewegen).

Um die Änderungen von einem bestimmten eingeführt zu überprüfen commit, zum Beispiel, können Sie

git difftool -y -t meld 08f0f82^..08f0f82 

offensichtlich 08f0f82 mit der richtigen SHA-1 zu ersetzen verwenden.

Meine größte Beschwerde ist, dass es das Tool für jede modifizierte Datei in Sequenz startet (daher die Option -y).

Wenn Sie nur die Änderungen an einer bestimmten Datei in diesem Commit untersuchen möchten, können Sie einfach den Dateinamen zur Befehlszeile hinzufügen.

git difftool -y -t meld 08f0f82^..08f0f82 myfile.c 

Offensichtlich ist dies für die interaktive Nutzung - nicht für Scripting

+0

Ich brauche dies für den programmgesteuerten Zugriff von einem Web-UI. Sorry hat es nicht sofort klar gemacht. –

+0

Diese Antwort befasst sich nicht einmal mit der Frage, wie man ein Diff-Diff mit vollem Kontext ohne entfernte Zeilen erhält. –

Verwandte Themen