Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.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
为什么Jenkins的Git插件会用额外的斜杠重写我的本地Git repo url?_Git_Ssh_Jenkins_Cygwin_Gitosis - Fatal编程技术网

为什么Jenkins的Git插件会用额外的斜杠重写我的本地Git repo url?

为什么Jenkins的Git插件会用额外的斜杠重写我的本地Git repo url?,git,ssh,jenkins,cygwin,gitosis,Git,Ssh,Jenkins,Cygwin,Gitosis,我现在在尝试在一台Windows服务器上设置Jenkins作业以监视位于另一台Windows服务器上Gitosis服务器上的内部Git repo时遇到了一个问题 url如下所示:ssh://git@192.168.0.1:为安全起见,替换了相对路径/repo.git实值,而且相对路径不能使用“~/”,它只能在没有前导“/”的情况下使用 在使用url从命令行运行git clone时,一切正常 在Jenkins作业中配置Git SCM时,它能够运行ls remote命令,这将确认为Jenkins实例

我现在在尝试在一台Windows服务器上设置Jenkins作业以监视位于另一台Windows服务器上Gitosis服务器上的内部Git repo时遇到了一个问题

url如下所示:ssh://git@192.168.0.1:为安全起见,替换了相对路径/repo.git实值,而且相对路径不能使用“~/”,它只能在没有前导“/”的情况下使用

在使用url从命令行运行git clone时,一切正常

在Jenkins作业中配置Git SCM时,它能够运行ls remote命令,这将确认为Jenkins实例正确配置了ssh密钥

但是,当作业执行时,url似乎被重写为附加的正斜杠,这会导致克隆命令失败

Started by user Meh
[EnvInject] - Loading node environment variables.
Building in workspace D:\local_repo_test
 > git.exe rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git.exe config remote.origin.url ssh:///git@192.168.0.1:relative_path/repo.git # timeout=10
Fetching upstream changes from ssh:///git@192.168.0.1:relative_path/repo.git
 > git.exe --version # timeout=10
 > git.exe -c core.askpass=true fetch --tags --progress ssh:///git@192.168.0.1:relative_path/repo.git +refs/heads/*:refs/remotes/origin/*
ERROR: Error fetching remote repo 'origin'
ERROR: Error fetching remote repo 'origin'
Finished: FAILURE
困扰我的是“///”这个词。有人见过这样的东西吗


如果能在这方面提供任何帮助,我将不胜感激。

因为我无法与詹金斯一家的人达成任何共识,试图解决为什么url会被改写为“//”,而且我也无法确定Gitosis是否有问题,所以我找到了解决办法

由于Cygwin、SSH和Gitosis已经安装并运行,我决定向机器添加一个新用户,并通过它运行所有git SSH命令

按照此处的步骤添加新用户


然后我将chmod'ed和chgrp'ed/home/git/repositories发送给sshUsers组。一旦设置好,我就能够使用带有绝对路径名的Git SSH url,绕过jenkins的“//”url问题。

从检查各种版本的Git可以看出,您在SSH协议中使用的相对路径语法是不明确的。它在Windows上的msysgit版本上被解释为您所希望的,但在我测试的任何其他平台上都没有

当我测试的时候

git 1.7.1、CentOS 6.6、git克隆ssh://mwaite@mark-pc1:bin/失败并报告ssh:无法解析主机名mark-pc1:bin:名称或服务未知 git 1.7.2.5、Debian 6、git克隆ssh://mwaite@mark-pc1:bin/失败并报告ssh:无法解析主机名mark-pc1:bin:名称或服务未知 git 1.7.10.4、Debian 7、git克隆ssh://mwaite@mark-pc1:bin/失败并报告ssh:无法解析主机名mark-pc1:bin:名称或服务未知 git 2.1.4,Debian测试,git克隆ssh://mwaite@mark-pc1:bin/失败并报告致命错误:“/”似乎不是git存储库 git 2.2.1、Ubuntu 14.04、git克隆ssh://mwaite@mark-pc1:bin/失败并报告致命错误:“/”似乎不是git存储库 git 2.3.0、Ubuntu 14.04、git克隆ssh://mwaite@mark-pc1:ssh/home/mwaite/bin成功并使用ssh协议从/home/mwaite/bin克隆repo 据我所知,如果冒号后面的第一个单词是ssh之类的协议或22之类的端口号,那么这将被解释为用于存储库访问的服务或端口号


我在和中进一步描述了其中的一些细节,这是一个长卷,但只是为了检查-您是否可能在路径中使用参数?类似于带有PROTOCOL='ssh://'的$PROTOCOL/$URL/$PATH?听起来很牵强,所以没有冒犯的意思。但是我曾经做过类似的事情,参数化使我看不到字段实际发送的斜杠比它应该发送的多。

我在使用Jenkins和我想通过ssh克隆的私有bitbucket存储库时遇到了同样的问题。正如Mark Waite在回答中提到的,这被一些人认为是一个bug。然而,也有人认为这是预期的行为,因为“相对URI”不受支持

在我的案例中,一个临时解决办法是添加端口号22。所以在詹金斯管道中,我替换了

url: 'ssh://git@bitbucket.org:/my_team/my_repo.git'

现在管道按预期运行。

这对我来说很有效

ssh://awc@192.168.1.32:22/home/awc/GIT_HOME/awc.git

i、 e.在使用前缀为SSH:///的Git SSH url时,将额外的端口号22 SSH port放在IP地址之后,将组织名称前面的冒号替换为正斜杠:

git克隆ssh://git@192.168.0.1/relative_path/repo.git

或者只需按原样使用URL,而不使用前缀ssh://:


git克隆git@192.168.0.1:relative_path/repo.git

我在尝试将最新Jenkins版本配置为从Gerrit internal repoI克隆时遇到了相同的错误。我已通过更新Jenkins作业以使用HEAD:refs/heads/master作为refspec来解决此问题
ssh://awc@192.168.1.32:22/home/awc/GIT_HOME/awc.git