2011-09-27 11 views
7

He buscado y no he encontrado una respuesta a esta pregunta.Git - compare local y remoto sin ir a buscar primero?

Tengo una aplicación ejecutándose en Heroku. Desde mi máquina local Me suelen implementar y justo:

git add . 
git commit -m "whatever change, I know I can add and commit at the same time..." 
git push <the-heroku-repo> 

Luego se sube y la rama principal en la aplicación Heroku se actualiza. Hasta aquí todo bien.

Ahora. Quiero tener otra máquina que saque automáticamente del repo de Heroku y se actualice solo.

así hago eso con:

git clone <the-heroku-repo> 

que me pone la aplicación y puedo ver la configuración de Git con esto:

core.repositoryformatversion=0 
core.filemode=true 
core.bare=false 
core.logallrefupdates=true 
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* 
[email protected]:theapp.git 
branch.master.remote=origin 
branch.master.merge=refs/heads/master 

para actualizar esta nueva operación que pueda hacer sólo un tirón :

git pull origin 

O podría ir a buscar y combinar:

git fetch origin 
git merge origin/master 

MI PREGUNTA

Entre los anteriores traer y fusionar puedo comprobar cuáles son los cambios haciendo:

git log -p master..origin/master 

¿Hay una manera de encontrar las diferencias entre la rama maestro local y la última versión en el repositorio de Heroku remoto sin ir a buscar antes? Simplemente compare el local y el remoto y vea los cambios. Simplemente no puedo encontrar el camino correcto.

Gracias.

+0

sin ir a buscar nada, no sabrá nada de actualización desde el repositorio remoto –

+0

Me interesa saber cuál es el problema con hacer 'git fetch origin' antes del' git log''. –

+0

Tal vez el problema sea yo, basado en la definición del comando fetch: "git fetch descarga nuevas ramas y datos desde un repositorio remoto". Imagine que, basándose en algún resultado de la comparación, decidiría que no quiero buscar y fusionar esos cambios. ¿Por qué debería usar ancho de banda y contaminar el repositorio con algo que no es necesario? Nuevamente, tal vez el problema es yo. Solo estoy intentando guardar una llamada o recursos si es posible conociendo previamente los cambios existentes. – Pod

Respuesta

14

Aunque se puede obtener alguna información resumida acerca de las sucursales en el repositorio origin usando:

git remote show origin 

... sí es necesario para traer las ramas de origin en su repositorio de alguna manera con el fin de compararlos. Esto es lo que hace git fetch. Cuando ejecuta git fetch origin, de forma predeterminada solo actualiza las denominadas "ramas de seguimiento remoto" como origin/master. Estos solo almacenan donde estaba la rama correspondiente en origin la última vez que buscó. Todas sus sucursales locales en las que ha estado trabajando no se ven afectadas por el git fetch. Por lo tanto, es seguro hacerlo:

git fetch origin 
git log -p master..origin/master 

... y luego, si usted es feliz con eso, se puede fusionar o de rebase en origin/master.


les animo a no preocuparse por los recursos (ya sea de espacio en disco o ancho de banda) que participan en el comando git fetch origin. git envía de manera eficiente solo los objetos que son necesarios para completar las ramas de seguimiento remoto que se están actualizando, y a menos que tenga archivos inusualmente grandes almacenados con su código fuente, esto no debería marcar una gran diferencia.Además, con frecuencia es útil tener el historial completo de las sucursales del otro repositorio disponible, incluso si no tiene previsto utilizarlas, por ejemplo, para que pueda examinar ese historial de desarrollo.

+0

Gracias por esos rápidos comentarios y respuestas. Así que fui yo :-) – Pod

+2

Estaba usando PULL que me estaba sirviendo bien, pero luego leí mil millones de veces para preferir buscar/fusionar sobre él, así que comencé a usarlo. Funciona bien, pero me tomó un tiempo darme cuenta de que la búsqueda de GIT recupera todas las ramas remotas en un "espacio temporal" y usted es el primero en decir su nombre "ramas de seguimiento remoto". Realmente no podía entender a dónde iban los datos obtenidos porque no es hasta la fusión que está dentro de su repositorio. Gracias – luigi7up

Cuestiones relacionadas