2011-06-05 83 views
2

我的目標是儘量減少本地克隆我的網站+數據庫所需的步驟。鉤子創建/添加數據庫轉儲文件存儲庫上git拉

我在網絡服務器和本地克隆上有一箇中央git 存儲庫。當我在本地機器上獲取更新時,不僅應該從遠程存儲庫獲取最新的文件版本,還應該在此Web服務器上運行一個腳本來轉儲實時數據庫,並在傳遞之前將其添加到存儲庫。

我的猜測是,我需要以下操作在遠程機器上,當我火在本地機器上的git拉交付倉庫前發生:

  • 創建數據庫轉儲文件,例如dump.sql(由exectuting的mysqldump)
  • 添加dump.sql到存儲庫
  • 提交dump.sql到存儲庫

...,然後才交付拉到本地機器。

我應該使用什麼樣的git鉤子? 我也很感謝這種情況下的任何額外的經驗。

回答

0

git help hooks列出了鉤子的類型以及它們是如何工作的,但是沒有一個鉤子可以用來做你想做的事情(你需要的東西類似pre-upload,它將由git-upload-pack執行)。

但是,你可以圍繞git-upload-pack執行必要的操作在服務器上創建一個包裝腳本,然後執行真正git-upload-pack命令:

  1. 找到git-upload-pack可執行
  2. 其重命名爲git-upload-pack.real
  3. 創建一個名爲git-upload-pack的新腳本,該腳本在PATH的某處執行以下操作:
    1. u SE中的論點找到了Git倉庫
    2. cd到Git倉庫
    3. 如果hooks/pre-upload存在,並且是一個可執行文件:
      1. 來看,它
      2. 如果掛鉤退出與非零狀態:
        1. 打印錯誤消息向標準錯誤
        2. 出口具有非零返回值
    4. 運行git-upload-pack.real與原來的命令行參數
  4. 建立在你的Git倉庫一個hooks/pre-upload腳本,做你想要
+0

我的話非常好奇的想法什麼;你能提供關於如何編寫'git-upload-pack'的包裝的建議嗎?我搜索了Google,並且答案稀少到不存在。你是否指向'.gitconfig'文件中的包裝器,或者只是確保包裝器在環境執行路徑中的優先級較高的位置? – 2012-11-13 17:40:48

+0

@ Pauld'Aoust:看到更新後的答案 – 2012-11-13 22:55:28

+1

謝謝,我懷疑它是裸露的那樣:-)現在試圖找出如何將它隔離到特定的回購站... – 2012-11-19 18:49:58