簡體   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