2012-06-13 6 views
22

Gibt es einen Befehl, der einen Verweis und einen Dateipfad nehmen kann, und den vollständigen Inhalt der Datei ausgeben, wie es bei diesem Commit zu STDOUT war?Git: ganze Datei zu stdout

Eg. Etwas wie folgt aus:

git show-me-the-file HEAD~2 some/file | do_something_with_piped_output_here 
+3

git cat-datei -p HEAD ~ 2: einige/datei – jthill

+0

Danke jthill - das funktioniert auch. Mach es zu einer Antwort und ich werde es abstimmen. – Joel

+0

Dies ist, wofür ich es benutzt habe: meld <(git cat-file -p HEAD: einige/datei) <(git cat-file -p master: einige/datei); Zum Anzeigen eines Diffs von Dateien in Meld. Es gibt wahrscheinlich auch einen besseren Weg, aber es scheint gut zu funktionieren. – Joel

Antwort

38

git show

z.B.

git show HEAD:./<path_to_file>

+3

die '| cat' wird nicht benötigt (es sei denn, Sie möchten verhindern, dass der Pager hineintritt). –

+0

Das ":" ist wichtig, oder Sie sehen ein diff anstelle der vollständigen Datei. –

7

git show <ref spec>:<path> zum Beispiel, wenn Sie sich verpflichten, eine Datei sehen wollen am Punkt 9be20d1bf62 Sie tun:

git show 9be20d1bf62:a/b/file.txt

wenn Sie Datei auf bestimmten Zweig sehen möchten:

git show <branch name>:<path>

2

Sie möchten git show oder git archive für diesen Anwendungsfall. Der Befehl git-show ist jedoch eher darauf ausgerichtet, Dateien an die Standardausgabe zu senden.

# Show .gitignore from revision before this one. 
git show HEAD^:.gitignore 

der Teil vor dem Doppelpunkt ist ein Baum-isch nach gitrevisions (7) gebildet, während die zweite Hälfte ein Pfad relativ zum Anfang des GIT Arbeits Baum ist.