Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单个git svn命令不缓存多个svn操作的密码_Git_Git Svn - Fatal编程技术网

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

单个git svn命令不缓存多个svn操作的密码,git,git-svn,Git,Git Svn,我使用git svn连接到subversion存储库,该存储库通过https进行身份验证。我正在Linux(Ubuntu 12.04)上使用git命令行客户端。当我执行任何需要与subversion服务器交互的命令时,我必须按预期输入我的svn密码。但是,如果该命令需要与svn服务器进行多次交互(例如git svn dcommit与多个本地提交),我必须多次输入密码 在另一个工作站上,我有一个类似的设置,它为我提供了一个预期行为,即在整个提交序列中请求一次密码 我发现了类似的问题,但在这两种情况

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

在另一个工作站上,我有一个类似的设置,它为我提供了一个预期行为,即在整个提交序列中请求一次密码

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


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

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

svn co http://url-of-your-svn/repos/repos temp-repos-directory
通过这种方式,
svn
将询问您是否要保存凭据,这些凭据将保存在
subversion
config目录中(
~/.subversion/aut/
在linux中)

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

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

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

我可以看到一些不同的继续选择,但没有一个是好的:

  • 启用Subversion的凭据存储。你知道这一点,并且说过你不想这样做,所以这是不可能的

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

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

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

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

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

不过,一个人去远非小事。除非你特别喜欢在Git源代码中挖掘一些艰苦的工作,或者想要足够的钱让别人为你这样做,否则这似乎是你需要忍受的行为。

我努力让svn(包括Git svn)保存纯文本密码,但事实证明,为了做到这一点,实际版本应该使用特定的标志编译。见和。我的解决方法是使用如下别名:

echo $SVN_PASS | git svn fetch

我感谢你提供的信息。一般来说,我不希望SVN缓存我的凭据。我的一个设置功能完全符合我的预期。对于一系列命令,我只需输入一次密码。我试图了解git svn凭据缓存是如何工作的,但通常找不到很多文档。如果无法解决问题,我可能不得不求助于您的解决方案。“Git不知道或不关心您的Subversion凭据。”这为我指明了Subversion客户端本身临时缓存凭据的方向。我不确定git svn包装器是否正在处理svn凭据,或者该方面是否正在传递给svn客户端。我当然不想追求选项3,我也不认为我需要这样做。我的正常设置工作正常,我只需要输入一次密码。我很困惑为什么设置不同,如果我没有先看到预期的行为,我很可能会选择选项1,然后继续快乐的生活。@BeansGalore:据我所知,Subversion无法临时缓存您的凭据。从Subversion文档中我可以看出,缓存要么全是,要么什么都不是,你不能告诉它在一段时间后放弃缓存。这似乎也是我在文档中发现的。我想知道gnome密钥环或其他类似的过程是否正在缓存某些东西。我通常避免在系统上进行任何类型的凭证缓存,但在我不知道的情况下,可能会默认配置某些内容。我可能无意中发现了一个可能的原因。在“有效”的配置上,我错误地忘记在git svn clone命令上执行“-s”。当我克隆到另一个工作站时,我使用了'-s'。git svn包装器可能在后一种模式下执行单独的svn调用,这可能是问题所在。我需要核实一下。我对凭证缓存的抵制可能是徒劳的。@Beans:这听起来完全有道理。我没有时间去挖掘源代码来验证它,但是从Subversion存储库中获取多个文件夹(这就是
-s
将产生的结果)听起来很可能会导致每个文件夹进行单独的Subversion操作。