ver this question para una introducción a git svn branch
y that question de cómo eliminar las sucursales remotas - o por debajo de un resumen completo de los fundamentos de la git svn
(incluyendo la información de las dos cuestiones mencionadas).
Para darle un tutorial más completo (la configuración completa para cubrir sucursales locales y remotas, comprometer, fusionar sucursales locales - ver debajo de la línea horizontal para la configuración de sucursales), aquí se explica cómo trabajar fácilmente con un svn repo:
- inicializar el repositorio git local con
git svn clone <url>
, ya sea con parametro -s
(stdlayout) o con los parámetros --trunk, --tags, --branches
para especificar el directorio del tronco, las ramas y las etiquetas dentro del dir sVN.
-s
medios, el repositorio SVN tiene una estructura de directorios como éste
/trunk
/branches/new_feature
/branches/long_fix
/tags/0.0.9
/tags/0.1.0
Si no es así, se puede especificar la ubicación de la tronco, ramas y etiquetas con los argumentos presentados encima.
Al clonar el repositorio, automáticamente se le aterrizar en una rama local llamado maestro, que hará un seguimiento de forma automática el tronco .
En esto, lo hace sus compromete al igual que usted no sabría ha clonado el repositorio con git svn
, excepto que no empujar compromete:
- Uso
git commit
hacer commit en su sucursal
- utilice
git branch <branch name>
para crear ramas locales
- Use
git merge <branch name>
fusionar los cambios de las secciones locales
- etc.
Usted no necesita preocuparse de que estás en un -repo git svn
, hasta que desee transferir los cambios.
Desde la configuración anterior, tenemos la rama local de maestro que está rastreando tronco. Así que después de hacer commit en el interior del local de maestro -branch, pueden ser empujados a la tronco con el siguiente comando:
git svn dcommit
(dentro de su local de la rama principal )
(Tenga en cuenta d en dcommit
).
Para probar donde se compromete iría, hacer
Ahora viene la parte interesante: crear ramas de su lado que se realiza un seguimiento. Muy simple lectura the question above, sólo voy a copiar y pegar el ejemplo:
git svn branch -n -m "Branch for authentication bug" auth_bug
Tenga en cuenta que este ejemplo tiene la bandera -n
que sólo hace un simulacro. Quita esa bandera para hacerlo de verdad. El comando crea el auth_bug rama en el repositorio SVN en las ramas -directory que ha configurado anteriormente y
git checkout -b auth_bug auth_bug
crea una rama local auth_bug (primer parámetro) y deja que siga la rama remota auth_bug (segundo param), que se asigna al directorio /branches/auth_bug
en el repositorio svn. La rama remota auth_bug existe, porque la creó con el comando git svn branch
(y podría ser cualquier otra rama ya existente).
Dentro de esta rama local auth_bug, todas sus confirmaciones serán empujados al repositorio SVN en las ramas dir /branches/auth_bug
al hacer git svn dcommit
(probarlo añadiendo -n
al comando.)
Para eliminar una rama (no he hecho antes), parece que git svn
no maneja esto para usted, por lo que de acuerdo a another question, usted tiene que a la siguiente directamente utilizando el comando svn
:
svn rm $URL/branches/the_branch
Esto elimina la rama desde el repositorio SVN a distancia, y luego hay que eliminarlo de su repositorio git locales, dependiendo de que era una rama (como en el comando anterior) o una etiqueta:
git branch -D -r the_branch
rm -rf .git/svn/the_branch
o
git branch -D -r tags/the_tag
rm -rf .git/svn/tags/the_tag
para actualizar su rama con los cambios de la rama sVN aguas arriba ("pull"), se puede reajustar su sucursal en la parte superior del cambio con:
Esto obtiene nuevas confirmaciones en SVN, rebasa su sucursal y reproduce sus commits locales (si las hay).
¿Cómo configuró su git-svn repo? ¿Está rastreando las convenciones estándar de trunk/tag/branch svn **? –