Estoy usando git-svn. ¿Cómo puedo obtener una lista de lo que he comprometido en git, pero aún no me he comprometido con el repositorio SVN desde el último git svn dcommit
? Es decir, ¿cómo puedo verificar lo que se va a enviar si realizo un compromiso?¿Cómo ver qué se ha registrado en git, pero no se ha confirmado en svn mediante dcommit?
Respuesta
La opción --dry-run
para git svn dcommit
es muy útil para encontrar exactamente lo que será comprometido con Subversion. En particular, que tiene las propiedades que:
- En realidad, no se comprometen a nada Subversion
- Se le indica qué diffs se calcularán para crear nuevas revisiones en Subversion
- Se le dice que se ramifican en Subversion estará cometiendo a - a veces esto no es obvia, ya que se toma de la rama de Subversion se especifica en el primer antepasado de comprometerse con un git svn-id en su mensaje de confirmación
en general es una buena idea hacer git svn rebase
antes incluso pensando en usar dcommit
, para que su historial esté linealizado; de lo contrario, las asignaciones de fusión pueden no tener mucho sentido en el historial de Subversion. (Si usted ha hecho eso, entonces git log
y gitk --all
también será esencialmente equivalente, pero creo que git svn dcommit --dry-run
le da una imagen más precisa de lo que está a punto de suceder, incluso si es más difícil de interpretar.)
La manera más fácil que creo es hacer esto usando gitk. Querrá la opción --all para ver todas las ramas. Si no ha usado antes simplemente escriba:
gitk --all
verá una vista gráfica de los ramas. Cuando actualiza desde SVN, básicamente hace una rebase (git svn rebase). Esto significa que cualquier confirmación local que no esté registrada en SVN aparecerá en la rama después de la última confirmación de SVN. Básicamente, observe las confirmaciones entre su troncal SVN remota y su rama principal.
utilizo git log --oneline --graph
:
* aaaaaaa commit message
* bbbbbbb commit message
|\
| * ccccccc commit message
| * ddddddd commit message
| * eeeeeee commit message
|/
* fffffff commit message
|\
...
Es fácil ver que comete aaaaaaa
, bbbbbbb
y fffffff
están en la rama actual (maestro). Estas confirmaciones ya se han comprometido o se comprometerán con Subversion la próxima vez que ejecutes git svn dcommit
. (Se compromete ccccccc
, ddddddd
, eeeeeee
están en una rama separada, que se fusionó con maestría y no se compromete a la subversión como confirmaciones separadas.)
Para Sólo hay que ver la lista de confirmaciones, aquí está mi magia:
git svn dcommit -n | sed 1d | cut -d" " -f3 | xargs -I{} git log --oneline --no-walk {}
de salida:
c2e1eff changed a thing
a889dbf changed a second thing
18a4653 undid the second thing-- oops
- 1. Validador de identificación no se ha registrado
- 2. ¿Se requiere git svn rebase antes de git svn dcommit?
- 3. java.lang.IllegalStateException: no se encontró WebApplicationContext: no se ha registrado ContextLoaderListener?
- 4. No se encontró WebApplicationContext: no se ha registrado ContextLoaderListener?
- 5. ¿Es git svn dcommit atomic?
- 6. detectar si una clase OCX se ha registrado en Windows
- 7. Cómo reparar "archivo no encontrado" en git svn dcommit?
- 8. git svn dcommit sin rebasing
- 9. Comprobando si se ha registrado un tipo en Unity
- 10. Se está preparando una declaración, pero no se ha ejecutado
- 11. Git Error de SVN: un proceso de Git se ha bloqueado en el repositorio anteriormente
- 12. Comprobando si se ha registrado un nombre de dominio
- 13. Git-Svn dcommit provoca división de ramas
- 14. ¿Cómo puedo deshacer un git svn dcommit?
- 15. ¿Cómo ver los cambios 'git svn dcommit' antes de realizar la transacción?
- 16. Error: la transacción asociada con la conexión actual se ha completado pero no se ha eliminado
- 17. ¿En qué encabezado se ha declarado copy_from_user()?
- 18. no se ha podido importar con git-p4 en Windows
- 19. ¿Qué software se ha escrito en Scheme?
- 20. Comprobación de si un convertidor ya se ha registrado
- 21. TypeLoadException no se ha manejado en C#
- 22. Git - ¿Cómo ver si una rama se ha fusionado ALGUNA VEZ en otra rama?
- 23. No se ha mejorado, pero es superClass [clase play.db.ebean.Model] es?
- 24. ¿No se ha mantenido Java?
- 25. Deshacer una fusión de git (no se ha enviado aún)
- 26. git-svn rebase y dcommit problema
- 27. sqlite3: No se ha encontrado
- 28. onLocationChanged no se ha llamado
- 29. git rebase una rama que se ha colaborado en?
- 30. .svn la carpeta estaba en cada carpeta pero ahora se ha ido
vale la pena estar claro que los cambios introducidos en 'ccccccc',' 'ddddddd' y eeeeeee' va a terminar en la subversión, ya que la diferencia calculada para la fusión compromete 'ffff ffff' incluirá los cambios de nuevo a 'bbbbbbbb', suponiendo que el primer padre de' ffffffff' es 'bbbbbbbb', como sugieres diciendo que la rama se" fusionó con el maestro ". Sin embargo, esos cambios no aparecerán como revisiones por separado, por lo que los resultados pueden ser menos que ideales; lo más seguro es hacer 'git svn rebase' primero si quiere enviar dicho historial a Subversion. –
@Mark Longair: Mi intención era disipar cualquier temor de que 'ccccccc',' ddddddd' y 'eeeeeee' aparecieran en Subversion como confirmaciones separadas. En mi experiencia, esos commits a menudo constituyen una rama de características y no serían adecuados como commit de Subversion por separado. – titaniumdecoy