Git凭证填写拒绝我在Windows上安排的输入

时间:2016-02-11 10:26:09

标签: git credentials

我想在Windows服务器上运行每日任务:git-pull + heavy tests。

由于我希望它由一个计划触发并从脚本运行,我需要自动输入Git凭据。 我希望Git credential fill使用语法key=value

由于这是我第一次使用Git凭据,我可能会遇到一些基本错误。

我尝试使用Git Bash(Git扩展 - > Ctrl + G )和Cygwin。

我输入了以下几行:

$ git credential fill
protocol=ssh
host=devserver
username=<my user name>
password=<my password>
path=/srv/gitosis/repositories/Matlab.git
<empty line>

然后Git回复:

warning: invalid credential line:
fatal: unable to read credential from stdin

我也尝试在空行之前只输入一行并获得相同的结果。我只尝试了用户名行,只有协议行,只有主机行。

第一:我做错了什么?

第二:什么是正确的饲养途径?

如果我跑

git remote -vv

并获得:

origin  gitosis@10.10.10.102:/srv/gitosis/repositories/Matlab.git (fetch)
origin  gitosis@10.10.10.102:/srv/gitosis/repositories/Matlab.git (push)

我的道路是什么?

第三:什么是主机名?

考虑到Git remote的输出,如果我运行ping devserver 得到

64 bytes from 10.10.10.102: icmp_seq=0 ttl=64 time=74 ms

这是否意味着主机是 devserver

3 个答案:

答案 0 :(得分:4)

首先,一个免责声明:我不知道Git的管道,我只是将它们组合在一起以使它们工作并在此处对它进行评论,以防它对您有所帮助。我此时也使用过时的Git版本(1.9.5.mysysgit;我有理由)。

我尝试做类似事情的经验是git-credential很难正常工作。但是,我通过更直接地使用凭证助手来获得类似的工作。

我发现了一篇关于the credentials API的文章,其中介绍了git credential-foo返回git config credential.helper时调用foo的问题。这似乎有一个稍微不同的界面,使用命令get而不是fill(这似乎更符合逻辑)。

在任何情况下,对我来说,我的凭证助手为wincred,让我们致电主持人mysite.com。我使用同一站点完成大部分工作,因此Windows凭据管理器显示https://myusername@mysite.com的已保存凭据,而不是任何特定路径。打电话给我,我输入:

>git credential-wincred get
protocol=https
host=mysite.com

然后离开:

username=myusername
password=mypassword

我还可以在输入列表中添加用户名,并输出相同的内容。如果我添加任何路径到输入,或用IP地址替换主机,它就不起作用。

我的建议是看看你是否可以使用git credential-foo <get|store|erase>语法而不是git credential <fill|approve|reject>,尽管它们看起来基本上是相同的,只是略有不同的名称。

回答更具体的问题:

  

我做错了什么?

假设我理解您正在尝试设置Git凭据,我认为您要拨打git credential approve而不是git credential fill,因为approve会实际发送您输入的内容存储的帮助值,而fill试图填补你提供的数据中的漏洞(我认为;这里和其他地方的命名在Git中令人困惑)。

  

提供的正确途径是什么?

我不确定,因为我的一个重叠用法没有路径,但我建议srv/gitosis/repositories/Matlab.git,因为这是路径所暗示的前导斜线。

  

什么是主机名?

我怀疑这里发生的是你的远程名称中主机上的简单字符串匹配,而不是域的查找,因此我建议您使用host=10.10.10.102来处理您的情况。

答案 1 :(得分:1)

最简单的方法是使用Git Bash键入命令,而不是使用命令提示符。这样可以解决标准输入问题。

答案 2 :(得分:0)

我发现这是Windows命令外壳中行尾的问题。按住Alt键,然后按数字键盘上的1和0(换句话说,插入换行符),然后按键盘上的Enter,对我有用。