2010-06-11 16 views
6

Co należy zrobić, aby nazwisko/datę autora (lub dostawcy) zostały dodane do logu , gdy "dcommitting" do svn?Git to svn: Dodawanie daty zatwierdzenia do rejestrowania wiadomości

Na przykład, jeżeli komunikat dziennika w Git jest:

This is a nice modif

Chciałbym mieć komunikat w SVN być coś takiego:

This is a nice modif 
----- 
Author: John Doo <[email protected]> 2010-06-10 12:38:22 
Committer: Nice Guy <[email protected]> 2010-06-10 14:05:42

(zauważ, że jestem głównie zainteresowany datą, ponieważ już zmapowałem użytkowników svn w autorach .svn)

W każdy prosty sposób? Potrzebny hak? Inne sugestie?
(Zobacz także: http://article.gmane.org/gmane.comp.version-control.git/148861)

Odpowiedz

-1

Czy chodzi tylko o zmianę formatu wyjściowego dziennika?

git log --pretty="format:%s %an %ae %cn %d" 
git help log 
+0

Niezupełnie. Chodzi o przepisanie dziennika, gdy wykonujesz polecenie "git svn dcommit". –

+0

Rozumiem. Przepraszam za nieporozumienie, nie mam doświadczenia z 'git-svn'. – takeshin

3

Jednym ze sposobów osiągnięcia tego celu jest za pomocą skryptu, zmiennej GIT_EDITOR środowiska i opcji dcommit--edit.

Zapisz następujący tekst w pliku, nazwijmy to svnmessage.sh:

#!/bin/sh 
c=`git rev-parse HEAD` 
t=`git cat-file -t $c` 
m=`cat "$1"` 
if [ "commit" = "$t" ]; then 
    o=`git cat-file $t $c` 
    o_a=`echo "$o" | grep '^author '` 
    o_c=`echo "$o" | grep '^committer '` 
    author=`echo "$o_a" | sed -e 's/^author \(.*>\).*$/\1/'` 
    authorts=`echo "$o_a" | sed -e 's/^author .*> \([0-9]\+\) .*$/\1/'` 
    authordt=`date -d @$authorts +"%Y-%m-%d %H:%M:%S %z"` 
    committer=`echo "$o_c" | sed -e 's/^committer \(.*>\).*$/\1/'` 
    committerts=`echo "$o_c" | sed -e 's/^committer .*> \([0-9]\+\) .*$/\1/'` 
    committerdt=`date -d @$committerts +"%Y-%m-%d %H:%M:%S %z"` 
    m="$m 
----- 
Author: $author $authordt 
Committer: $committer $committerdt" 
fi 
echo "$m" > "$1" 

Upewnij się, że skrypt jest wykonywalny: chmod +x svnmessage.sh. I uruchomić dcommit jak:

GIT_EDITOR="/path/to/script/svnmessage.sh" git svn dcommit --edit 

Opcja --edit będzie edit the commit message before committing to SVN użyciu zmiennej środowiskowej GIT_EDITOR na przetwarzanie wiadomość popełnienia. Aby uzyskać więcej informacji, patrz git-svn i git-var.

Można by utworzyć alias do rzeczy nieco prostsze:

git config --global alias.dcommit-edit '!GIT_EDITOR="$HOME/bin/svnmessage.sh" git svn dcommit --edit' 

Następnie wystarczy użyć git dcommit-edit.


Scenariusz opiera się na jak git-svn.perl syfony wyjście git cat-file do tworzenia SVN popełnienia wiadomość. Ta sama technika służy do wyodrębniania informacji o autorze i przekazującym dane. Prosty popełnić może wyglądać następująco:

$ git cat-file commit 24aef4f 
tree eba872d9caad7246406f310c926427cfc5e73c8d 
parent 7dd9de9b5c68b9de1fc3b798edbab2e350ae6eac 
author User <[email protected]>54806 -0500 
committer User <[email protected]>54806 -0500 

foo-27 

Skrypt zazwyczaj mają .git/COMMIT_EDITMSG przeszedł do niego jako parametr; którego treść będzie zawierać komunikat zatwierdzenia Git, który będzie używany dla komunikatu zatwierdzenia SVN.

+0

Dziękuję za wyczerpującą odpowiedź. To brzmi świetnie! Jednak używam systemu Windows ... Czy masz również przykład dla systemu Windows? Dodatkowo, czy zmieni to zmienną środowiskową GIT_EDITOR tylko dla bieżącej operacji, czy też będzie ona trwale zmieniona dla wszystkich dalszych operacji? –

+0

@DanielHilgarth: Przepraszam, nie mam systemu Windows do dyspozycji; może ktoś z Windows mógłby spróbować i wyrazić opinię.Ustawienie 'GIT_EDITOR' (lub dowolnej zmiennej środowiskowej) za pomocą polecenia zastępuje' GIT_EDITOR' tylko dla tego polecenia; nie zmienia go na stałe. –

+0

Dzięki za komentarz. Myślę, że nie powinno być zbyt trudno napisać mały program, który robi to samo, co twój skrypt - przynajmniej jeśli go zrozumiem :) Czy mógłbyś krótko wyjaśnić, co robi skrypt, a zwłaszcza polecenia sed? Konkretny przykład byłby pomocny. –

Powiązane problemy