2010-06-19 20 views
20

He bifurcado el repositorio git de un proyecto en Github e hice mis propios cambios. Quería obtener un diff entre mi repositorio y el repositorio original que he bifurcado. ¿Puede alguien decirme el comando git para obtener esa diferencia? Necesito presentar la diferencia para su revisión.Encontrar diferencias entre dos repositorios git

repositorio original:

git://github.com/apache/hive.git 

Mi repositorio:

[email protected]:prafullat/hive.git 

Aquí están los detalles de mi .git/config

[remote "origin"] 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    url = [email protected]:prafullat/hive.git 
[remote "mirror"] 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    url = git://github.com/apache/hive.git 

he intentado mirar a otro publicado preguntas sobre el mismo tema y no pudo hacerlo funcionar.

Cualquier ayuda sería muy apreciada.

+0

posible duplicado de [¿Cómo comparo dos repositorios Git?] (Http://stackoverflow.com/questions/687450/how-do-i-compare- dos-git-repositories) –

+0

Posible duplicado de [Obteniendo la diferencia entre dos repositorios] (http://stackoverflow.com/questions/1968512/getting-the-difference-between-thwo-repositories) – Rumid

Respuesta

3

Obteniendo commit sha1 manualmente y usándolos en diff Resolvió el problema!

 
[[email protected] .git] $cd refs/remotes/ 
[[email protected] remotes] $cat origin/trunk 
1c4fa827f4fad2aad67a4fa5b57d88afe51d1559 
[[email protected] remotes] $cat mirror/trunk 
14f5fb7cba7bef466727a5b721c7c202e80e5dfd 
[[email protected] remotes] $git diff 14f5fb7cba7bef466727a5b721c7c202e80e5dfd 1c4fa827f4fad2aad67a4fa5b57d88afe51d1559 
....... 
.... diff follows!....... 

2
git diff origin/master mirror/master 

Algo así debería hacer el truco.

+8

Da este error. git diff remotes/control remoto de origen/mirror fatal: argumento ambiguo 'remotes/origin': revisión desconocida o ruta no en el árbol de trabajo. Use '-' para separar las rutas de las revisiones – Prafulla

15

Necesita buscar lo último de ambos repositorios remotos y comparar las ramas principales entre sí. Parece que la rama principal es la rama 'tronco', para que pueda ver lo que compromete son exclusivas de su proyecto (y no en la rama del tronco del proyecto 'espejo') de esta manera:

$ git log --oneline origin/trunk ^mirror/trunk 
1c4fa82 1. Modified the flag name for gb_to_idx rewrite to hive.ql.rewrite.gb_to_idx So 
638be54 Merge branch 'trunk' of [email protected]:prafullat/hive into trunk 
72c8220 HIVE-1383. Allow HBase WAL to be disabled (John Sichi via Ning Zhang) 
a372259 Checking in commented meta-data methods in GbToCompactSumIdxRewrite. It has to be unc 
33c1fb1 Fixing some files due to wrong application of patch. Build now compiles ! 
5942728 Reverting files which were patched twice in last checkin. 
5efda04 Adding inital rewrite changes. This patch adds basic query rewrite support to Hive. I 
3fce190 Merge branch 'trunk' of git://github.com/apache/hive into trunk 
b3f9ff2 Checking in commented meta-data methods in GbToCompactSumIdxRewrite. It has to be unc 
d89deb9 Fixing some files due to wrong application of patch. Build now compiles ! 
11db7da Reverting files which were patched twice in last checkin. 
88fee30 Adding inital rewrite changes. 
ba7703f Some part of last check-in got missed. 
2c5c5ae Checking initial changes for Hive indexing from He Yongqiang (Hive-417) Here is descr 

O puede eliminar el --oneline para ver los mensajes de confirmación completos. Parece que son todos tuyos. También puede agregar un --no-merges si no desea ver esas confusiones de fusión.

A continuación, se puede obtener el diff real mediante la ejecución de esto:

$ git diff --stat mirror/trunk...origin/trunk 
README.txt           | 4 +- 
build.xml           | 1 + 
.../java/org/apache/hadoop/hive/conf/HiveConf.java | 1 + 
ivy/ivysettings.xml        | 4 +- 
metastore/if/hive_metastore.thrift     | 12 +- 
.../apache/hadoop/hive/metastore/api/Index.java | 15 +- 
.../hive/metastore/api/ThriftHiveMetastore.java | 671 +++++++++++++++++++- 
metastore/src/gen-php/hive_metastore_types.php  | 30 +- 
.../hadoop/hive/metastore/HiveMetaStore.java  | 155 ++++- 
.../hadoop/hive/metastore/HiveMetaStoreClient.java | 9 +- 
.../hadoop/hive/metastore/IMetaStoreClient.java | 14 + 
.../hadoop/hive/metastore/MetaStoreUtils.java  | 31 + 
(bunch more lines) 
ql/src/test/queries/clientpositive/index_compact.q | 13 + 
.../test/queries/clientpositive/index_projection.q | 13 + 
ql/src/test/queries/clientpositive/index_summary.q | 13 + 
.../queries/clientpositive/ql_rewrite_gbtoidx.q | 9 + 
.../results/clientpositive/index_compact.q.out  | 70 ++ 
.../clientpositive/ql_rewrite_gbtoidx.q.out  | 211 ++++++ 
.../primitive/PrimitiveObjectInspectorUtils.java | 29 +- 
57 files changed, 4000 insertions(+), 131 deletions(-) 

Si se quita la --stat, obtendrá el diff real. El ... entre mirror/trunk y origin/trunk es una abreviatura que dice que quieres la diferencia entre el ancestro común, por lo que no te da una diferencia eliminando todo lo agregado al proyecto original desde que comenzaste, solo te da los cambios que has hecho en su rama.

+0

Explicación bien detallada. +1. En la sintaxis '' ... '', consulte http://stackoverflow.com/questions/2539040/not-able-to-think-of-a-case-where-git-diff-master-lab-and- git-diff-master-lab y http://stackoverflow.com/questions/53569/how-to-get-the-changes-on-a-branch-in-git/53573#53573, y la respuesta muy completa: http://stackoverflow.com/questions/850607/difference-in-git-log-origin-master-vs-git-log-origin-master – VonC

+0

Sigo recibiendo el siguiente error. ¿Cómo lo arreglo? [prafulla @ prafulla-laptop colmena] $ git log --oneline origen/trunk^mirror/trunk advertencia: el nombre de la referencia 'origin/trunk' es ambiguo. advertencia: el refombre 'espejo/tronco' es ambiguo. – Prafulla

+0

Parece que puede haber creado accidentalmente una rama de seguimiento local llamada 'origen/troncal', que es común, y desafortunado que incluso te permita hacerlo. Puede solucionarlo ejecutando 'git log refs/remotes/origin/trunk^mirror/trunk' en su lugar, eso lo hará no ambiguo. Te diría que elimines tu referencia local ('refs/heads/origin/trunk'), pero es posible que tengas que trabajar en ella, debería ver todas tus referencias. Puede ejecutar 'git for-each-ref' y pegar el resultado aquí y le puedo decir si puede eliminarlo de manera segura. –

0

Una desventaja de los enfoques anteriores es que difieren un par específico de ramas . Si usted quiere encontrar todos las confirmaciones cuando tu repositorio local, se diferencia de la distancia - en todas las ramas que pueda haber creado, incluso si algunos no se fusionan de nuevo en amo con todo - usted puede hacer lo siguiente:

git log --branches --not --remotes 
+0

Esto es útil. ¿Cómo lo invierte para que le muestre todas las ramas no fusionadas en el control remoto que difieren de su repositorio local? – meowsqueak

5

Hay un error en esto, en caso de que alguien se encuentre con esta pregunta de nuevo.

[remote "origin"] 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    url = [email protected]:prafullat/hive.git 
[remote "mirror"] 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    url = git://github.com/apache/hive.git 

Cada vez que hacemos un git fetch en el espejo sobrescribe la misma rama remota en sus .git/refs/mandos a distancia.Debe asegurarse de cambiar la búsqueda de réplica remota para reflejar el nuevo nombre.

[remote "origin"] 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    url = giturl 
[remote "mirror"] 
    fetch = +refs/heads/*:refs/remotes/mirror/* 
    url = giturl 

A continuación, un simple

git diff origin/master..mirror/master 
Cuestiones relacionadas