[英]Mirroring a git non-bare repository
我需要有一個“機器人用戶”,可以通過一些腳本與git裸遠程存儲庫進行交互。 此裸倉庫稱為中央倉庫。
這一次,該機器人用戶擁有自己的本地存儲庫,而不是裸存儲庫(他必須簽出分支,合並分支等)。 但是每天晚上,當他醒來工作時,他需要在本地擁有中央倉庫的完美鏡像(除了master之外的每個分支都可以發展,可能已經創建了一些新分支……)。
最好的方法是什么?
不幸的是,這並不像前面的答案所建議的那樣簡單,因為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
指示的條件master
分支central
)。
如果您堅持這樣做,那么您的本地裁判仍不會與遙控器保持同步。 這是否是一個問題取決於您的機器人在做什么。 這里有很多排列...在fetch
之前,您的機器人可能會進行局部更改,如果是,您要如何處理它們? 您的機器人會在fetch
后進行更改,最終將推送這些更改嗎? 加上任何數量的“如果您希望歷史看起來像X一樣,則執行Y”考慮。
我會說,如果你的目的是把所有的地方分支機構,以反映在相應的分支central
,有兩種基本方法:
1)將refspec保留為默認設置,然后遍歷分支以更新本地ref以匹配遠程。 這使您有機會處理任何本地更改(通過將其合並或重新編入分支歷史記錄),但是需要大量的腳本編寫。
2)更改refspec使其看起來像在鏡像克隆上一樣。 (我得到的感覺,這是你得到了什么,你如何措辭的問題。)這也許是危險的,因為當地的變化可能只得到打一頓,你仍然必須確定已經上刪除的任何分支central
。 這里的設置類似於
git config remote.central.fetch +refs/*:refs/*
這非常簡單(如果通過完美的鏡像,您是指所有分支,但不是其他ref )。
如果不--bare
克隆裸--bare
則將導致正常的--bare
。 完成一次之后,您的機器人只需
git pull
他上班的時候。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.