Clona un repository git-svn obteniendo toda la parte svn del repository svn original

¿Cómo puedo clonar un git repo desde mi computadora portátil (en casa) a un server (en la universidad) mientras obtengo la mayor parte del repository de un tercer repository (svn) en otra unidad que es la base de código principal? Me gustaría minimizar la cantidad de tráfico doméstico <-> uni maximizando el tráfico uniOne <-> uniTwo.

esto es lo que tengo ahora en la computadora portátil:

--o--o--o---o---o---o git-svn trunk `--o--oo--o git mybranch 

esto es lo que me gustaría get en uniOne:

 --o--o--o---o---o---o git-svn trunk <-- from uniTwo `--o--oo--o git mybranch <-- from Laptop 

Después de la clonación, el repository debería ser capaz de extraer twigs de la computadora portátil.

Lo he intentado: en uniOne: git-svn clone uniTwo, git remote agrega Laptop, pero luego git fetch quiere get todo desde Laptop. Pensé que quizás usar git clone –depth x Laptop y luego injertarlos juntos podría funcionar, pero aún así requiere que se transfieran todos los files de origen Laptop-> uniOne, no solo los cambios. Podría tratar de exportar todos los parches de Laptop y aplicarlos sobre un checkout de svn nuevo y luego hacer que rastree la twig de mi Laptop (si es posible), pero sería más fácil esperar hasta llegar a la unidad y luego solo clona normalmente.

Vamos a definir tus repositorys:

  • git-svn <- este es el repository de Subversion en la Universidad
  • uni / master <- este es un repository de Git en su Universidad. Este es un "repository de búsqueda" que obtiene la última historia del repository de Subversion.
  • laptop / master <- Este es el repository de Git en su computadora portátil. Aquí es donde trabajas.

Sugeriría la siguiente configuration:

Crea uni / master haciendo git svn clone de git-svn . git svn rebase automáticamente uni / master con los últimos cambios de git-svn ejecutando git svn rebase (trigger con commit hook, cron-job o manualmente cada vez que esté en Uni).

Cree una laptop / master clonando uni / master . Aquí puedes comprometerte localmente cuantas veces quieras. Cuando estás en la Universidad, obtén los últimos cambios de uni / master ejecutando git pull --rebase (siempre tienes que hacer –rebase para mantener el historial lineal, porque SVN no entenderá git-branches).

Cuando desee volver a enviar los cambios de su computadora portátil a git-svn , primero debe configurar el git-svn remote en su computadora portátil / principal :

 git svn init https://url.to.uni-svn-repo 

Ahora puede enviar sus últimos cambios a uni-svn con git svn dcommit . Tenga en count que es posible que deba actualizar primero la reference a la última confirmación en uni / master . primero:

 git update-ref refs/remotes/git-svn refs/remotes/uni/master 

NO intente empujar desde su laptop / master a uni / master . Esto solo traerá caos ya que la historia de reescritura / reescritura solo confundirá a Git cuando intente sincronizar nuevamente con git-svn .

Ver también http://www.tfnico.com/presentations/git-and-subversion donde comencé a recostackr un montón de consejos para trabajar con Git y SVN juntos.