Modifica l'URL del repository SVN


116

La mia attuale struttura SVN:

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)

Ma il nostro progetto (da qui il servizio SVN) funzionerà sub.someaddress.com.trinvece di someaddress.com.tr(someaddress.com.tr verrà reindirizzato a qualche altra parte presto).

Poiché è il server di sviluppo, non potevo essere sicuro di cosa fare. Avrò bisogno di usare svn switcho svn switch --relocate? Inoltre, dovrò cambiare svn root someaddress.com.tr o il ramo del progetto someaddress.com.tr/project ?

Risposte:


208

Dato che il server Apache Subversion verrà spostato su questo nuovo alias DNS sub.someaddress.com.tr::

  • Con Subversion 1.7 o versioni successive, usa svn relocate. Relocate viene utilizzato quando la posizione del server SVN cambia. switchviene utilizzato solo se si desidera modificare la propria copia di lavoro locale in un altro ramo o in un altro percorso. Se si utilizza TortoiseSVN, è possibile seguire le istruzioni del manuale TortoiseSVN . Se si utilizza l'interfaccia della riga di comando SVN, fare riferimento a questa sezione della documentazione di SVN . Il comando dovrebbe assomigliare a questo:

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

  • Continua a usare /projectdato che il contenuto effettivo del tuo repository probabilmente non cambierà.

Nota: svn relocatenon è disponibile prima della versione 1.7 (grazie a ColinM per le informazioni). Nelle versioni precedenti useresti:

    svn switch --relocate OLD NEW

36
svn relocate non è disponibile prima della 1.7. Per la versione precedente alla 1.7 svn switch --relocate OLD NEW
useresti

I link aggiuntivi di TortoiseSVN sono molto utili, grazie per questo
MOnsDaR

Non sapevo del switchcomando tutta la documentazione che ho trovato online è per le versioni più recenti.
Dustin Cook

Questo è utile quando ho bisogno di trasferirmi da + ssh URL a non SSH o viceversa, ad esempio: svn switch --relocate svn + ssh: // _ svn_server _ / _ svn_project _ / _ svn_branch_ svn: // _ svn_server _ / _ svn_project _ / _ svn_branch_. L'ultima è particolarmente utile se esegui il checkout automatico come svn + ssh su diversi nodi utilizzando l'API Jenkins e alcuni di essi (nodi Windows) non hanno SSH, ma devi accedere alla macchina di compilazione e "svn update" manualmente per prova qualche soluzione rapida.
Alexander Samoylov

11

Grepping l'URL prima e dopo potrebbe darti un po 'di tranquillità:

svn info | grep URL

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

E controllare la tua versione (che sia> 1.7) per assicurarti, svn relocateè la cosa giusta da usare:

svn --version

Infine, aggiungendo a quanto sopra, se la modifica dell'URL del tuo repository comporta anche una modifica del protocollo potresti dover indicare l' URL prima e dopo ( vedi anche qui )

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

Ovviamente tutto in una sola riga, dopodiché avrai la sensazione che tutto sia andato liscio:

svn info | grep URL:

Se ne hai voglia, un po 'più di sicurezza, il nuovo URL del repository svn è connesso e funzionante:

svn status --show-updates
svn diff

5

Nel mio caso, il svn relocatecomando (così come svn switch --relocate) non è riuscito per qualche motivo (forse il repository non è stato spostato correttamente o qualcos'altro). Ho riscontrato questo errore:

$ 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'

Non volevo scaricare di nuovo l'intero repository, quindi ho trovato una soluzione alternativa. Ha funzionato nel mio caso, ma in genere posso immaginare che molte cose possono essere interrotte (quindi fai il backup della tua copia di lavoro o sii pronto a ricontrollare l'intero repository se qualcosa va storto).

L'indirizzo del repository e il relativo UUID vengono salvati nel .svn/wc.dbfile di database SQLite nella copia di lavoro. Basta aprire il database (ad esempio in SQLite Browser), sfogliare la tabella REPOSITORY e modificare i valori delle colonne roote uuidcon quelli nuovi. Puoi trovare l'UUID del nuovo repo emettendo svn info NEW_SERVER.

Anche in questo caso, trattalo come un metodo di ultima risorsa.


@ IgorGanapolsky: potresti essere più specifico?
Martin Pecka

1
Se leggi attentamente il mio post, non suggerisco di eseguire alcun comando. Suggerisco di modificare il DB SQLite.
Martin Pecka

Ma la modifica del database SQLite implica l'esecuzione di comandi. Comandi SQL.
Peter Flynn

Risulta che non puoi usare sqlite; devi usare sqlitebrowser come suggerito. Strano.
Peter Flynn

1

Se si desidera eseguire il commit in un nuovo repository vuoto, è possibile eseguire il checkout del nuovo repository vuoto e eseguire il commit in un nuovo repository remoto.
chekout un nuovo repository vuoto non eliminerà i file locali.
prova questo: ad esempio, l'URL del repository 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"


Cosa farà questo alla storia?
MattBianco
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.