我在運行測試一個CI方框,因爲 修改的文件。爲了加速這一過程,我只是在做一淺克隆: 的Git找到一個淺克隆
git clone --depth 1 [email protected]:JoshCheek/some_repo.git
假設所有的測試都通過了,我想觸發在管道中的下一個步驟。觸發什麼是基於哪些文件在最近的和部署(參考d123456
)和我剛測試的urrent ref之間發生變化(參考文獻c123456
)。如果我已經做了一個正常的克隆,我可以發現這樣的:
git diff --name-only d123456 c123456
但是我的克隆很淺,所以它不知道那些提交。我發現我可以使用git fetch --depth=n
來獲取更多的歷史記錄,但我只知道SHA,而不是SHA的深度。下面是一組的方式,可以大概回答這個問題:
# hypothetical remote diff
git diff --name-only origin/d123456 origin/c123456
# hypothetical ref based fetch
git fetch --shallow-through d123456
git diff --name-only d123456 c123456
# hypothetical way to find the depth I need
depth=`git remote depth-to d123456`
git fetch --depth "$depth"
git diff --name-only d123456 c123456
否則好像我可能會寫一個循環,並保持調用--deepen
直到我的歷史包含了承諾。這看起來很痛苦(意味着寫/維護令人討厭)和昂貴(意味着緩慢,記住淺克隆的目的是爲了降低這個成本)。
哦,很好,我完全錯過了!可悲的是,似乎Github不支持它,當我嘗試它說'致命的:服務器不支持 - 淺 - 排除':( –
你可以進入最後一個筆記的更多細節?它不是我清楚什麼參考克隆是(你是說一個完全克隆的回購緩存在CI服務器上?) –
是的:有了參考克隆,你運行'git clone --reference [options] ',Git調用另一個Git在URL像往常一樣,但後來借用或複印件(請參閱'--dissociate')從參考克隆的對象,而不是整個網絡。測量上一個真正的項目複製它們,我修剪克隆掛鐘時間從近兩年(這涉及到一些相當大的倉庫) –
torek