我想在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 ?
答案 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,对我有用。