8 puntos por GN⁺ 2025-03-20 | 1 comentarios | Compartir por WhatsApp
  • git-who es una herramienta CLI para encontrar a las personas responsables de componentes completos o subsistemas de una base de código
  • A diferencia de git blame, git-who funciona a nivel de árbol de archivos para identificar a quienes escribieron el código
  • Ofrece tres subcomandos, y cada uno brinda una perspectiva distinta sobre la autoría en un repositorio Git
    • table

      • Es el valor predeterminado y muestra una tabla que resume las contribuciones de todas las personas autoras que hicieron commits en el repositorio
      • Se puede especificar una ruta para filtrar solo los commits de archivos dentro de esa ruta
      • Se puede especificar un nombre de rama, nombre de tag o un “commit-ish” para filtrar solo los commits alcanzables desde un commit específico
      • Se pueden usar los flags -m, -c, -l, -f para ordenar la tabla según distintas métricas
    • tree

      • Muestra el árbol de archivos, y cada nodo indica la persona autora que más contribuyó en esa ruta
      • Se puede usar el flag -a para anotar todos los archivos
      • Soporta los flags -l, -f, -m, -c
    • hist

      • Muestra un histograma/línea de tiempo de la actividad de commits para enseñar el historial de contribuciones al repositorio
      • Soporta los flags -l y -f.
  • Opciones adicionales para filtrar commits
    • Se pueden usar las opciones --author y --nauthor para indicar qué personas autoras incluir o excluir
    • Se pueden usar las opciones --since y --until para filtrar commits anteriores o posteriores a una fecha específica
  • Caché: guarda datos por repositorio en XDG_CACHE_HOME. Para desactivar la caché, configura GIT_WHO_DISABLE_CACHE=1
  • Si instalas el binario git-who en tu PATH, puedes ejecutar git who sin configuración adicional. Si lo instalas con otro nombre o quieres configurarlo explícitamente, puedes agregar un alias en la configuración de Git
  • Si existe un archivo .mailmap en el repositorio Git, git who lo respeta para contabilizar juntos los commits de una misma persona
  • Métricas

    • Cantidad de commits: indica cuántos commits modificaron la ruta
    • Cantidad de archivos: indica cuántos archivos únicos modificó la persona autora
    • Líneas agregadas y líneas eliminadas: indican cuántas líneas se agregaron o eliminaron en la ruta
  • Diferencias con git blame

    • Mientras que git blame identifica el commit que introdujo cada línea basándose en el código del árbol de trabajo,
    • git who recorre parte del historial de commits para agregar las contribuciones
    • Ambas herramientas operan en niveles distintos y ofrecen información diferente

1 comentarios

 
GN⁺ 2025-03-20
Opiniones de Hacker News
  • En relación con el análisis de "quién escribió vim", según el flujo de trabajo puede parecer que los contribuidores internos aportaron más

    • Si un parche o pull request es reformateado por un contribuidor interno antes de fusionarse, el mismo trabajo puede contarse dos veces o la contribución puede atribuirse solo a quien hizo el reformateo
    • El resultado no es incorrecto, pero hay que tener cuidado al sacar conclusiones del resultado sin revisar el proceso de contribución
  • Esta herramienta está realmente genial. La probé un rato antes de terminar el día

    • Mi lista personal de deseos es la siguiente
      • Estadísticas basadas en blame. Está bien ver las contribuciones de Bob y Alice, pero sería más útil mostrar quién es el verdadero propietario de un módulo/archivo
      • Soporte de inclusión/exclusión basado en patrones. Por ejemplo, no quisiera ver estadísticas de archivos json usados para pruebas o de archivos generados automáticamente
      • Soporte para archivos de configuración. Estaría bien tener un archivo basado en TOML donde se puedan guardar las preferencias en el repositorio git
      • Mejor empaquetado. Por ejemplo, el tarball de Linux de v0.6 incluye "basura" relacionada con Apple y gnu tar muestra una advertencia por incompatibilidad en el formato del archivo
  • Mucha gente malinterpreta git blame. No se trata de quién lo hizo, sino de qué commit fue la causa

  • Se puede invocar git-who como git who. Solo hay que configurar un alias en la configuración global de Git

    • También funciona sin alias. Por defecto, git whatever busca git-whatever en el path y lo ejecuta
  • En la versión de bajos recursos uso el alias "nerdwars" para ejecutar "git shortlog -ns --no-merges". Es una buena forma de identificar a los principales contribuidores de un proyecto

  • Gitlab/Github deberían agregar una función que envíe automáticamente un correo al último autor de las líneas de código modificadas cuando se envía una solicitud de fusión

  • Esta herramienta es excelente. Uso contabilidad basada en git-blame para rastrear cuánto código fue escrito por IA y cuánto por humanos en cada release de la app

    • El "script de blame" se está volviendo lento a medida que crece el tamaño del repositorio. Intenté agregar caché
    • Me pregunto si hay planes de agregar una función para limitar las estadísticas según patrones de archivos
  • tig es un gran frontend TUI para git y tiene un hermoso subcomando tig blame

  • Lo que falta en git no es la cantidad de líneas o commits escritos por un desarrollador. Más bien es lo siguiente

    • Quién eliminó esta línea
    • Quién es el dueño de este método
  • Algunas personas hacen commits usando dos correos distintos. Por ejemplo, usan un correo en la computadora de casa y otro en la del trabajo. Estaría bien poder definir que ambos son la misma persona