2013-02-08 17 views
12

Dopo aver eseguito git filter-branch, come ottengo un elenco di vecchi SHA di commit come riscritti da filter-branch ai loro nuovi SHA di commit corrispondenti?Come posso ottenere un elenco di vecchi -> nuovi SHA di commit riscritti da 'git filter-branch'?

Per esempio, qualcosa di simile a:

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

Se la colonna di sinistra è l'elenco dei originale SHAs, e la colonna di destra sono i nuovi SHAs dopo essere stato riscritto dal filtro-ramo.

Vedo che lo man page per il ramo filtro menziona una funzione map, ma non capisco se sia utile qui, o se lo è, come usarlo.

Grazie per il vostro aiuto!

risposta

18

Ho dovuto cercare la fonte per git-filter-branch per risolvere questo problema. Non è documentato (per quanto posso dire), ma il vecchio ID di commit viene esportato esplicitamente come $GIT_COMMIT. Questo ha funzionato per me:

$ 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 
[...] 

(Quel file, ovviamente, ha il formato <original commit hash>,<new commit hash>.)

Sono un po 'curioso quello che le vostre intenzioni sono con l'utilizzo di questo però. Non sembra che le informazioni di cui avresti bisogno in genere sappiano se stai usando il filtro branch come "giusto" (cioè, non manipolando la cronologia pubblicata esistente).

+0

Impressionante, grazie mille !! Anche la -n è stata stampata per qualche motivo, quindi l'ho tolto. Non mi interessa che l'output sia su linee alternate. Non preoccuparti, questo è * non * un repo pubblico. :-) –

+0

Oh, e sembra che $ GIT_COMMIT sia documentato: "la variabile d'ambiente $ GIT_COMMIT verrà impostata per contenere l'id del commit che viene riscritto" –

+0

Ah, buono. Questo è rassicurante - mi rende molto meno preoccupato che questo semplicemente smetterà di funzionare magicamente con la prossima versione di Git. :-) – impl

Problemi correlati