SVN alterar nome de usuário

86

Encontrei muitos exemplos de como alterar o nome de usuário para revisões específicas e assim por diante.

Mas o que eu preciso é isso: fiz um checkout com as credenciais de autenticação de um colega de trabalho e preciso alterá-las para minhas credenciais para commits futuros.

Não posso simplesmente finalizar a compra com minhas credenciais devido às muitas mudanças que já foram feitas ...

Alguém familiarizado com isso?

Axel Freudiger
fonte
Pergunta interessante! Não parece haver uma maneira, exceto limpar todos os dados de autenticação armazenados.
Pekka,
@Pekka: Boa resposta. A questão não era específica do TortoiseSVN, no entanto.
Raphael Schweikert

Respostas:

73

Você pode alterar o usuário com

  • Subversion 1.6 e anterior:

    svn switch --relocate protocol://currentUser@server/path protocol://newUser@server/path
    
  • Subversion 1.7 e posterior:

    svn relocate protocol://currentUser@server/path protocol://newUser@server/path
    

Para descobrir o que protocol://currentUser@server/pathé, execute

svn info

em sua cópia de trabalho.

Ingo Kegel
fonte
4
Recebo um erro "svn: E155024: Prefixo de URL de origem inválido: 'protocol: // currentUser @ server / path' (não se sobrepõe ao URL de destino 'protocol: // newUser @ server / path')" [com meus URLs reais, claro]
James Roth
3
Isso não funciona para esquemas simples de autenticação http-auth. Consulte esta resposta para saber como excluir as credenciais de usuário salvas para esse caso de uso. @James esse é provavelmente o seu problema.
Caleb
Coisas brilhantes .. Thnaks :)
Karma
64

A maneira mais fácil de fazer isso é simplesmente usar a opção --username em seu próximo checkout ou commit. Por exemplo:

svn commit --username newUser

ou

svn co --username newUser

Ele será armazenado em cache e usado como nome de usuário padrão para comandos futuros.

Veja também: No Subversion, posso ser um usuário diferente do meu nome de login?

Matt Browne
fonte
Eu fiz isso, e então svn infonão vejo nenhuma mudança na Authorlinha.
vsync
2
Do link acima: "quando o Subversion está acessando o repositório diretamente do sistema de arquivos, ele usa as permissões do sistema de arquivos para acessar o repositório. (Quando você se conecta via túnel SSH, o SVN usa suas permissões FS no servidor, conforme determinado por seu SSH login.) Então svn checkout --username pode não funcionar para o seu repositório. "
Matt Browne
1
@MattBrowne está correto. um caminho como "svn + ssh: //svn.server.com" não respeitará a mudança --username. A resposta aceita que usa realocar era a única maneira de mudar isso.
FlipMcF
51

Eu tive exatamente o mesmo problema e encontrei a solução em Onde o cliente SVN armazena os dados de autenticação do usuário? :

  1. cda ~/.subversion/auth/.
  2. Faça fgrep -l <yourworkmatesusernameORtheserverurl> */*.
  3. Exclua o arquivo encontrado.
  4. A próxima operação no repositório solicitará novamente as informações de nome de usuário / senha.

(Para Windows, as etapas são análogas; o authdiretório está em %APPDATA%\Subversion\).

Observe que isso só funcionará para esquemas de acesso SVN onde o nome do usuário faz parte do login do servidor, portanto não é útil para repositórios acessados ​​usando file://.

Raphael Schweikert
fonte
1
Vale a pena notar que se você executar o IntelliJ IDEA, também terá que reiniciar o IntelliJ para que as alterações tenham efeito
AndersG
1
o fgrepcomando deve ter um -l, de modo que o comando informe o caminho do arquivo. Eu ia editar, mas não é longo o suficiente.
vguzmanp
16

O comando, que pode ser executado:

svn up --username newUsername

Funciona perfeitamente ;)

PS Só uma dica: a opção "--username" pode ser executada em qualquer comando "svn", não apenas na atualização.

Aurimas
fonte
5

Se o seu protocolo for http e você estiver usando o Subversion 1.7, você pode mudar o usuário a qualquer momento simplesmente usando a opção global --username em qualquer comando.

Quando o método de Ingo não funcionou para mim, foi o que descobri que funcionava.

Adam Nutt
fonte
3

Vá para Tortoise SVN --> Settings --> Saved Data.

Há uma opção para limpar os dados de autenticação, clique no botão limpar e isso permitirá que você selecione para qual conexão deseja limpar o ID do usuário / pwd.

Depois que você fizer isso, qualquer checkout ou atividade de atualização será solicitado novamente para o ID do usuário e a senha.

Wan
fonte
2

para Win10 você deve remover esta pasta e fechar / abrir seu IDE

C: \ Users \ User \ AppData \ Roaming \ Subversion \ auth

, também em meus projetos não há pastas ".subversion", apenas ".svn"

Bratez
fonte
1

Além disso, para aqueles que perceberam tarde demais, que se comprometeram com as credenciais erradas, a solução (após o fato) é mudar o autor svn dessa revisão: veja esta questão

Basicamente, a sintaxe é:

svn propset --revprop -r (revision_number) svn:author (new username)
Patrice M.
fonte
1

Com base na solução de Ingo Kegel, criei um "pequeno" script bash para alterar o nome de usuário em todas as subpastas. Lembrar de:

  1. mudança <NEW_USERNAME> para o novo nome de usuário.
  2. Mude <OLD_USERNAME>para o nome de usuário atual (se você não tiver um nome de usuário definido, simplesmente remova <OLD_USERNAME>@).

No código abaixo, o comando svn é apenas impresso (não executado). Para que o comando svn seja executado, simplesmente remova o echoespaço em branco e na frente dele (logo acima popd).

for d in */ ; \
do echo $d ; pushd $d ; \
url=$(svn info | grep "URL: svn") ; \
url=$(echo ${url#"URL: "}) ; \
newurl=$(echo $url | sed "s/svn+ssh:\/\/<OLD_USERNAME>@/svn+ssh:\/\/<NEW_USERNAME>@/") ; \
echo "Old url: "$url ; echo "New url: "$newurl ; \
echo svn relocate $url $newurl ; \
popd ; \
done

Espero que seja útil!

zpon
fonte
0

Eu acredito que você poderia criar seu próprio branch (usando sua própria credencial) a partir do mesmo tronco que o branch de seu colega de trabalho, mesclar do branch de seu colega de trabalho para sua cópia de trabalho e então fundir de seu branch. Todos os commits futuros devem ser marcados como vindos de você.

Martin
fonte
0

Você pode pedir a seu colega para criar um patch, que reunirá todas as alterações feitas em um único arquivo que pode ser aplicado ao seu próprio check-out. Isso atualizará todos os seus arquivos de forma adequada e, em seguida, você poderá reverter as alterações e fazer o check-in das suas.

Alex
fonte