我的公司正在Linux上設置Gitolite,並且我們希望在每次提交到第二臺Linux服務器時發生崩潰的情況下爲服務器設置備份。我們如何在每次提交時備份或克隆GitoLite服務器
我們如何在每次提交時備份Gitolite服務器?有人在做這個嗎?
我的公司正在Linux上設置Gitolite,並且我們希望在每次提交到第二臺Linux服務器時發生崩潰的情況下爲服務器設置備份。我們如何在每次提交時備份或克隆GitoLite服務器
我們如何在每次提交時備份Gitolite服務器?有人在做這個嗎?
首先你不應該過分擔心git備份。 - 每個在你的項目中工作的人都會在他的盒子裏有一個完整的克隆。 - 因此備份綽綽有餘。 ;)
但是你想在每次推送後更新另一個官方存儲庫。在這種情況下,最簡單的方法可能是編寫一個小型的服務器端鉤子,它在每次推送後運行,並將更改推送到第二個存儲庫。
您可能想要使用post-receive鉤子。詳情請看here或here。
實施例:
#create repositories
git init a
git init --bare b
git init --bare c
#add the hook in "b"
echo -e '#!/usr/bin/bash\nread old new ref\ngit push ../c $ref' >>b/hooks/post-receive
chmod +x b/hooks/post-receive
#create a commit in "a"
cd a
echo foo >test
git add .
git commit -m testcommit
#push it to "b"
git push ../b master
#notice the "remote:..." output of the hook
#find the commit in "c"
cd ../c
git log
這創建三個庫。當您在a
中提交併將其推送到b
時,掛鉤也會將其推送到c
。
另一種方式來生成備份是問你的後收到鉤create a bundle(有點像this question)
!/bin/sh
git bundle create "/path/to/backup/$(basename "$PWD").bundle" --branches --tags
這是基於這樣的事實,在裸露的回購掛鉤會:詳見「how to get project path in hook script post-commit? 」。
在束的興趣和git bundle
是隻產生一個文件,哪一個更容易管理/份左右。
而這個事實就像一個(主要是隻讀的)repo,意味着你可以從該文件克隆。
這會工作:
git clone myrepo.bundle myrepo
參見:
所以這不是我正在尋找 – JMSAZ2013
您是否看到過有關如何做到這一點的示例? – JMSAZ2013
已添加示例。這應該更清楚。 – michas
你能告訴我如何推送到差異主機? – JMSAZ2013