2010-05-03 79 views
38

我想知道是否有一個簡單的方法,即像一個簡單的cron作業,定期從遠程git存儲庫到本地只讀鏡像備份的目的?通過拉動來鏡像git存儲庫?

理想情況下,它會拉所有的分支和標籤,但主/行李箱/頭就足夠了。

我只是需要一種方法來確保如果主git服務器死亡,我們有一個備份位置,我們可以手動故障轉移到。

+0

bash腳本想法有什麼問題?你可以修改它做一次探測/拉動,然後把它安裝成cron作業,不是嗎? – Santa 2010-05-03 07:50:50

+0

該腳本將會很好。你知道每個git repo的克隆都是完整的備份嗎?所以你很可能已經有很多的回購副本了。 – 2010-05-03 08:23:34

+0

@安德魯,好點。在我們的情況中,儘管我們有例子,在任何地方都沒有克隆,也就是說我們有一些由客戶端通過FTP更新的代碼。我們使用git來跟蹤客戶正在做什麼,並且沒有克隆它的任何地方。 – corydoras 2010-05-04 07:31:40

回答

56

首先創建的鏡像

git clone --mirror [email protected]:repo.git 

然後設置一個cron作業是這樣的:

*/1 * * * * gitbackup cd /backup/repo.git && git fetch -q --tags 

這將備份每分鐘的變更。也許你不想經常這樣做。

+0

這很棒。我知道會有一個簡單的答案! (我很親密) – corydoras 2010-05-04 07:38:34

+3

什麼是gitbackup?我找不到這樣的命令(谷歌也沒有)。 – 2011-02-17 10:47:48

+7

@系統crontab中的ihor-kaharlichenko(/ etc中的那個)這是一個用於在其下運行作業的用戶帳戶。 – Zart 2011-03-13 12:05:51

-3

你有直接訪問服務器嗎?那麼你可以只是rsync.git目錄

+1

根據平臺的不同,簡單地複製git repo可能會導致問題,例如,由於權限未從源傳播到目標。克隆因此是一個更好的解決方案,因此答案爲-1。 – 2010-05-03 08:39:02

+0

rsync可以解決這個問題。此外,我經常發現拉不會拉動遙控器,暗箱和其他重要信息 – knittl 2010-05-03 08:57:07

+0

我真的不知道這個答案是如何*如此糟糕*?也許這不是最好的解決方案,但如果你可以直接訪問服務器,它絕對是一個可行的解決方案。如果你rsync直接到一個tar檔案你甚至沒有權限的問題... – knittl 2010-05-03 09:49:43

9

正如安德魯指出的,每個git倉庫的克隆都是倉庫的完整備份。也就是說,如果您想要自動備份到特定計算機的某些內容,您可以在備份服務器上創建一個裸回購,並將其與所有需要備份的分支一起推入,以便最初填充它。然後,只需在「主」回購庫上設置一個後續更新掛鉤,以便一旦有提交進入,它就會繼續前進,並將它們推送到備份回購站。不需要一個cron作業或rsync,它幾乎是一個現場拷貝。

+1

+1用於添加一般性好的解決方案(因此是一個很好的參考),但不回答問題。我們正在問如何拉動NAT,因爲我們需要通過NAT – corydoras 2010-05-04 07:46:08