并发git拉入同一本地存储库
我的任务是维护Jenkins服务器,其任务基本上是检查一些代码并进行构建。目前,他们使用“-depth 1”和“-b{branch}”选项进行git克隆,以尽快获得特定的代码分支。但这仍然是浪费,因为每次执行作业时(通过网络)都会签出一个新副本,即使更改很少(如果有的话) 相反,我想做的是在构建机器上有一个共享的本地repo,它是我们远程repo的克隆。每个作业都会对特定的分支执行“git pull”,从远程repo引入任何更改,然后在开始构建之前将源树从repo复制到其Jenkins工作区 这是个坏主意吗? 我担心的是,针对同一代码分支的不同作业可能会同时运行,这可能会导致并发的“git pull”请求 这会导致Git元数据损坏吗? 其中一个并发拉取是否可能由于锁定问题而失败? 共享本地回购永远不会有任何更改提交给它,也不会将任何内容从它推送到远程回购。可以说,这将是“只拉”。所有拉取都来自同一个用户,因此不应该存在任何文件权限问题 一些谷歌在4年前就开始了这一讨论,但似乎还没有定论: 这是个坏主意吗并发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工作区 这
我们可以想象以下场景
假设Job1执行git拉取并签出最新代码,并开始从本地git存储库复制到工作区。在这个特殊的时刻,Job2进行了git拉取,当复制过程仍在进行时,很少有文件被复制(对于大型存储库,我相信这是可能的)。在这种情况下,您可能同时拥有两个签出的文件,这不是您想要的。请纠正我,如果我在这个特殊情况下错了 虽然不是原始问题的一部分,但添加以下内容可能对其他人有用
因为,您已经清楚地提到您不会向git提交任何内容,所以您不会遇到竞争条件 “提示:更新被拒绝,因为当前分支的提示已过期
提示:它的远程对应项。合并远程更改(例如“git pull”)
提示:再次推之前。
提示:有关详细信息,请参阅“git推送--帮助”中的“关于快进的说明”。
子项已退出,值为1-“
如果作业在执行后将几个文件签入git(更新版本号、变更日志等),则会遇到此错误。当您已从git签出特定修订,并且存储库的同一分支中有新签入,并且当前作业尝试提交更新的文件,但发现git的版本与签出时的版本不同时,就会发生此错误
- 如果您没有向git提交任何内容,那么值得一试
尽量避免多次重复,以节省空间/作业执行时间
拉
- 如果你有任何回馈,分享一个单独的信息不是一个好主意 跨多个作业的git存储库