[英]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.