2010-05-08 18 views
12

¿Cómo rastreo los cambios de SVN en sentido ascendente usando git-svn y github?Seguimiento de svn upstream cambios con git-svn y github?

que utiliza git-svn para convertir un repositorio SVN a Git en GitHub:

$ git svn clone -s http://svn.osqa.net/svnroot/osqa/ osqa 
$ cd osqa 
$ git remote add origin [email protected]:turian/osqa.git 
$ git push origin master 

luego hice algunos cambios en mi repositorio git, comprometido, y empujó a GitHub.

Ahora, estoy en una máquina nueva. Quiero tomar los cambios de SVN en la cadena ascendente, fusionarlos con mi repositorio github, y enviarlos a mi repositorio github. This documentation dice: "Si alguna vez pierde su copia local, simplemente vuelva a ejecutar la importación con la misma configuración, y obtendrá otro directorio de trabajo con toda la metainformación SVN necesaria".

Así que hice lo siguiente. Pero ninguno de los comandos funciona como se desea. ¿Cómo rastreo los cambios de SVN en sentido ascendente usando git-svn y github? ¿Qué estoy haciendo mal?

$ git svn clone -s http://svn.osqa.net/svnroot/osqa/ osqa 
$ cd osqa 
$ git remote add origin [email protected]:turian/osqa.git 
$ git push origin master 
To [email protected]:turian/osqa.git 
! [rejected]  master -> master (non-fast forward) 
error: failed to push some refs to '[email protected]:turian/osqa.git' 
$ git pull 
remote: Counting objects: 21, done. 
remote: Compressing objects: 100% (17/17), done. 
remote: Total 17 (delta 7), reused 9 (delta 0) 
Unpacking objects: 100% (17/17), done. 
From [email protected]:turian/osqa 
* [new branch]  master  -> origin/master 
From [email protected]:turian/osqa 
* [new tag]   master  -> master 
You asked me to pull without telling me which branch you 
want to merge with, and 'branch.master.merge' in 
your configuration file does not tell me either. Please 
name which branch you want to merge on the command line and 
try again (e.g. 'git pull <repository> <refspec>'). 
See git-pull(1) for details on the refspec. 
... 
$ /usr//lib/git-core/git-svn rebase 
warning: refname 'master' is ambiguous. 
First, rewinding head to replay your work on top of it... 
Applying: Added forum/management/commands/dumpsettings.py 
error: Ref refs/heads/master is at 6acd747f95aef6d9bce37f86798a32c14e04b82e but expected a7109d94d813b20c230a029ecd67801e6067a452 
fatal: Cannot lock the ref 'refs/heads/master'. 
Could not move back to refs/heads/master 
rebase refs/remotes/trunk: command returned error: 1 

Respuesta

5

Parece que, con la excepción de su rebase, todo sucedió como se esperaba, pero con mucha más verborrea de lo que cabría esperar. Esto es lo que creo que haría para crear/integrar los bits en una máquina nueva:

  1. Clonar su repositorio Svn. Idealmente, me gustaría comenzar con el git repo porque es tuyo y se encuentra en un estado conocido, pero no sé de ninguna manera que inicialmente extraiga contenido de Svn que para clonarlo. Me gusta agregar un --prefix=svn/ al clonar para que todas mis ramas remotas de Svn estén anotadas como tales.
  2. Agregue su origen (al igual que lo ha hecho).
  3. Crea una sucursal local para trabajar. git co -b local-branch svn/branchname. Ahora tienes un área local agradable para jugar con cosas.
  4. Asegúrese de estar en la sucursal local que acaba de crear (debe ser).
  5. Tire de Github. Has hecho esto correctamente, pero ambiguamente. Para aclarar la ambigüedad, sea explícito: git pull origin master (extracción desde el origen a la rama principal).
  6. Rebase from Svn para sincronizar todo. git svn rebase.

No he probado esto, pero es un flujo de trabajo bastante típico y los errores que está obteniendo no parecen estar relacionados con su servicio de dos controles remotos (Svn y Github). Parecen ser un poco más genéricos y están relacionados con su flujo de trabajo y la forma en que llama a los comandos.

Cuestiones relacionadas