¿Cómo puedo generar una diferencia para un solo archivo entre dos ramas en github?


111

Necesito generar una diferencia para un solo archivo que muestre las diferencias entre dos versiones, que en realidad son etiquetas en github. Luego quiero enviar esta diferencia a alguien por correo electrónico, por lo que una URL de github para la diferencia sería ideal. La vista de comparación de github me permitirá hacer esto para todos los archivos modificados, pero eso no es bueno ya que hay miles de archivos en mi repositorio.

Puedo hacer esto en la línea de comando de la siguiente manera, pero esto no ayuda ya que necesito enviar la diferencia a alguien por correo electrónico:

git diff tag1 tag2 -- path/to/file

Encontré la versión de la línea de comandos que se analiza aquí: ¿cómo puedo ver las diferencias en un archivo designado entre una rama local y una rama remota?

Respuestas:


90

GitHub solo expone la forma de mostrar diferencias entre dos confirmaciones.

Siempre que esas etiquetas apunten realmente a confirmaciones, el formato de URL sería algo así como

https://github.com/{user}/{repository}/compare/{from-tag}...{until-tag}

Como ejemplo, https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5 muestra la diferencia entre dos versiones del proyecto LibGit2Sharp. Esta diferencia incluye todos los archivos modificados.

Si desea recuperar una URL dirigida a un archivo específico:

  • Cambiar a la pestaña Archivos modificados

pestaña cambiada

  • Haga clic en el botón Show Diff Stats (Esto mostrará la lista de archivos modificados como enlaces)

show-diff

  • Copie en el portapapeles el enlace del archivo específico que está buscando ... ¡y Tada! Ya terminaste.

Por ejemplo, dado el diferencial anterior, el enlace https://github.com/libgit2/libgit2sharp/compare/v0.9.0...v0.9.5#diff-11 señalará los LazyFixtures.cscambios que ocurrieron entre la versión v0.9.0 y v0.9.5.

Actualizar

Siguiendo su comentario que indica que su diferencia es demasiado grande para ser renderizada a través de la interfaz web, ¿qué tal si volvemos a las viejas herramientas de línea de comandos? Puede redirigir la salida del diff a un archivo y luego enviar el archivo como un adjunto de correo electrónico.

$ git diff v0.9.0 v0.9.5 -- LibGit2Sharp.Tests/LazyFixture.cs > /tmp/lazyfixture.diff

8
Hola, parece que esto no funcionará para mí porque mi diferencia es demasiado grande. Recibo "¡Esta diferencia es grande! Estamos mostrando información de estado solo para los primeros 2500 archivos". por lo que solo obtengo las estadísticas de diferencia y no las diferencias completas, incluso con los enlaces #diff.
plainflavour

1
sin embargo, creo que tienes razón, esa es la forma de hacerlo. Gracias
plainflavour

1
También puede usar esta extensión de Chrome github.com/danielribeiro/github-diff-highlight-extension para resaltar la sintaxis al comparar ramas.
Daniel Ribeiro

3
@plainflavour Un consejo más útil aquí en caso de que se encuentre con esto nuevamente: cada vez que tenga una URL de comparación como @nulltoken, también puede agregar un .diff al final de la URL para ver la diferencia completa (aunque como texto sin formato ). Por ejemplo, https://github.com/{user}/{repository}/compare/{from-tag}...{until-tag}.diff Fuente
dmccabe

1
No veo el botón Show Diff Stats . ¿Se ha ido? ¿O simplemente no lo estoy viendo?
dckc

7

Aquí está mi solución cuando se aplica el siguiente problema.

¡Esta comparación es grande! Solo mostramos las 250 confirmaciones más recientes

Copie la vista sin formato del archivo que desea comparar con https://gist.github.com/ . Utilice los dos puntos de compromiso específicos que desea comparar. Comience con la confirmación anterior.

https://gist.github.com/ tiene una bonita vista de diferencias lado a lado cuando hace clic en 'Revisiones'.


3
Gracias, esta fue exactamente la sugerencia que necesitaba para gist.github.com/ncoghlan/1067805fe673b3735ac854e195747493/… ! :)
ncoghlan

3

La respuesta es para las personas que solo desean ver (no descargar) el historial / revisión de cambios de código de un archivo en la página WEB de GITHUB para el registro anterior.

Vaya a ese archivo en el github, luego seleccione HISTORIA . Esto abrirá la página con el enlace de lista de comentarios de registro como se muestra a continuación.

ingrese la descripción de la imagen aquí Al hacer clic en él se mostrarán los cambios de código. Después de hacer clic en el historial; puede hacer clic en los paquetes para ver todos los registros de archivos a nivel de paquete.

En eclipse, puede comparar el historial utilizando el complemento EGit y "Haga clic con el botón derecho -> Comparar con" en el archivo. ¿Cómo puedo comparar dos revisiones en git en Eclipse?


1
Para ser más explícito, haz clic en el "nombre" de 7 dígitos hexadecimales de la confirmación (no hay etiqueta ni información sobre herramientas cuando pasas el cursor sobre ella, está cerca del lado derecho, justo al lado de la "copia en el portapapeles" icon), y eso lo llevará a una página que muestra una diferencia entre la versión de esa confirmación y lo que supongo que es la versión anterior.
JonathanZ apoya a MonicaC

@Jonathan Sí; eso es cierto
Kanagavelu Sugumar

Oye, no vi esa captura de pantalla la última vez que miré. No sé si no se estaba cargando para mí en ese momento o si lo ha agregado desde entonces, pero de cualquier manera, gracias por su respuesta; es genial.
JonathanZ apoya a MonicaC

Para una confirmación de 5000 archivos, esto no me lleva a la diferencia de archivo único. A partir de este historial , intente encontrar el delta a ese archivo de esta gran confirmación .
Carl Walsh

0

Solía respuesta de nulltoken para armar un simple script de conveniencia para tirar una diferenciación entre dos confirmaciones en GitHub desde la línea de comandos.

Puede encontrar el script completo en gist , pero aquí están las partes buenas:

# Parse the following patterns for repo urls to get the github repo url
# https://github.com/owner/repo-name.git
# git@github.com:owner/repo-name.git
BASE_URL="https://github.com/""$(git config --get remote.origin.url | sed 's/.*github\.com[/:]\(.*\).git/\1/')""/compare"

if [[ "$#" -eq 1 ]]; then
  if [[ "$1" =~ .*\.\..* ]]; then
    # Handle "git hubdiff fromcommit..tocommit"
    open "${BASE_URL}/$(git rev-parse "${1/\.\.*/}")...$(git rev-parse ${1/*\.\./})"
  else
    # Handle "git hubdiff fromcommit"
    open "${BASE_URL}/$(git rev-parse "$1")...$(git rev-parse HEAD)"
  fi
elif [[ "$#" -eq 2 ]]; then
  # Handle "git hubdiff fromcommit tocommit"
  open "${BASE_URL}/$(git rev-parse "$1")...$(git rev-parse "$2")"
fi

Acepta como argumentos ramas, confirmaciones y cualquier otra cosa que pueda resolverse mediante git rev-parse. Usé open, que solo funciona en macOS para abrir páginas web, por lo que si estás en un entorno diferente, querrás modificarlo.

Al igual que con la respuesta de nulltoken, para apuntar a un solo archivo en la diferencia, tendrá que hacer clic en el título del archivo para que aparezca la cadena de anclaje en la barra de URL, que luego puede copiar.


¿Alguna forma de obtener la cadena de anclaje para una comparación que no muestra el archivo deseado porque hay demasiados?
sgarg

@sgarg El ancla es "diff- <md5 del nombre de archivo>" - no documentado AFAIK - pero me molestó y lo adiviné.
Ben Walding

0

Dado que esto todavía no es posible, aquí hay un método de herramienta de diferenciación basado en navegador. No aprovecha la automatización, solo requiere la capacidad de instalar extensiones de Chrome:

  1. Instale Diff Tools para navegadores Chrome: https://chrome.google.com/webstore/detail/diff-tools-text-pdf-doc-o/lkcdojpmjehlniamnglpjlldkoonlomb
  2. Abrir herramientas de diferenciación ( http://iblogbox.com/devtools/diff/ )
  3. Desde GitHub, vaya a ANTES de confirmar, etiquetar o bifurcar, abrir el archivo, luego hacer clic en el Rawbotón para obtener la vista del archivo sin procesar, seleccionar todo y copiar, luego poner en el cuadro de texto del lado izquierdo en Herramientas de diferenciación
  4. Repita el paso 3 pero para el archivo AFTER y péguelo en el cuadro del lado derecho en Diff Tools
  5. Haga clic Compare Nowy realice su diff ad-hoc
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.