2011-09-02 87 views
4

我需要我的數據庫跨兩臺本地計算機同步,而不使用中間的服務器。經過一番研究,我認爲我可以使用Git掛鉤來完成我的任務。導出和導入數據庫上的Git推和

我基本上想要的是運行git pushmysqldump(並添加SQL文件,以提交)上git pullmysqlimport,並從遠程倉庫。

我找不到任何具體的鉤子。我嘗試了pre-commit鉤子,但是這並沒有在當前提交中添加SQL文件。然後我嘗試prepare-commit,但沒有運氣。

有沒有人得到這個答案?

回答

2

我會爲你的系統編寫一個包裝,也許是「commit.php」或「git-ci.sh」或其他東西。然後你可以使用bash或者perl或者python或者php或者任何你喜歡的,並且一個接一個地運行每個命令,並且完成提交。

我試圖添加到提交前提交鉤子正在運行類似的問題後,我建議這個。另外,在下游沒有「推」或「拉」鉤(我使用中央存儲庫,所以如果你有兩臺機器互相推拉)。

我有一個雙面部署腳本爲我的網站之一,我有一個很長的預提交腳本,但在Web服務器上我有一個這樣的包裝提取,然後檢查提交,輸出報告,並給出我可以選擇是否與其他服務器進行合併和rsync,等等。它取代了一個「拉」掛鉤,這可能是一個重大的安全隱患。

漢斯

+0

謝謝你的接吻。任何想法,我可以閱讀更多關於包裝? –

+0

我寫過我的PHP(調用exec()和passthru()),因爲我使用PHP最多,對我來說很簡單。只要使用任何腳本語言對你來說最簡單,可能是python,ruby,bash,perl等等。使用該語言的能力,調用git命令。例如在php中,我會調用'exec('/ usr/bin/git fetch');'在下一行緊跟'exec(「/ usr/bin/git log --name-only --format = oneline ..origin/master> {$ log}「);'然後經過一些檢查,'exec(」/ usr/bin/git merge origin/master「);' – Hans

+0

最後,你可以做這樣的passthru (「/ usr/bin/rsync --exclude'/ db_backup_svn/*'--exclude'.git'-e ssh -avzp --delete/home/website/[email protected]:/ home/website /」) ;' – Hans