2010-05-20 10 views
29

Estoy personalizando mi registro de git para que esté todo en 1 línea. En concreto, he añadido el siguiente alias:¿Cómo se muestra el número de revisión de SVN en el registro de git?

lg = log --graph --pretty=format:'%Cred%h%Creset - %C(yellow)%an%Creset - %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative 

Así, cuando corro git lg, veo lo siguiente:

* 41a49ad - zain - commit 1 message here (3 hours ago) 
* 6087812 - zain - commit 2 message here (5 hours ago) 
* 74842dd - zain - commit 3 message here (6 hours ago) 

Sin embargo, quiero añadir el número de revisión de SVN en allí también, por lo que se ve algo como:

* 41a49ad - r1593 - zain - commit 1 message here (3 hours ago) 

el normales git log muestra el número de revisión de SVN, así que estoy seguro de que esto debe ser posible. ¿Cómo hago esto?

Respuesta

9

Cuando dice que "lo normal git log que muestra el número de revisión de SVN", lo que supongo significa que está tratando con un repositorio manejado por git svn, que por defecto agrega una línea como esta al final de la c sincronizada ommits:

git-svn-id: svn://path/to/[email protected]###### <domain> 

Ahora, en lo que se refiere a git, esto es sólo el texto al azar, así que dudo que usted puede encontrar un descriptor de acceso % para leer el número ###### revisión de allí.

En este punto, su mejor opción sería simplemente analizar la salida de git log simple por usted mismo. Aquí hay un punto de partida crudo:

git log -z | tr '\n\0' ' \n' | sed 's/\(commit \S*\) .*git-svn-id: svn:[^@]*@\([0-9]*\) .*/\1 r\2/' 
+1

La solución de VonC es mucho más simple –

29

Considérese el comando git svn

  • que tiene una función de registro similar al de git log: git svn log
  • tiene la opción find-rev (para recuperar la revisión SVN de una clave SHA1) (introducido en git 1.6.0)

No estoy seguro de que pueda combinar esas dos opciones en una sola línea de comandos.
Un script (un poco como this one que no es exactamente lo que quiere, pero todavía puede dar una idea) podría estar en orden.


sdaau añade in the comments:

Un ejemplo de esto:

git svn find-rev $(git log --max-count 1 --pretty=format:%H) 
+2

Un ejemplo de esto: 'git svn find-rev $ (git log --max-count 1 --pretty = formato:% H)' – sdaau

+0

@sdaau Gracias. He incluido su ejemplo en la respuesta para obtener más visibilidad. – VonC

+0

Esos enlaces a las listas de correo están rotos. ¿Podrías reemplazarlos con un enlace más apropiado? P.ej. el archivo web http://web.archive.org/web/20070615164322/http://lists-archives.org/git/423371-git-svn-add-find-rev-command.html –

8

terminamos con algo como esto:

git svn log --oneline -1 | cut -d '|' -f1 

que da la última revisión de esa cesión temporal (que se pueden manipular git svn log parámetros para mostrar una nueva revisión, pero mantener --oneline y -1), pero con un espacio en blanco al final (algo así como "r9441 ") que creo que debería ser fácil de quitar.

creo que sirve ...

13

Run:

git rev-parse HEAD 

la que le da git commit hash.

luego usar ese cometer hash para ejecutar:

git svn find-rev <commit_hash> 

que le da svn revisión.

+0

Funciona a la perfección. ¡Gracias! – Mhmmd

+0

Me gusta esta respuesta mejor, porque parece más directa. Aquí está mi opinión sobre una versión de una sola línea: '' 'echo" r $ (git svn find-rev $ (git rev-parse HEAD)) '' '. Esto funciona como un alias, por supuesto: '' 'rev =! Echo" r $ (git svn find-rev $ (git rev-parse HEAD)) '' ' – hangtwenty

+0

Me gusta esta respuesta mejor, porque parece más directa. Aquí está mi opinión sobre una versión de una sola línea: '' 'echo" r $ (git svn find-rev $ (git rev-parse HEAD)) '' '. Esto funciona como un alias, por supuesto: '' 'svnrev =! Echo" r $ (git svn find-rev $ (git rev-parse HEAD)) '' '. Esto también lo hace para que puedas imitar a svn exportar aún mejor '' 'export =! Git archive --format zip --output/tmp/$ (git svnrev) master''' – hangtwenty

Cuestiones relacionadas