簡體   English   中英

如何找到運行git hooks的存儲庫

[英]How to find the repository that git hooks are running for

我有兩個存儲庫A和B。

我在存儲庫A中設置了以下git config:

git config core.hooksPath <path to repository B>

當我在存儲庫A中執行git命令時,存儲庫B中的git鈎子現在運行。

從存儲庫B內部,如何獲取到存儲庫A的路徑? 這是因為許多其他存儲庫都可以設置此git config,因此存儲庫B將需要知道為其掛鈎運行的存儲庫。

注意:我的鈎子是用python編寫的。

Git設置一個環境變量GIT_DIR ,以包含從當前工作目錄到Git存儲庫的路徑(通常是相對的!)。 相對而言,此路徑只有在更改目錄之前才有用,因此,您可能希望將其轉換為絕對路徑,這取決於要在代碼中執行的操作。

Git 使用該環境變量來查找Git存儲庫目錄。 如果設置了GIT_WORK_TREE ,則將定位工作樹,否則為當前目錄或存儲庫為空。 也可以設置其他魔術Git項,例如GIT_INDEX_FILE 最好不要在不確保每個目錄都是絕對路徑的情況下更改目錄:

for name in ('GIT_INDEX_FILE', 'GIT_OBJECT_DIRECTORY', 'GIT_DIR', 'GIT_WORK_TREE'):
    val = os.environ.get(name, None)
    if val is not None and not os.path.isabs(val):
        os.environ[name] = os.path.abspath(val)
for pathspec in ('GIT_ALTERNATE_OBJECT_DIRECTORIES', 'GIT_CEILING_DIRECTORIES'):
    ...

(I離開,后兩者的代碼作為練習,特別是因為一個是; -delimited在Windows,根據文檔 )。 編輯: GIT_CEILING_DIRECTORIES已記錄為絕對文件,因此僅GIT_ALTERNATE_OBJECT_DIRECTORIES可能需要調整。 請參見此處有關如何處理每個字段的手冊頁說明。

https://git-scm.com/docs/githooks

«在Git調用一個鈎子之前,它將其工作目錄更改為裸倉庫中的$ GIT_DIR或非裸倉庫中的工作樹的根。 推送(預接收,更新,接收后,更新,推送到簽出)期間觸發的鈎子是例外,它們總是在$ GIT_DIR中執行。»

即,您可以檢查$GIT_DIR (在Python中為os.environ['GIT_DIR'] )或當前目錄(在Shell中為pwd ,在Python中為os.getcwd() )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM