2011-01-14 13 views
20

este es el flujo de trabajo que utilizo actualmente para mis proyectos SVN (nunca uso ramas SVN, y algunos proyectos se trabajan activamente por otras personas también):git & svn externals: ¿una solución final?

  • en el servidor, haga lo inital git svn fetch que podría tomar horas También crea una rama 'compilar'.
  • clonación en un equipo de desarrollo es ahora rápido: git clone srv://project.git, git checkout build seguido por git update-refs ..., git svn fetch para restablecer el enlace al repositorio SVN
  • trabajo, cometer, cometer el trabajo, ...
  • para comprobar si las cosas están en su sano juicio, a la git push build servidor y desencadenar una compilación en Hudson para esa rama
  • para almacenar el trabajo para que pueda trabajar en él desde otra máquina, también empujar la rama de compilación
  • cuando esté satisfecho, unir se compromete en pasos lógicos (por ejemplo, uno para cada error) , comprométase con svn y restablezca todo, como git checkout master, git merge build, git svn dcommit, git push, git checkout build, git rebase master, git push build

Ingrese svn externals. Probé todas las secuencias de comandos here, pero todas fallaron. Mis externos están configurados como esto:

/path/to/x x 
/path/to/y/z y/z 
/path/to/a/b.file a/b.file 

y los guiones hacen cosas como tratar de crear /path/to/x en la raíz del sistema de archivos y git svn fetch /path/to/x. Además, los archivos individuales parecen causar más problemas. (subestación 1: ¿cuál es el formato svn: externals para el que se escribieron estos scripts?)

Parece que no es difícil modificar uno de los scripts para manejar mi situación y replicar la estructura de directorios que estoy buscando correctamente, pero luego me queda un gran problema: si cambio un archivo en los directorios x y y/z, no veo una manera de unir esto en un solo commit svn y esa es una de las razones por las que comencé a usar git en primer lugar.

De ahí la pregunta: ¿hay alguna manera de que pueda replicar el flujo de trabajo anterior, utilizando solo partes de un cierto repositorio svn, de tal forma que pueda hacer svn dcommit en la raíz? Preferiría una solución lista para usar que funcione tanto en Linux como en Windows.

edit Rápidamente pirateé uno de los scripts que encontré y lo hice replicando la estructura del directorio de los svn externals. No puedo clonar archivos individuales, sin embargo, aquí está la salida:

git svn clone -r HEAD srv://svn/repo/path/to/projects.sln 
Initialized empty Git repository in xxx/projects.sln/.git/ 
Invalid filesystem path syntax: REPORT request failed on '/svn/repo/!svn/vcc/default': 
    Cannot replace a directory from within at yyy/git/libexec/git-core/git-svn line 5114 

de preguntas adicionales 2: ¿no es posible ir a buscar a través de un único archivo svn git?

+0

Encontré que [este script] (https://github.com/mgee/git-svn-ext) funciona con las versiones actuales de SVN y Git . –

+2

@IvanKoblik gracias por publicarlo. Aunque tengo que admitir que simplemente dejé de hacer que todos los repositorios estén sincronizados, forzando a todos los colegas a usar también git: P – stijn

+0

Después de usarlo por un tiempo, incluso con el script, es muy engorroso. Creo que git-svn no lo corta para repositorios SVN con externos, tu sol es la mejor que existe. –

Respuesta

14

Lamentablemente, las características externas de svn son bastante flexibles. Me he encontrado a través de una serie de scripts que los tratan como <ruta> <url>, pero <url> <ruta> también se permite. Así que creo que algunos de los guiones simplemente se han roto en ese sentido.

Para responder a su segunda parte, no. 'git svn fetch' necesita operar en un subárbol del repositorio de Subversion, pero debe ser algo que pueda tratarse como una sucursal. Lo único que se asocia bien con ese paradigma es un directorio (trunk /, por ejemplo). FWIW, Bazar y Mercurial sufren aquí también. Al final del día, Subversion es solo un sistema de archivos versionado, mientras que Git tiene un concepto de primera clase de una rama. Este es uno de esos desajustes que se interponen en el camino.:-(

1

Solo otra nota en la segunda subclase Por lo que sé, la subversión a partir de hoy tampoco admite svn externos para archivos, solo carpetas. Por lo tanto, supongo que tales entradas en las propiedades no serían válidas. No sé si hay alguna herramienta que maneje este caso.

+1

Si bien ser un PITA importante (especialmente al tratar de unir SVN a Git) archivos externos son muy posibles en SVN. No sé desde cuándo, pero todos los clientes de línea de comandos SVN que se enviaron con Xcode desde al menos la versión 4.5 sí lo hicieron, y esos suelen ser bastante obsoletos. – danyowdee

+1

Externas de archivos IIRC requieren la versión 1.8 o posterior tanto para el cliente _y_ el servidor para funcionar correctamente. – PMF

Cuestiones relacionadas