2012-06-18 12 views
5

Me gustaría averiguar todos los autores que han cambiado una línea de código. Git-log puede hacerlo en el nivel de archivo. Leí la página de manual y parece que git log no puede hacerlo en el nivel de línea. ¿Hay alguna manera de usar el comando git para hacerlo o tengo que escribir un script para mí?¿puede encontrar todos los autores que alguna vez han cambiado una línea de código?

Para mi propósito, me gustaría hacer esto en todas las líneas de código. Estoy haciendo esto para producir datos de entrenamiento de autoría para mi investigación.

+2

Puede culpar/anotar para obtener la información en un nivel por revisión. "¿Quién cambió una línea?" Comienza a ser una pregunta difusa una vez que traes varias revisiones. –

+0

¿Cuál es el objetivo de eso? –

+0

@Tomasz: es bastante útil buscar el historial de una línea en particular, especialmente cuando se busca ver cuánto tiempo ha existido un error en la base del código o quién ha tocado una función en particular. – Christopher

Respuesta

3

Desea combinar las banderas -S y --pretty en git log.

Desde la página git log hombre, la búsqueda -S pico:

-S<string> 
     Look for differences that introduce or remove an instance of <string>. Note that this is different than the string simply appearing in diff output; 
     see the pickaxe entry in gitdiffcore(7) for more details. 

Este indicador busca todos los cambios en una cadena concreta. Using an example from another SO answer,git log -g -Ssearch_for_this buscaría en el historial todos los cambios a "search_for_this".

Combínalo con --pretty para obtener mejores resultados. Por ejemplo, este comando sería buscar a través de la historia de cambios a 'foo' y restablecer el hash acortada, seguido por el autor, dos guiones, la primera línea del mensaje, dos guiones y la fecha:

$ git log -Sfoo --pretty=format:'%h %an -- %s -- %ad' 
bc34134 Sally Developer -- Fixed all bugs and made all clients happy forever -- Tue Jan 31 17:41:17 2025 -0500 
+0

¿Quiere decir poniendo el contenido de la línea después de la opción -S? Esto puede ayudarme a descubrir el compromiso cambiando la cadena, pero aún necesito averiguar la forma anterior de la línea y seguir usando el método hasta que no haya una versión anterior de la línea. – user1440858

+0

Hmmm. Sí. Esta solución solo lo llevará al punto donde se introdujo . Si desea rastrear ese cambio, no funcionará. ¿Tal vez esto? https://github.com/renard/git-line-history Encontrado a través de google. No tengo idea de si funciona, pero aprovecha "git blame". – Christopher

Cuestiones relacionadas