繁体   English   中英

并发git拉到相同的本地存储库

[英]concurrent git pulls to same local repository

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

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

这是一个坏主意吗?

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

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

并发请求之一是否可能由于锁定问题而失败?

共享的本地存储库将永远不会进行任何更改,也不会将任何内容推送到远程存储库。 可以这么说,它将是“仅拉”式的。 所有拉取将来自同一用户,因此不应有任何文件许可问题。

从4年前开始,有人在Google上进行了讨论,但似乎没有定论:

http://git.661346.n2.nabble.com/concurrent-fetches-to-update-same-mirror-td5893458.html

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

尽管不是原始问题的一部分,但添加以下内容可能对其他人很有用。
因为,您已经明确提到您不会将任何内容提交回git,所以您不会遇到竞争条件。

“提示:由于您当前分支的提示不在后面,因此更新被拒绝
提示:它的远程副本。 合并远程更改(例如“ git pull”)
提示:再次推送之前。
提示:有关详细信息,请参见“ git push --help”中的“关于快进的注意事项”。
子项退出,值1-“

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

  • 如果您没有将任何内容提交回git,那么值得尝试一下,因为通过避免多次拉动可以节省空间/作业执行时间。
  • 如果您退回任何东西,则跨多个作业共享单个git存储库不是一个好主意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM