2010-06-11 9 views
6

¿Cómo debo hacer para tener el nombre/fecha del autor (o confirmador) agregado al mensaje de registro cuando se "envía" a svn?Ir a svn: Agregar fecha de compromiso para registrar mensajes

Por ejemplo, si el mensaje de registro en Git es:

This is a nice modif

me gustaría tener el mensaje en el SVN ser algo como:

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

(Tenga en cuenta que estoy principalmente interesado en la fecha, ya que traté de usuarios de svn en .svn-authors)

¿Alguna manera simple? ¿Gancho necesitado? ¿Otra sugerencia?
(Ver también: http://article.gmane.org/gmane.comp.version-control.git/148861)

Respuesta

-1

¿Se trata simplemente de cambiar el formato de salida de registro?

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

No del todo. Se trata de reescribir el registro cuando haces "git svn dcommit". –

+0

Ya veo. Perdón por malentendido, no tengo experiencia con 'git-svn'. – takeshin

3

Una forma de lograr esto es mediante el uso de un script, la variable GIT_EDITOR medio ambiente y la opción dcommit--edit.

Guarde lo siguiente en un archivo, vamos a llamarlo 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" 

Asegúrese de que el guión es ejecutable: chmod +x svnmessage.sh. Y ejecutar su dcommit como:

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

La opción --edit se edit the commit message before committing to SVN mediante la variable de entorno GIT_EDITOR para procesar el mensaje de confirmación. Consulte git-svn y git-var para obtener más información.

Se puede crear un alias para hacer las cosas un poco más fácil:

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

Entonces sólo tiene que utilizar git dcommit-edit.


El guión se basa en la forma en git-svn.perl sifones la salida git cat-file para crear el SVN mensaje. La misma técnica se usa para extraer la información del autor y del autor. Un simple cometer podría parecerse a:

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

foo-27 

El guión tendrá típicamente .git/COMMIT_EDITMSG que se le pasa como parámetro; cuyo contenido contendrá el mensaje de confirmación de Git que se utilizará para el mensaje de confirmación de SVN.

+0

Gracias por su amplia respuesta. ¡Eso suena asombroso! Sin embargo, estoy ejecutando Windows ... ¿Tiene un ejemplo para Windows también? Además, ¿esto cambiará la variable de entorno GIT_EDITOR solo para la operación actual o también se cambiará permanentemente para todas las demás operaciones? –

+0

@DanielHilgarth: Lo siento, no tengo Windows a mi disposición; tal vez alguien con Windows podría probar esto y dar su opinión.Configurando 'GIT_EDITOR' (o cualquier variable de entorno) con un comando reemplaza' GIT_EDITOR' solo para ese comando; no lo cambia permanentemente –

+0

Gracias por el comentario. Creo que no debería ser demasiado difícil escribir un pequeño programa que haga lo mismo que tu script, al menos si lo entiendo :) ¿Podrías explicar brevemente qué hace el script en general y esos comandos sed en particular? Un ejemplo concreto sería útil –

Cuestiones relacionadas