Estoy usando git-svnpara trabajar en contra del repositorio central de Subversion de mi compañía. Recientemente hemos creado una nueva rama de características en el repositorio central.
¿Cómo le digo a Git al respecto? Cuando corro git branch -rsolo puedo ver las ramas que existieron cuando corrí fetchcontra el repositorio de Subversion para inicializar mi repositorio de Git.

Respuestas:
Puede agregar manualmente la rama remota,
fuente
fatal: Cannot setup tracking information; starting point 'newbranch' is not a branch.en el paso de pago git.Si desea rastrear TODAS las ramas remotas de svn, entonces la solución es tan simple como:
Esto buscará TODAS las ramas remotas que aún no se han obtenido.
Consejo adicional: si primero desprotegió el tronco y luego desea rastrear TODAS las ramas, edite
.git/configpara que se vea así y vuelva a ejecutargit svn fetch:Los puntos clave
urldeben apuntar a la raíz del repositorio, y las rutas definidas enfetchybranchesdeben ser relativas aurl.Si desea buscar solo ramas específicas en lugar de TODAS, hay un buen ejemplo en
git svn --help:Con versiones anteriores de
git-svn, una vez que especificó ramas como esta, es posible que no pueda obtener nuevas ramasgit svn fetch. Una solución es agregar másfetchlíneas, como esta:Otra solución alternativa de @AndyEstes: edite
.git/svn/.metadatay cambie el valor debranches-maxRevotags-maxReva una revisión antes de crear cualquier rama o etiqueta recién especificada. Una vez que haya hecho esto, ejecutegit svn fetchpara rastrear la nueva rama remota svn.fuente
.git/svn/.metadatafue muy útil! Estaba agregando ramas adicionales en mi.git/config, quegit svn fetchno se repusieron, porque el número de revisión de metadatos estaba "demasiado lejos". En un caso, solo se obtuvo el último commit de una rama. Tengo manualmente deshacerse de la rama defectuosa (renombrado.git/svn/refs/remotes/svn/qa/XYZa.git/svn/refs/remotes/svn/qa/XYZ~, dejó caer su existencia en.git/packed-refs, etc) ... recogido un número de revisión "antes" de los metadatos ... RANgit svn fetchpara finalmente obtener un historial completo w / correcta gráfica, conectada.git svn fetch --all.Parece que solo necesitaba hacerlo
git svn fetch; De alguna manera, me había convencido de que obtendría todo el repositorio en lugar de solo los cambios.fuente
Tal vez lo arruiné de alguna manera, pero seguí las instrucciones en la respuesta de vjangus y casi funcionó. El único problema era que newbranch no parecía estar ramificado del tronco. En gitk, era una especie de "flotación" por sí solo; no tenía antepasado común con el tronco.
La solución a esto fue:
git diff-tree <sha1 from step 1> <sha1 from step 2>- No debe haber salida. Si hay salida, es posible que haya seleccionado las confirmaciones incorrectas.git checkout local-newbranchentoncesgit rebase <sha1 from step 1>. Esto se basarálocal-newbranchen el nuevo árbol peroremotes/newbranchaún se desconectará..git/refs/remotes/newbranchy edítelo para que contenga el SHA1 completo de la nueva confirmación (en el rebasenewbranch) que corresponde a la confirmación anterior a la que apunta actualmente. (O tal vez usargit-update-ref refs/remotes/newbranch <new-SHA>. Gracias inger.)git svn dcommitanewbranch, usted obtendrá un montón de mensajes acerca de que la actualización de algunos de registro. Esto es normal, creo.Recomiendo mantenerse
gitk --allabierto todo el tiempo y actualizarlo a menudo para realizar un seguimiento de lo que está haciendo. Todavía soy algo nuevo en git y git svn, así que sugiera mejoras a este método.fuente
Una simplificación de la respuesta de vjangus:
Si está utilizando el diseño estándar en SVN y ha hecho el inicio svn habitual, git-svn hará las cosas de configuración por usted. Sólo:
Un ejemplo. SVN url es
svn+ssh://[email protected]/repo. SVN sucursal que estoy buscando esnewbranch. La rama local de git (seguimiento remotonewbranch) serágit-newbranch.Paso 1: busque la revisión de copia de sucursal
Entonces el punto de ramificación en SVN es la revisión 7802.
Paso 2: recuperar la revisión
# git svn fetch -r 7802 Posible punto de ramificación encontrado: svn + ssh: //[email protected]/repo/trunk => svn + ssh: //[email protected]/repo/branches/newbranch, 7801 Rama principal encontrada: (referencias / controles remotos / troncal) 8dcf3c5793ff1a8a79dc94d268c91c2bf388894a Siguiente padre con do_switch Padres seguidos exitosamente r7802 = 9bbd4194041675ca5c9c6f3917e05ca5654a8a1e (refs / remotes / newbranch)git-svn hizo todo el trabajo y ahora sabe sobre el control remoto:
# git show-ref | grep newbranch 2df23af4733f36f5ad3c14cc1fa582ceeb3edb5c refs / remotes / newbranchPaso 3: cree su nueva sucursal local siguiendo la remota:
# git checkout -b git-newbranch -t newbranch Extraer archivos: 100% (413/413), hecho. Branch git-newbranch configurado para rastrear refs locales remotos / remotos / newbranch. Cambió a una nueva rama 'git-newbranch'fuente
show-refes invaluable)! Para cualquier persona atascada con referencias remotas erróneamente a las ramas, puede eliminarlas (tuve que hacerlogit branch -d newbranchy luego forzar la eliminación del directorio de referencia.git/svn/refs/remotes/newbranch) y luego comenzar de nuevo en el paso 2 (arriba).No he encontrado ninguna documentación sobre esta característica, pero parece que la configuración de git svn admite múltiples entradas de búsqueda. De esta manera, también puede agregar ramas por separado sin necesidad de agregar otra entrada de repositorio svn remota a su configuración ni usar comodines para obtener todas las ramas de cierto directorio.
Suponga que su árbol SVN es realmente desagradable con muchas ramas sin ninguna lógica de cómo están ubicadas, por ejemplo, tener ramas y subdirectorios que contienen más ramas.
es decir
y solo desea elegir a mano algunas de las ramas que se incluirán en su repositorio git.
Primero puede iniciar su repositorio con solo troncal sin ninguna rama adicional:
Después de eso, debería ver la siguiente configuración:
cuando quiera obtener una nueva sucursal de MyRepo, simplemente puede agregar nuevas entradas de recuperación a la configuración:
O puede editar la misma configuración en .git / config
Para buscar las nuevas ramas después de agregarlas a la configuración, simplemente ejecute:
[Editar] A veces parece necesario ejecutar fetch con --todos los parámetros para recuperar ramas recién agregadas:
fuente
En lugar de lidiar con las peculiaridades de git-svn, puede probar SubGit .
Uno tiene que instalar SubGit en el repositorio de Subversion. Después de eso, se puede usar el flujo de trabajo estándar de git en lugar de usar comandos especiales de git-svn:
Empujando nuevos commits:
git-svn:
SubGit:
Obteniendo cambios entrantes
git-svn:
SubGit:
Crear una nueva sucursal:
git-svn:
SubGit:
Consulte la documentación de SubGit para más detalles.
fuente
Para agregar a la respuesta de vjangus, que me ayudó, también me pareció útil agregar el uso de injertos git para atar las ramas al tronco en el punto apropiado, permitiendo que git vea el historial y realice fusiones correctamente.
Esto es simplemente un caso de agregar una línea a
.git/info/graftslos hashes:p.ej.
Crédito a http://evan-tech.livejournal.com/255341.html
(Agregaría esto como un comentario, pero no tengo suficiente reputación).
fuente
Si no realiza un pago con un diseño válido, no podrá pagar una sucursal remota.
Esto es lo que hago:
Después de eso, puede cambiar a una rama remota:
Luego, se lo cambiará automáticamente a su sucursal.
fuente