在工作副本中动态更改SVN + SSH URI中的用户名

Ale*_*hov 13 svn ssh version-control repository

我正在使用SVN + SSH从SVN服务器检出存储库的工作副本,其中所有开发人员都是developer组的成员,并且对存储库目录和关联的元数据具有完全读/写权限:

svn co svn+ssh://someuser@svn.server/path/to/repository
Run Code Online (Sandbox Code Playgroud)

一些开发人员处理在共享shell帐户(root)下签出的同一工作副本.由于此存储库用于生产环境中的配置修订控制,因此这是不可避免的.给每个开发人员一个单独的shell帐户在目标机器上(正在进行结帐的那个)将是解决这个问题的一种方法,因为他们每个人都可以拥有自己的工作副本,但不幸的是,这在这里是不可接受的.

我们有各种提交后挂钩,可以发送详细提交的电子邮件,包括提交更改的人的用户名.

问题是,一旦使用svn+ssh://URI方案使用给定的用户名检出工作副本,提交和更新似乎也必须在该用户名下完成.由于两个原因,这是不可行的:

1)最初进行结账的人可能不是现在提交的人,我们需要提交后的电子邮件和其他提交后的挂钩才能确切知道提交者是谁,以及

2)显然,提交要求提交用户知道进行原始结账的人的帐户的密码,使用RSA密钥进行非交互式认证,尽管有理由#1.

有没有办法动态切换在这种情况下用于身份验证的远程帐户的用户名?

我做了一些研究,之前发现了这个问题:

通过svn + ssh更改Subversion提交的用户名

不幸的是,接受的答案(svn switch)中的建议不起作用:

[root@db repo-directory]# svn switch svn+ssh://user2@10.250.10.1/u/svc/repositories/repo-name
user2@10.250.10.1's password: 
svn: 'svn+ssh://user1@10.250.10.1/u/svc/repositories/repo-name' is not the same
repository as 'svn+ssh://user2@10.250.10.1/u/svc/repositories/repo-name'
Run Code Online (Sandbox Code Playgroud)

任何想法将不胜感激.提前谢谢您的考虑!

小智 27

如果您修改客户端的配置,它适用于ssh + svn:$ HOME/.subversion/config tunnels部分:

ssh = $SVN_SSH ssh -l *youruser*
Run Code Online (Sandbox Code Playgroud)

  • +1这似乎可以让多个用户在单个svn + ssh checkout上工作. (2认同)

Ale*_*hov 18

啊,好吧,没关系.似乎有svn switch --relocate诀窍:

svn switch --relocate svn+ssh://olduser@svn.server/path/to/repo svn+ssh://newuser@svn.server/path/to/repo
Run Code Online (Sandbox Code Playgroud)

但这很麻烦.如果有更简单的方法,我愿意接受建议.

显然,bash我想可以编写一个别名或shell脚本来自动化这个部分,但我希望它比这更简单.

  • 如果要更改svn + ssh的用户,请尝试在终端中执行`export SVN_SSH ="ssh -l newuser"`.事实证明,这对我来说是最简单的解决方案. (2认同)

tan*_*ens 5

您也可以使用其他用户名进行简单更新.

svn update --username <user> --password <pwd>
Run Code Online (Sandbox Code Playgroud)

  • 如果我没弄错的话,那只适用于svnserve,而不是svn + ssh. (4认同)