SVN更改用户名


86

我发现了很多有关如何更改特定修订版用户名的示例。

但是我需要的是:我使用工作伙伴的身份验证凭证进行了结帐,并且需要将其更改为我的凭证以用于将来的提交。

由于已经进行了许多更改,因此我不能仅凭我的凭证进行结帐...

有人熟悉吗?



@Pekka:好答案。但是,该问题并非特定于TortoiseSVN。
拉斐尔·施维克

Answers:


73

您可以通过以下方式更改用户

  • Subversion 1.6及更早版本:

    svn switch --relocate protocol://currentUser@server/path protocol://newUser@server/path
    
  • Subversion 1.7及更高版本:

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

要找出是什么protocol://currentUser@server/path,运行

svn info

在您的工作副本中。


4
我收到一个错误“ svn:E155024:无效的源URL前缀:'protocol:// currentUser @ server / path'(与目标URL的'protocol:// newUser @ server / path'不重叠)“ [与真实的URL,当然]
詹姆斯·罗斯

3
这对于普通的http-auth身份验证方案不起作用。请参阅此答案,以了解如何删除该用例的已保存用户凭据。@James可能是您的问题。
Caleb 2012年

很棒的东西。。。:)
Karma

64

最简单的方法是在下一次签出或提交时仅使用--username选项。例如:

svn commit --username newUser

要么

svn co --username newUser

然后将其缓存,并将用作将来命令的默认用户名。

另请参阅: 在Subversion中,我可以不是我的登录名吗?


我这样做了,然后svn info我发现Author生产线没有变化。
vsync 2014年

1
从上面的链接:“当Subversion直接从文件系统访问存储库时,它会使用您的文件系统权限来访问存储库。(当您通过SSH隧道连接时,SVN会使用服务器上的FS权限,具体取决于您的SSH登录。)因此svn checkout --username可能不适用于您的存储库。”
马特·布朗

@MattBrowne是正确的。诸如“ svn + ssh://svn.server.com”之类的路径将不支持--username更改。使用重定位的公认答案是我可以更改它的唯一方法。
FlipMcF

51

我遇到了完全相同的问题,并在SVN客户端将用户身份验证数据存储哪里的地方找到了解决方案

  1. cd~/.subversion/auth/
  2. fgrep -l <yourworkmatesusernameORtheserverurl> */*
  3. 删除找到的文件。
  4. 存储库中的下一个操作将再次询问您用户名/密码信息。

(对于Windows,步骤类似;auth目录位于中%APPDATA%\Subversion\)。

请注意,这仅适用于用户名是服务器登录名一部分的SVN访问方案,因此对于使用进行访问的存储库无效file://


1
值得注意的是,如果您运行IntelliJ IDEA,则还必须重新启动IntelliJ才能使更改生效
AndersG 2012年

1
fgrep命令应带有一个-l,以便该命令告诉您文件路径。我本来要编辑的,但是还不够长。
vguzmanp

16

可以执行的命令:

svn up --username newUsername

完美的工作;)

PS只是一个提示:“ --username”选项可以在任何“ svn”命令上执行,而不仅仅是更新。


5

如果您的协议是http,并且使用的是Subversion 1.7,则可以通过在任何命令上使用global --username选项随时切换用户。

当Ingo的方法对我不起作用时,这就是我发现起作用的原因。


3

Tortoise SVN --> Settings --> Saved Data

有一个清除身份验证数据的选项,单击清除按钮,它将允许您选择要清除其userid / pwd的连接。

完成此操作后,任何签出或更新活动都会提示您输入用户名和密码。


2

对于Win10,您应该删除此文件夹并关闭/打开您的IDE

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

,在我的项目中也没有“ .subversion”文件夹,只有“ .svn”


1

另外,对于那些刚意识到为时已晚的人,他们使用了错误的凭据,解决方法(事后)是更改该修订版的svn作者:请参阅此问题

基本上语法是:

svn propset --revprop -r (revision_number) svn:author (new username)

1

基于Ingo Kegel的解决方案,我创建了一个“小” bash脚本来更改所有子文件夹中的用户名。记得:

  1. 更改 <NEW_USERNAME>为新的用户名。
  2. 更改<OLD_USERNAME>为当前用户名(如果您当前未设置用户名,只需删除<OLD_USERNAME>@)。

在下面的代码中,仅打印出svn命令(不执行)。要执行svn命令,只需删除echo它前面的和空格(就在上方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

希望你觉得它有用!


0

我相信您可以在与工作人员分支相同的主干中创建您自己的分支(使用自己的凭据),从您工作人员的分支合并到您的工作副本,然后从您的分支合并。所有将来的提交都应标记为来自您。


0

您可以要求您的同事创建一个补丁,它将所有已完成的更改折叠到一个文件中,您可以将其应用于自己的检出。这将适当地更新您的所有文件,然后您可以还原他一边的更改并签入。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.