Cambiar la URL del repositorio de SVN

116

Mi estructura SVN actual:

Path: .
URL: svn://someaddress.com.tr/project
Repository Root: svn://someaddress.com.tr
Repository UUID: -------------------------------------
Revision: 10297
Node Kind: directory
Schedule: normal
Last Changed Author: ----
Last Changed Rev: 9812
Last Changed Date: 2010-12-20 17:38:48 +0100 (Mon, 20 Dec 2010)

Pero nuestro proyecto (de ahí el servicio SVN) funcionará en sub.someaddress.com.trlugar de someaddress.com.tr(someaddress.com.tr será redirigido a otro lugar pronto).

Dado que es el servidor de desarrollo, no podía estar seguro de qué hacer. ¿Necesitaré usar svn switcho svn switch --relocate? Además, ¿tendré que cambiar svn root someaddress.com.tr o la rama del proyecto someaddress.com.tr/project ?

Ángel caido
fuente

Respuestas:

208

Dado que el servidor Apache Subversion se moverá a este nuevo alias DNS sub.someaddress.com.tr:

  • Con Subversion 1.7 o superior, use svn relocate. Relocate se usa cuando cambia la ubicación del servidor SVN. switchsolo se usa si desea cambiar su copia de trabajo local a otra rama u otra ruta. Si usa TortoiseSVN, puede seguir las instrucciones del Manual de TortoiseSVN . Si utiliza la interfaz de línea de comandos de SVN, consulte esta sección de la documentación de SVN . El comando debería verse así:

    svn relocate svn://sub.someaddress.com.tr/project

  • Continúe usando /projectdado que el contenido real de su repositorio probablemente no cambiará.

Nota: svn relocateno está disponible antes de la versión 1.7 (gracias a ColinM por la información). En versiones anteriores, usaría:

    svn switch --relocate OLD NEW
Juanal
fuente
36
svn relocate no está disponible antes de 1.7. Para svn switch --relocate OLD NEW
versiones
Los enlaces adicionales de TortoiseSVN son muy útiles, gracias por eso
MOnsDaR
No sabía sobre el switchcomando, toda la documentación que encontré en línea es para versiones más nuevas.
Dustin Cook
Esto es útil cuando necesito reubicar de + ssh URL a no SSH o viceversa, por ejemplo: svn switch --relocate svn + ssh: // _ svn_server _ / _ svn_project _ / _ svn_branch_ svn: // _ svn_server _ / _ svn_project _ / _ svn_branch_. El último es especialmente útil si realiza un pago automático como svn + ssh en varios nodos utilizando la API de Jenkins y algunos de ellos (nodos de Windows) no tienen SSH, pero debe iniciar sesión en la máquina de compilación y "actualizar svn" manualmente para prueba alguna solución rápida.
Alexander Samoylov
11

Grepping en la URL antes y después puede darte tranquilidad:

svn info | grep URL

  URL: svn://svnrepo.rz.mycompany.org/repos/trunk/DataPortal
  Relative URL: (...doesn't matter...)

Y verificar su versión (para ser> 1.7) para asegurarse de que svn relocatesea ​​lo correcto para usar:

svn --version

Por último, agregando a lo anterior, si el cambio de la URL de su repositorio también implica un cambio de protocolo, es posible que deba indicar la URL anterior y posterior ( consulte también aquí )

svn relocate svn://svnrepo.rz.mycompany.org/repos/trunk/DataPortal
    https://svngate.mycompany.org/svn/repos/trunk/DataPortal

Todo en una sola línea, por supuesto. A continuación, tenga la buena sensación de que todo salió bien:

svn info | grep URL:

Si le apetece, un poco más de seguridad en sí mismo, la nueva URL del repositorio svn está conectada y funcionando:

svn status --show-updates
svn diff
Frank Nocke
fuente
5

En mi caso, el svn relocatecomando (así como svn switch --relocate) falló por alguna razón (tal vez el repositorio no se movió correctamente o algo más). Me enfrenté a este error:

$ svn relocate NEW_SERVER
svn: E195009: The repository at 'NEW_SERVER' has uuid 'e7500204-160a-403c-b4b6-6bc4f25883ea', but the WC has '3a8c444c-5998-40fb-8cb3-409b74712e46'

No quería volver a descargar todo el repositorio, así que encontré una solución. En mi caso funcionó, pero en general me imagino que muchas cosas pueden romperse (así que haga una copia de seguridad de su copia de trabajo o esté listo para volver a verificar todo el repositorio si algo sale mal).

La dirección del repositorio y su UUID se guardan en el .svn/wc.dbarchivo de base de datos SQLite en su copia de trabajo. Simplemente abra la base de datos (por ejemplo, en el navegador SQLite), busque la tabla REPOSITORY y cambie los valores de las columnas rooty uuidpor los nuevos. Puede encontrar el UUID del nuevo repositorio emitiendo svn info NEW_SERVER.

Nuevamente, trate esto como un método de último recurso.

Martín Pecka
fuente
@IgorGanapolsky: ¿Podría ser más específico?
Martin Pecka
1
Si lee mi publicación detenidamente, no sugiero ejecutar ningún comando. Sugiero editar la base de datos SQLite.
Martin Pecka
Pero editar la base de datos SQLite implica ejecutar comandos. Comandos SQL.
Peter Flynn
Resulta que no puedes usar sqlite; tienes que usar sqlitebrowser como se sugiere. Extraño.
Peter Flynn
1

Si desea comprometerse con un nuevo repositorio vacío, puede verificar el nuevo repositorio vacío y comprometerse con un nuevo repositorio remoto.
chekout un nuevo repositorio vacío no eliminará sus archivos locales.
intente esto: por ejemplo, URL de repositorio remoto: https://example.com/SVNTest cd [YOUR PROJECT PATH] rm -rf .svn svn co https://example.com/SVNTest ../[YOUR PROJECT DIR NAME] svn add ./* svn ci -m"changed repo url"

leo.tan
fuente
¿Qué le hará esto a la historia?
MattBianco