3

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

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

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

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

4

3 回答 3

1

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

我可以看到一些不同的继续选项,但都不是很好:

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

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

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

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

    • 如果这行得通,很好,继续。如果失败,则假设由于缺少身份验证而失败,并提示用户输入用户名和密码。

    • 对于后面的svn命令,如果不需要认证,就这样继续。否则,明确指定存储的用户名和密码(即底层命令的参数)--username--passwordsvn

不过,单打独斗绝非易事。除非你特别喜欢在 Git 源代码中进行一些艰苦的工作,或者希望这足以支付某人为你做这件事,否则看起来这是你需要忍受的行为。

于 2013-04-02T18:21:19.560 回答
0

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

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

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

另一种解决方案是直接svn要求存储您的凭据:

svn update --username 'username' --password 'password'
于 2013-03-29T14:21:02.767 回答
0

我努力制作 svn(包括 git-svn)来保存纯文本密码,但事实证明,为了做到这一点,应该使用特定的标志编译实际版本。看到这个这个。我的解决方法是使用这样的别名:

echo $SVN_PASS | git svn fetch
于 2020-09-29T20:31:58.827 回答