我需要一個「機器人用戶」通過一些腳本與git裸遠程存儲庫交互。這裸露的回購被稱爲中央回購。鏡像git非裸存儲庫
這次,這個機器人用戶有自己的本地存儲庫,這不是一個裸倉庫(他必須檢出分支,合併分支......)。但每天晚上,當他起牀工作時,他需要在本地有一個完美的中央回購鏡像(除了主人以外,每個分支都可以進化,可以創建一些新的分支......)。
這樣做的最好方法是什麼?
我需要一個「機器人用戶」通過一些腳本與git裸遠程存儲庫交互。這裸露的回購被稱爲中央回購。鏡像git非裸存儲庫
這次,這個機器人用戶有自己的本地存儲庫,這不是一個裸倉庫(他必須檢出分支,合併分支......)。但每天晚上,當他起牀工作時,他需要在本地有一個完美的中央回購鏡像(除了主人以外,每個分支都可以進化,可以創建一些新的分支......)。
這樣做的最好方法是什麼?
不幸的是,這並不像前面的答案那樣直截了當,因爲git pull
僅將更改合併到當前分支中。
你的機器人需要做的第一件事是git fetch
- 雖然這是事實,一個git pull
會(默認),導致這種情況發生,我建議做fetch
直接以避免潛在的,令人困惑的副作用。
當您執行fetch
時,您將獲得的配置取決於remote.central.fetch
配置選項(對於名稱爲central
的遠程,如您所示)。一個clone
(假設你沒有指定像mirror
,single-branch
或depth
不no-single-branch
到clone
命令)後的默認設置將取所有分支的歷史,並且將更新遠程分支裁判(如refs/origin/central/master
指示在central
上的master
分支的條件)。
如果你堅持這一點,那麼你的本地裁判仍然不與遠程同步。這是否是一個問題取決於你的機器人在做什麼。這裏有很多排列......可能你的機器人在fetch
之前有本地變化,如果有的話,你想要怎麼處理它們?您的機器人會在fetch
之後進行更改,最終會推動這些更改嗎?再加上任何數量的「如果你希望歷史出來看起來像X,做Y」的考慮。
我會說,如果你的目的是把所有的地方分支機構,以反映central
對應的分支,有兩種基本方法:
1)保持在默認設置的Refspec,然後遍歷分支更新本地裁判以匹配遠程。這使您有機會處理任何本地更改(通過將它們合併或重新分配到分支歷史記錄中),但需要大量的腳本。
2)將refspec改爲看起來像在鏡像克隆上。 (我明白這就是你所得到的,以及你是如何看待這個問題的。)這可能是有風險的,因爲本地更改可能會被破壞,而且你仍然必須識別在central
上被刪除的任何分支。這裏的設置將類似於
git config remote.central.fetch +refs/*:refs/*
這是非常簡單的(如果通過完美的鏡子你的意思是all branches, but not other refs)。
在沒有--bare
的情況下克隆裸回購會導致正常的回購。做完這一次後,你的機器人只需要
git pull
當他開始工作。