2010-06-11 7 views
6

Comment faire pour que le nom de l'auteur (ou du committer) soit ajouté au message lors de la "dcommitting" de svn?Git to svn: Ajout de la date de validation pour consigner les messages

Par exemple, si le message du journal dans Git est:

This is a nice modif

Je voudrais avoir le message svn quelque chose comme:

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

(Notez que je suis principalement intéressé par la date, puisque j'ai déjà mappé les utilisateurs svn dans .svn-auteurs)

Un moyen simple? Crochet nécessaire? Autre suggestion?
(Voir aussi: http://article.gmane.org/gmane.comp.version-control.git/148861)

Répondre

-1

Est-il juste de changer le format de sortie de journal?

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

Pas tout à fait. Il s'agit de réécrire le journal lorsque vous faites "git svn dcommit". –

+0

Je vois. Désolé pour malentendu, je n'ai aucune expérience avec 'git-svn'. – takeshin

3

Une façon d'y arriver est à l'aide d'un script, la variable d'environnement GIT_EDITOR et l'option dcommit--edit.

Enregistrez ce qui suit dans un fichier, nous allons l'appeler 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" 

Assurez-vous que le script est exécutable: chmod +x svnmessage.sh. Et lancez votre dcommit comme:

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

L'option --edit sera edit the commit message before committing to SVN en utilisant la variable d'environnement GIT_EDITOR pour le traitement du message de validation. Voir git-svn et git-var pour plus d'informations.

Vous pouvez créer un alias pour rendre les choses un peu plus facile:

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

Ensuite, il suffit d'utiliser git dcommit-edit.


Le script repose sur la façon dont git-svn.perl siphons la sortie git cat-file pour créer le message de commit SVN. La même technique est utilisée pour extraire l'information de l'auteur et du committer. Un simple commit pourrait ressembler à:

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

foo-27 

Le script aura typiquement .git/COMMIT_EDITMSG qui lui est passé comme paramètre; Le contenu de ce message contiendra le message de validation Git qui sera utilisé pour le message de validation SVN.

+0

Merci pour votre réponse complète. Cela a l'air génial! Cependant, je cours Windows ... Avez-vous un exemple pour Windows, aussi? En outre, cela changera-t-il la variable d'environnement GIT_EDITOR uniquement pour l'opération en cours ou sera-t-elle modifiée de façon permanente pour toutes les autres opérations? –

+0

@DanielHilgarth: Désolé, je n'ai pas Windows à ma disposition. peut-être quelqu'un avec Windows pourrait-il essayer et donner son avis.Définir 'GIT_EDITOR' (ou n'importe quelle variable d'environnement) avec une commande remplace' GIT_EDITOR' juste pour cette commande; ça ne le change pas de façon permanente. –

+0

Merci pour le commentaire. Je pense qu'il ne devrait pas être trop difficile d'écrire un petit programme qui fait la même chose que votre script - du moins si je le comprends :) Pourriez-vous s'il vous plaît expliquer brièvement ce que fait le script en général et ces commandes sed en particulier? Un exemple concret serait utile. –

Questions connexes