2012-04-12 10 views
7

[Actualización]¿Cómo lidiar con Git-SVN cuando tenga que usar tanto Git y Subversion

Para más detalles, La razón de que eso que trato de hacer Git pura en casa es que, mi empresa desea para pasar a Git, pero al administrador no le gustaría hacer cambios porque el desarrollador no tiene conocimiento con Git en nuestro propio repositorio. Entonces, lo que intento hacer es intentar que todos utilicen Pure git mientras alguien puede fusionarse con Subversion durante esta fase de aprendizaje. Entonces, en cualquier caso de emergencia, todavía pueden usar Subversion.

Entonces, antes de familiarizarme con Git, no puedo transferir repositorio para usar Git puro. Por lo tanto, tendrá ambas actualizaciones en Subversion y Git. (y el repositorio principal en este momento es Subversion). Por lo tanto, trato de hacer que Git pueda funcionar sin problemas durante el repositorio de sincronización devolviendo a Subversion.

[Pregunta]

estoy en la organización que utiliza Subversion como repositorio, por lo que lo descarga como mi Git personal (y el plan para usar reemplazar la subversión con Git en el futuro)

Ahora Tengo un repositorio que usa Git y Subversion (fuente principal). Tengo un problema para tratar con git svn rebase cuando tengo que usar tanto git como subversion.

Mi flujo de trabajo es, como a continuación

En La Oficina

  1. El Repositorio han interfaz de Git SVN-
  2. Siempre cometo el código de Subversion con git svn dcommit de aquí .
  3. empujo a mi repositorio git a distancia hacia Bitbucket

en casa

  1. que clonar el repositorio desde Bitbucket
  2. Trabajar con y comprometerse a Bitbucket

Ahora, de vuelta a la oficina

  1. git pull
  2. git svn rebase
  3. git svn dcommit
  4. git push

En el paso 4.Tengo un problema que ya rebasan mi sucursal

problema ahora es, cuando estoy en casa

Cuando vuelva a casa, no se puede utilizar 'git fetch', porque la rama ya se reajusta. Por lo tanto, tengo que eliminar la rama con git branch -D ..... y luego git checkout nuevamente.

Por lo tanto, busco la manera de que podamos uso simultáneo tanto repositorio Git y Subversion y hacerlo pasar bien con Git operación después de hacerse con svn git rebase o git svn dcommit.

Nota. No voy a preferir usar git-svn en casa. Intenta avanzar para usar solo Git.

Respuesta

0

Encontrado la solución de Version Control with Git libro. Página 295.

lugar de uso local - rama principal, tienen a la caja de la rama remota

git checkout remote/master (Detach HEAD) 
git merge --no-ff master (merge the local master) 
git svn dcommit 
git push origin (update to git Repository) 

Este modelo es para una persona que va a fusionar de nuevo a depósito de la subversión, mientras que el otro trabajo sobre Git puro o pura subversión . De esta forma, los usuarios de The Git pueden usar Git sin problemas de fusión.

0

No mencionaste por qué estás manteniendo svn después de todo. Pero mi recomendación es comenzar con un repositorio limpio de git, de una vez por todas. Y evite problemas innecesarios.

Creo que es Casey quien hizo la mejor respuesta sobre la migración a git: How to migrate SVN repository with history to a new Git repository?

Por supuesto que tiene que hacer una copia de seguridad y luego iniciar el proceso.

Otra idea es que si el problema es la rebase, ¿por qué no utilizar una actualización de svn pura y luego confirmar los cambios en Git (solo commit de git), como si lo hubiera escrito usted mismo?

+0

MacroA, si es mi propio repositorio, todo es fácil de administrar. pero cuando trabajas en compañía del gran equipo de desarrolladores. Lo que necesitas es difícil de hacer. Todavía hay muchos que dependen de ellos, tal sistema de despliegue. algo no puede ser interrumpido, excepto que todo está listo para migrar. – scalopus

2

De acuerdo, su principal problema aquí parece ser que no se puede realmente hacer un git pull desde su casa tiene el historial ha sido reescrito (en realidad debería funcionar, pero trataría de hacer una fusión innecesaria).

La forma más fácil de superar ese problema sería usando git pull --rebase. De esta forma, en lugar de combinar las confirmaciones que ha realizado en su hogar con la punta de su sucursal remota, rebase todas las confirmaciones realizadas desde la creación de su sucursal en la punta de la sucursal. Git será lo suficientemente inteligente como para ver que algunas confirmaciones son exactamente las mismas y se eliminarán automáticamente durante la rebase.

+0

Me interesa el comando git pull --rebase. ¿Eso sigue funcionando en caso de que ya haya hecho el git svn dcommit? porque el sha1 cambió después de eso. – scalopus

+0

Cuando haces un 'pull --rebase', intentará volver a establecer tus commits en la punta actual de tu remote branch. Entonces sí, funcionará. –

0

En realidad debería poder git fetch pero en lugar de fusionarse con git merge origin/branch puede usar git rebase origin/branch. Eso debería solucionar su problema

Si no sirve, pruebe git fetch y luego el último comando forzaría la sobreescritura en la rama local de la rama remota.

1

Supongo que la causa principal de su problema es que git svn dcommit cambia el mensaje de confirmación para incluir los datos de confirmación de SVN. Como el mensaje está incluido en el SHA1 de una confirmación, este cambio aparece como una confirmación totalmente diferente.

Mi solución para eso sería tener una sucursal en su repositorio de oficina que sincronice con SVN y otra rama (puramente git) para hacer su trabajo. Siempre que quiera intercambiar algo con el repositorio SVN, realice una fusión en una u otra dirección.

En mi caso, he configurado otro repositorio git dedicado exclusivamente para el intercambio de SVN. Tengo un trabajo cron que sincroniza ese repositorio cada 15 minutos con el servidor SVN. De esta manera no echo de menos un git svn rebase.

Cuestiones relacionadas