2013-02-08 3 views
12

Nachdem ich git filter-branch ausgeführt habe, wie bekomme ich eine Liste von alten Commit-SHAs, wie sie von filter-branch in ihre neuen entsprechenden Commit-SHAs geschrieben wurden?Wie bekomme ich eine Liste von alten-> neuen umgeschriebenen Commit-SHAs von 'git filter-branch'?

Zum Beispiel etwas Ähnliches wie:

b19fd985746c1f060f761d42d353e387bec243fb -> c8ab40ef9bae3b58642a8d1e5b90720d093a60b5 
c5ebba1eeb92ca76c0effa32de14178ec7f07db6 -> 4d5a9958b98dbcfa47ce1354bb2af4cc77904639 
705f71543235b872ca3e1067538e36d14044429d -> d2aafbd6e5b91955b62dee34f4a0abf0171ba016 

Wo die linke Spalte die Liste der ursprünglichen Schas ist, und die rechte Spalte sind die neuen Schas, nachdem sie durch Filterzweig neu geschrieben werden.

Ich sehe, dass die man page für Filter-Zweig eine map Funktion erwähnt, aber ich verstehe nicht, ob das hier nützlich ist, oder wenn es ist, wie man es benutzt.

Danke für Ihre Hilfe!

Antwort

18

Ich musste stochern um die Quelle für git-filter-branch, um dies zu arbeiten. Es ist nicht dokumentiert (soweit ich das beurteilen kann), aber die alte Commit-ID wird explizit als $GIT_COMMIT exportiert. Dieser arbeitete für mich:

$ git filter-branch --your-filters-here --commit-filter 'echo -n "${GIT_COMMIT}," >>/tmp/log; git commit-tree "[email protected]" | tee -a /tmp/log' your-branch-here 
[...] 
$ cat /tmp/log 
70d609ba7bc58bb196a2351ba26afc5db0964ca6,d9071b49743701c7be971f76ddc84e76554516c7 
0d1146dcabc00c45fb9be7fe923c955f7b6deb50,cb6813f9aca5e5f26fcc85007c5bb71552b91017 
[...] 

(Diese Datei, natürlich, hat das Format <original commit hash>,<new commit hash>.)

Ich bin ein bisschen neugierig, was Ihre Absichten bei der Verwendung dieser obwohl sind. Es scheint nicht so, als würden Sie Informationen benötigen, um zu wissen, ob Sie den Filter-Zweig "richtig" verwenden (d. H. Den vorhandenen veröffentlichten Verlauf nicht bearbeiten).

+0

Ehrfürchtig, vielen Dank !! Die -n wurde aus irgendeinem Grund auch gedruckt, also nahm ich das heraus. Es macht mir nichts aus, dass die Ausgabe auf wechselnden Linien ist. Mach dir keine Sorgen, das ist * nicht * ein öffentliches Repo. :-) –

+0

Oh, und es scheint, dass $ GIT_COMMIT dokumentiert ist: "Die $ GIT_COMMIT Umgebungsvariable wird so gesetzt, dass sie die ID des Commits enthält, das umgeschrieben wird" –

+0

Ah, gut. Das ist beruhigend - macht mich viel weniger besorgt, dass dies auf magische Weise aufhören wird, mit der nächsten Version von Git zu arbeiten. :-) – impl

Verwandte Themen