我想在Windows服务器上运行日常任务:git-pull + heavy tests.
由于我希望它由一个计划触发并从脚本运行,我需要自动输入Git凭据.我想使用Git凭证填充语法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>
Run Code Online (Sandbox Code Playgroud)
然后Git回复:
warning: invalid credential line:
fatal: unable to read credential from stdin
Run Code Online (Sandbox Code Playgroud)
我也尝试在空行之前只输入一行并获得相同的结果.我只尝试了用户名行,只有协议行,只有主机行.
第一:我做错了什么?
第二:什么是正确的饲料途径?
如果我跑
git remote -vv
Run Code Online (Sandbox Code Playgroud)
得到:
origin gitosis@10.10.10.102:/srv/gitosis/repositories/Matlab.git (fetch)
origin gitosis@10.10.10.102:/srv/gitosis/repositories/Matlab.git (push)
Run Code Online (Sandbox Code Playgroud)
我的道路是什么?
第三:主机名是什么?
鉴于Git远程输出,如果我运行ping devserver
得到
64 bytes from 10.10.10.102: icmp_seq=0 ttl=64 time=74 ms
Run Code Online (Sandbox Code Playgroud)
这是否意味着主机是devserver?
首先,免责声明:我不知道Git的功能,我只是将一些东西混在一起以使它们正常工作,并在这里发表评论,以防对您有所帮助。此时,我还使用了过时的Git版本(1.9.5.mysysgit;我有原因)。
我从尝试做类似的事情中获得的经验是,git-credential很难正常工作。但是,我确实通过更直接地使用凭据帮助程序来获得与工作类似的功能。
我发现了有关项目的凭据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
Run Code Online (Sandbox Code Playgroud)
然后走出去:
username=myusername
password=mypassword
Run Code Online (Sandbox Code Playgroud)
我还可以将用户名添加到输入列表中,并输出相同的内容。如果我在输入中添加了任何路径,或者将主机替换为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您使用这种情况。