2016-01-19 39 views
0

我正在寫一個後收到鉤,看起來像這樣:掛鉤是否在git目錄或掛鉤目錄中運行?

#!/bin/sh 
    # this file is in root.git/hooks 

    # deprecated 
    # git --work-tree=~/public_html --git-dir=~/root.git checkout -f 

    cd /home/username/www 
    git add -A . 
    git commit -m "automated commit on push" 
    # cd /home/username/root.git/hooks 
    # cd /home/username/root.git 

    #git pull x 
    #git push y 

我變成一個git回購協議add/commit,我需要回到我的裸回購和做pull/push

我應該回到鉤子目錄或只是git目錄。

+0

注意,鉤與的環境變量'$ GIT_DIR'集運行,通常以'.'或'.git',所以如果你在其他地方CHDIR必須調整或取消'$ GIT_DIR'(因此' - -git-dir ='在註釋掉的命令中)。 – torek

+0

@torek - 你可以對Jan的評論發言嗎?他似乎認爲它將以root.git/w運行'--git-dir'選項。我要測試一下。 –

回答

2
  1. 你不回到任何地方。當進程退出時,鉤子進程的工作目錄會被遺忘,因此如果將其更改爲任何內容,則完全無關緊要。

  2. 如果您想要在存儲庫上運行命令,則應該在工作樹中(如果它是非裸設備的,或者在存儲庫中是裸設備的話)。你以前在哪裏不相關。

  3. 掛鉤運行在該目錄中,您可以直接在其上發出命令。

  4. 如果你需要臨時去的地方,我會建議使用子shell:

    (
        cd /home/username/www 
        git commit -a -m "automated commit on push" 
    ) 
    # You are back wherever you were, before you opened the parenthesis 
    

    這使得腳本重定位(儘可能地;它還是需要的路徑,其他回購)。

  5. 其實,GIT_DIR也設置在掛鉤,你將需要取消設置,除了改變目錄,如果你想在不同的倉庫工作:

    (
        cd /home/username/www 
        unset GIT_DIR 
        ... 
    ) 
    

    )環境後會恢復只是作爲當前的工作目錄。

+0

我將使用你的子shell方法,但不在子shell中時它在哪裏運行? root.git,root.git/hooks還是兩者都不? (root.git是裸露的回購) –

+0

@cadegalt,'root.git',當然。在'hooks'中運行完全沒有意義。 –

+0

除了那是文件實際位於的位置。它如何知道?我猜git知道一些如何。 –