我正在嘗試使用帶有全域提交后掛鉤的子模塊,但發現了一個問題。
描述
假設我們有兩個 git 目錄 A 和 B。A 是 B 的超級專案。
這是我在全域提交后掛鉤中的腳本。
#!/bin/sh
git -C path/to/A remote show origin
預期行為
它假設在 B 中提交后顯示有關 A 的遠程資訊。
實際行為
它顯示了我在 B 中提交后關于 B 的遠程資訊。
問題
- 我做錯了什么導致意外的結果嗎?
- 如果不是,為什么會發生這種情況?(可能是由于 post-commit hooks 的限制造成的?doc)
- 如何獲得預期的行為?
uj5u.com熱心網友回復:
Git 鉤子是因為一些 Git 命令而運行的,并且與任何內部 Git 命令一樣,它們是在指定要使用哪個特定存盤庫的環境設定下運行的。這意味著通常您不應該對其他一些存盤庫進行操作。
但是,如果您確切地知道自己在做什么,則可以取消設定各種 Git 環境變數,這些環境變數控制著 Git 正在使用的特定存盤庫、索引、作業樹和/或其他 Git 設定。請注意,您可能需要為可能的許多(以及將來更多)Git 變數執行此操作,因此如果沒有充分的理由這樣做是不明智的。
您必須始終在此處取消設定的一個特別變數是GIT_DIR. 那是:
git -C <path> ...
不起作用,因為GIT_DIR已設定,但是:
unset GIT_DIR
git -C <path> ...
將洗掉GIT_DIR設定,后續git -C操作將起作用。請注意,通過GIT_DIR在此處取消設定,您很難對 post-commit 的存盤庫進行操作,因此在某些情況下您可能希望在子 shell 中執行此操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/523765.html
下一篇:使用git時本地更改丟失
