2012-04-20 9 views
8

Mogę z powodzeniem uruchomić git filter-branch na jakimś kodzie do np. scalić inny repo do podkatalogu [1]:Git filter-branch: czy można zaktualizować komunikaty commit, aby odwoływać się do starych identyfikatorów commitów?

git filter-branch --index-filter ' 
    git ls-files -s | 
    perl -pe "s{\t\"?}{$&helper/}" | 
    GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info && 
    mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE 
' remotes/helper/master 

Ale teraz, ja też uwielbiam rozszerzyć wiadomość każdy popełnić w celu uwzględnienia jej byłego ID (SHA hash), ponieważ te commity mogły mieć komentarze/rozmowy na GitHub, które nie zostaną przeniesione.

E.g. dodać dodatkowy wiersz tak (gdzie bob/helpers jest sztywno/znany z góry):

[COPIED FROM bob/[email protected]] 

O ile mogę powiedzieć, Git na msg-filter tylko daje mi oryginalną wiadomość i Git na env-filter nie zawiera identyfikatora popełniania (SHA ma) jako zmienna wejściowa. Czy to jest możliwe, czy nie?

Dzięki!

[1] Via this great article, z Perl filtrować z this email thread obejść błąd w systemie Mac OS X.

Odpowiedz

5

--msg-filter byłoby gdzie to zrobić, a oryginalny popełnić ID jest w zmiennej środowiskowej $GIT_COMMIT, więc (untested) tworzy filtr wiadomości po prostu: cat; echo "[COPIED FROM bob/[email protected]$GIT_COMMIT]".

+0

Działa fantastycznie dobrze! Nie wiedziałem, że istnieje zmienna środowiskowa. Dzięki! –

Powiązane problemy