单个git-svn命令不缓存多个svn操作的密码

时间:2013-03-28 19:32:36

标签: git git-svn

我正在使用git-svn连接到通过https进行身份验证的subversion存储库。我在Linux上使用git命令行客户端(Ubuntu 12.04)。当我执行任何需要与subversion服务器交互的命令时,我必须按预期输入我的svn密码。但是,如果该命令需要与svn服务器进行多次交互(例如,git svn dcommit有多个本地提交),我必须多次输入密码。

在另一个工作站上,我有一个类似的设置,它给了我在整个提交系列中要求输入一次密码的预期行为。

我发现了类似的问题herehere,但在这两种情况下,OP都希望在git-svn命令之间缓存svn凭据。我没有配置subversion来缓存我的密码,如果可以,我希望保持这种方式。

我的git-svn版本是1.7.9.5(svn 1.6.17)

3 个答案:

答案 0 :(得分:1)

问题是git svn命令使用常规Subversion接口周围的包装器执行多个Subversion操作; Git不知道或不关心您的Subversion凭证。

我可以看到一些不同的选项,但没有一个是伟大的:

  • 启用Subversion的凭据存储。你知道这件事,并说你不想这样做,所以这不是一个非首发。

  • 只需为Git执行的每个Subversion操作输入密码。您当前的解决方案如果那很好,你就不会问这个问题。

  • 补丁git svn。 Git代码是开源的,git svn命令是用Perl编写的,因此您可以在系统上进行编辑并使用新版本而无需重新编译。粗糙的设计:

    • 每当与Subversion存储库交互时,首先尝试在没有交互式身份验证的情况下执行它(即基础--non-interactive命令的svn参数)。

    • 如果有效,那就好了,继续。如果失败,则假设由于缺少身份验证而失败,并提示用户输入用户名和密码。

    • 对于以后的svn命令,如果不需要身份验证,请继续执行此操作。否则,请明确指定存储的用户名和密码(即基础--username命令的--passwordsvn参数。

但是,单打独唱远非微不足道。除非你特别喜欢在Git源代码中进行一些艰苦的工作,或者希望这足以让某人为你做这件事,看起来这就是你需要忍受的行为。

答案 1 :(得分:0)

您需要将您的凭据存储在subversion目录中。一个天真的解决方案是在临时目录中对您的svn存储库进行简单的检查,以便svn保存您的usernamepassword

svn co http://url-of-your-svn/repos/repos temp-repos-directory

这样svn会询问您是否要保存凭据,并将它们保存在subversion配置目录(linux中的~/.subversion/aut/)中。

另一种解决方案是直接询问svn来存储您的凭据:

svn update --username 'username' --password 'password'

答案 2 :(得分:0)

我尽力制作svn(包括git-svn)来保存纯文本密码,但事实证明,实际版本应与特定标志一起编译,以便做到这一点。请参阅thisthis。我的解决方法是使用这样的别名:

echo $SVN_PASS | git svn fetch