Alterar URL do repositório SVN

116

Minha estrutura atual de 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)

Mas nosso projeto (daí o serviço SVN) funcionará em sub.someaddress.com.trvez de someaddress.com.tr(someaddress.com.tr será redirecionado para outro lugar em breve).

Como é o servidor de desenvolvimento, não consegui saber ao certo o que fazer. Vou precisar usar svn switchou svn switch --relocate? Além disso, vou precisar alternar svn root someaddress.com.tr ou o branch do projeto someaddress.com.tr/project ?

Anjo caído
fonte

Respostas:

208

Dado que o servidor Apache Subversion será movido para este novo alias DNS sub.someaddress.com.tr::

  • Com o Subversion 1.7 ou superior, use svn relocate. Relocate é usado quando a localização do servidor SVN muda. switchsó é usado se você quiser mudar sua cópia de trabalho local para outro branch ou outro caminho. Se estiver usando o TortoiseSVN, você pode seguir as instruções do Manual do TortoiseSVN . Se estiver usando a interface de linha de comando do SVN, consulte esta seção da documentação do SVN . O comando deve ser semelhante a este:

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

  • Continue usando, /projectpois o conteúdo real do seu repositório provavelmente não mudará.

Nota: svn relocatenão está disponível antes da versão 1.7 (obrigado a ColinM pela informação). Em versões mais antigas, você usaria:

    svn switch --relocate OLD NEW
Juanal
fonte
36
svn relocate não está disponível antes do 1.7. Para pré 1.7 você usariasvn switch --relocate OLD NEW
ColinM 01 de
Os links adicionais do TortoiseSVN são muito úteis, obrigado por isso
MOnsDaR
Não sabia sobre o switchcomando, toda a documentação que encontrei online é para versões mais recentes.
Dustin Cook de
Isso é útil quando eu preciso mudar de URL + ssh para não-SSH ou vice-versa, por exemplo: svn switch --relocate svn + ssh: // _ svn_server _ / _ svn_project _ / _ svn_branch_ svn: // _ svn_server _ / _ svn_project _ / _ svn_branch_. O último é especialmente útil se você fizer checkout automatizado como svn + ssh em vários nós usando a API Jenkins e alguns deles (nós do Windows) não têm SSH, mas você precisa fazer login na máquina de construção e "svn update" manualmente para teste alguma solução rápida.
Alexander Samoylov
11

Pesquisar o URL antes e depois pode lhe dar um pouco de paz de espírito:

svn info | grep URL

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

E verificar a sua versão (para ser> 1.7) para garantir, svn relocateé a coisa certa a usar:

svn --version

Por último, acrescentando ao anterior, se a mudança do URL do seu repositório também envolve uma mudança de protocolo, você pode precisar indicar o url antes e depois ( veja também aqui )

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

Tudo em uma única linha, é claro. A partir de então, tenha a boa sensação de que tudo correu bem:

svn info | grep URL:

Se você quiser, um pouco mais de autoconfiança, o novo URL svn repo está conectado e funcionando:

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

No meu caso, o svn relocatecomando (bem como svn switch --relocate) falhou por algum motivo (talvez o repo não tenha sido movido corretamente, ou outra coisa). Eu enfrentei este erro:

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

Eu não queria baixar novamente o repositório inteiro, então encontrei uma solução alternativa. Funcionou no meu caso, mas geralmente posso imaginar que muitas coisas podem quebrar (portanto, faça backup de sua cópia de trabalho ou esteja pronto para verificar novamente todo o repositório se algo der errado).

O endereço do repo e seu UUID são salvos no .svn/wc.dbarquivo de banco de dados SQLite em sua cópia de trabalho. Basta abrir o banco de dados (por exemplo, no navegador SQLite), navegar na tabela REPOSITÓRIO e alterar os valores das colunas roote uuidpara os novos. Você pode encontrar o UUID do novo repo emitindo svn info NEW_SERVER.

Novamente, trate isso como um método de último recurso.

Martin Pecka
fonte
@IgorGanapolsky: Você poderia ser mais específico?
Martin Pecka de
1
Se você leu meu post com atenção, não sugiro executar nenhum comando. Sugiro editar o banco de dados SQLite.
Martin Pecka de
Mas editar o banco de dados SQLite envolve a execução de comandos. Comandos SQL.
Peter Flynn
Acontece que você não pode usar sqlite; você deve usar sqlitebrowser conforme sugerido. Esquisito.
Peter Flynn
1

Se você quiser se comprometer com um novo repositório vazio, poderá fazer check-out do novo repositório vazio e se comprometer com um novo repo remoto.
chekout um novo Repo vazio não excluirá seus arquivos locais.
tente isto: por exemplo, repo url 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
fonte
O que isso fará com a história?
MattBianco