Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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拉入同一本地存储库_Git_Jenkins_Git Pull_Git Clone - Fatal编程技术网

并发git拉入同一本地存储库

并发git拉入同一本地存储库,git,jenkins,git-pull,git-clone,Git,Jenkins,Git Pull,Git Clone,我的任务是维护Jenkins服务器,其任务基本上是检查一些代码并进行构建。目前,他们使用“-depth 1”和“-b{branch}”选项进行git克隆,以尽快获得特定的代码分支。但这仍然是浪费,因为每次执行作业时(通过网络)都会签出一个新副本,即使更改很少(如果有的话) 相反,我想做的是在构建机器上有一个共享的本地repo,它是我们远程repo的克隆。每个作业都会对特定的分支执行“git pull”,从远程repo引入任何更改,然后在开始构建之前将源树从repo复制到其Jenkins工作区 这

我的任务是维护Jenkins服务器,其任务基本上是检查一些代码并进行构建。目前,他们使用“-depth 1”和“-b{branch}”选项进行git克隆,以尽快获得特定的代码分支。但这仍然是浪费,因为每次执行作业时(通过网络)都会签出一个新副本,即使更改很少(如果有的话)

相反,我想做的是在构建机器上有一个共享的本地repo,它是我们远程repo的克隆。每个作业都会对特定的分支执行“git pull”,从远程repo引入任何更改,然后在开始构建之前将源树从repo复制到其Jenkins工作区

这是个坏主意吗?

我担心的是,针对同一代码分支的不同作业可能会同时运行,这可能会导致并发的“git pull”请求

这会导致Git元数据损坏吗?

其中一个并发拉取是否可能由于锁定问题而失败?

共享本地回购永远不会有任何更改提交给它,也不会将任何内容从它推送到远程回购。可以说,这将是“只拉”。所有拉取都来自同一个用户,因此不应该存在任何文件权限问题

一些谷歌在4年前就开始了这一讨论,但似乎还没有定论:

这是个坏主意吗
我们可以想象以下场景
假设Job1执行git拉取并签出最新代码,并开始从本地git存储库复制到工作区。在这个特殊的时刻,Job2进行了git拉取,当复制过程仍在进行时,很少有文件被复制(对于大型存储库,我相信这是可能的)。在这种情况下,您可能同时拥有两个签出的文件,这不是您想要的。请纠正我,如果我在这个特殊情况下错了

虽然不是原始问题的一部分,但添加以下内容可能对其他人有用
因为,您已经清楚地提到您不会向git提交任何内容,所以您不会遇到竞争条件

“提示:更新被拒绝,因为当前分支的提示已过期
提示:它的远程对应项。合并远程更改(例如“git pull”)
提示:再次推之前。
提示:有关详细信息,请参阅“git推送--帮助”中的“关于快进的说明”。
子项已退出,值为1-“

如果作业在执行后将几个文件签入git(更新版本号、变更日志等),则会遇到此错误。当您已从git签出特定修订,并且存储库的同一分支中有新签入,并且当前作业尝试提交更新的文件,但发现git的版本与签出时的版本不同时,就会发生此错误

  • 如果您没有向git提交任何内容,那么值得一试 尽量避免多次重复,以节省空间/作业执行时间 拉
  • 如果你有任何回馈,分享一个单独的信息不是一个好主意 跨多个作业的git存储库

打得好。我想如果我强制执行规则,没有两个Jenkins作业针对同一个分支,那么我就可以了,因为给定作业的执行是序列化的。因此,作业A可能正在从分支A提取/复制,而作业B正在从分支B提取/复制,但这不会造成任何问题。对吗?@jph很好!!!根据您建议的规则,它在任何情况下都应该有效(相同分支或不同分支)。