簡體   English   中英

鏡像git非裸倉庫

[英]Mirroring a git non-bare repository

我需要有一個“機器人用戶”,可以通過一些腳本與git裸遠程存儲庫進行交互。 此裸倉庫稱為中央倉庫。

這一次,該機器人用戶擁有自己的本地存儲庫,而不是裸存儲庫(他必須簽出分支,合並分支等)。 但是每天晚上,當他醒來工作時,他需要在本地擁有中央倉庫的完美鏡像(除了master之外的每個分支都可以發展,可能已經創建了一些新分支……)。

最好的方法是什么?

不幸的是,這並不像前面的答案所建議的那樣簡單,因為git pull僅將更改合並到當前分支中。

您的機器人程序需要做的第一件事是git fetch雖然git pull (在默認情況下)確實會導致這種情況的發生,但我建議直接進行fetch以避免潛在的混淆副作用。

當你做一個fetch ,你會得到什么依賴於remote.central.fetch配置選項(用於遠程命名central為您指示)。 一后的默認設置clone (假設你沒有指定像mirrorsingle-branch ,或depthno-single-branchclone命令)將提取所有分行的歷史,並且將更新遠程分支參考文獻(例如, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM