2010-01-27 11 views
5

Me gustaría usar Git para mi propio propósito y debo usar el repositorio de Subversion en mi compañía. Sé que hay un comando 'git svn' pero también requiere un historial lineal en el repositorio de git. El problema es que me gustaría: - sincronizar el repositorio git con otro repositorio my git en mi disco remoto para poder sincronizarlo con otro repositorio git en una computadora diferente, - y lo más importante: me gustaría cometer frecuentemente en mi repositorio git y cuando decida que vale la pena comprometerme con estos pequeños pasos (lo suficientemente grande como para compartirlos) me gustaría comprometerlos a svn pero con solo un compromiso ... Así que no me gustaría mostrar todo mi git (mayby ​​a veces estúpido, demasiado pequeño se compromete solo a recordar algo) en svn, - y con 'git svn' no puedo usar branches (porque cuando los fusiono con master, master no tendrá lineral history).Usar Git para mi y Subversion en la compañía

Por favor, ayuda ... Tal vez hay algún flujo de trabajo en el que puedo usar git en su gloria y svn para hacer más grandes (no mis cambios "privados" ... quizás muy pequeños y que por algún tiempo casue ese bacalao no compila) cambios en el repositorio de mi compañía.

¡Gracias de antemano!

Respuesta

8

Me gustaría sincronizar el repositorio de git con otro mi repositorio de git en mi disco remoto para poder sincronizarlo con otro repositorio de git en una computadora diferente.

Probar:

git remote add external-repo ssh://host/path/to/git/repo.git 
git push origin external-repo 

me gustaría comprometerse con frecuencia en mi repositorio git y cuando decido que este pequeños pasos valen para cometer (lo suficientemente grande como para compartir) Me gustaría comprometerse a svn pero con solo un commit

No sweat. Contraiga compromisos múltiples con git rebase -i (esto se denomina "aplastamiento") y decida si desea conservar, eliminar o aplastar cada compromiso en uno más grande. Es muy útil para organizarse antes de pasar a un repositorio externo. El -i es para el modo "interactivo".

con 'git svn' No puedo usar branches (porque cuando los fusiono con master, master no tendrá lineales).

Eso no es verdad. Simplemente configure una rama en git para cada rama que desee rastrear con svn. En la dirección opuesta, solo estás empujando una rama a la vez de todos modos.

2

Trabajo de esta manera todo el tiempo en mi empresa (realmente ya no soporto la subversión). ¿Qué te hace pensar que no puedes usar branches con git svn? No solo puedes usarlos, sino que puedes comprometerlos directamente con la subversión.

Para realizar la combinación de confirmaciones, usaría algo como git rebase remotes/trunk --interactive y squash commits together. Sin embargo, no puede mantener su versión expandida y sus versiones condensadas al mismo tiempo. O bien obtienes todos los compromisos pequeños o obtienes los aplastados.

+0

¿hay algún video que muestre este flujo de trabajo? esto suena como algo que me gustaría probar, Cheers – roundcrisis

+0

Gracias por la respuesta rápida. Pero, ¿qué sucede si me gustaría tener la historia detallada en mi cuenta en git y, en consecuencia, no sé qué comprimir confirmaciones? Sucursales ... ¿Puedo tener solo mis ramas (no compartidas en svn)? Como me preocupa, no puedo fusionar mi rama con master y luego hacer master git svn ... porque master no tendrá historial lineal. ¿Cuál es tu mejor práctica para trabajar personalmente con git y con svn en compañía? ¿Podrías mostrar tu flujo de trabajo con comandos de ejemplo? – miki

+0

@miki: Re Branches - sí, esos (no compartidos en svn) fueron de los que estaba hablando. Puede hacer tantas ramas como desee y fusionarlas de nuevo a maestro antes de volver a enviar svn. O puede comprometerse directamente desde esas ramas a svn. –

2

En lugar de rebase interactivo también puede usar git merge --squash en la rama "oficial".

git checkout master 
git merge --squash development 

Esto tiene la ventaja de que no destruirá su historial de desarrollo. Ahora puede crear una confirmación grande que contenga todos sus cambios, o puede restablecer el índice (usando git reset) y use git add -p o git gui para crear cualquier cantidad de confirmaciones separadas de su sucursal que luego normalmente se comprometería con master y git-svn dcommit cuando corresponda .

1

Lo que hago (y la manera más fácil de hacerlo) es no intentar administrar dos métodos de control de fuente a la vez. Yo uso git para mi propio control de versión personal. Algunas veces a la semana, cuando estoy listo para comprometerme con el repositorio central, reviso la rama principal en git y la envío a TFS. Los cambios del servidor se comprueban en mi rama dev y se fusionan en mi código.

No es elegante, de ninguna manera, pero como solo pago/check-in desde el repositorio central algunas veces a la semana, funciona perfectamente.

Cuestiones relacionadas