[英]Local git config in git submodule
我的存儲庫結構:
repo_a
└── repo_b
└── .gitconfig
repo_b
是一個子模塊。
.gitconfig
:
[alias]
b = branch
如何添加.gitconfig
的路徑,以便只有repo_b
可以使用它?
預期輸出:
$ cd repo_a
$ git b
git: 'b' is not a git command. See 'git --help'.
$ cd repo_b
$ git b
* master
編輯#1:
@jthill 和 @bk2204 的回答很好。
他們描述了如何使用以下方法訪問子模塊的配置文件:
git rev-parse --git-path config
我想指定我想要什么。
我想在變化.gitconfig
文件repo_b
由git的跟蹤。 這樣當只克隆repo_b
我也可以訪問相同的.gitconfig
。
@jthill 的解決方案似乎確實可行。 然而,它似乎也很容易出錯,我必須為 git 中的每一個可能改變.gitconfig
更改添加一個鈎子。 例如git pull
、 git checkout
、 git merge
。
因此,我的問題將有兩部分:
repo/.gitconfig
更改並將其用作本地配置文件?我不認為這是可能的:
閱讀與 submodules 配置相對應的 Git 手冊部分,似乎有 2 個可能的選項是:
config
的文件.gitmodules
文件中添加內容我試圖在這兩個文件中添加別名,但別名沒有生效。
編輯:
實際上,現在我正在花時間思考,這是有道理的,因為 git-submodule 的代碼不是為了您將從子模塊中運行 git 命令而編寫的,而是直接從超級項目。
如果您從子模塊中為子模塊運行 git 命令,那么您就沒有使用子模塊功能。 在這種情況下,最好在超級項目中創建一個普通的 repo,並將其路徑添加到超級項目的.gitignore
文件中。 可能更好的是學習處理來自超級項目的子模塊。
如果您正在為子模塊尋找等效的.git/config
,那么找到它的最簡單方法是從repo_b
運行git rev-parse --git-path config
。 這是為本地存儲庫設置配置的最簡單方法。
您不能將.gitconfig
文件放入存儲庫並期望它被使用; 在存儲庫中共享配置是不安全的,因此 Git 不允許這樣做。
如果要使用git config
編輯本地配置,可以通過更改為repo_b
。
作為一個冒煙的測試,你可以讓使用 repo 的人做
cat .gitconfig >>$(git rev-parse --git-dir)/config
這會將您的配置附加到存儲庫設置中。 為了更安全的版本,
sed -si '/^# --repo-b-config--$/,/^# --repo-b-config--$/d; $r .gitconfig' \
$(git rev-parse --git-dir)/config
並在特殊文件的頂部和底部有# --repo-b-config--
行。
Git 故意不允許 fetch 覆蓋管理選擇。 沒有辦法讓 fetch 篡奪任何東西。 您的存儲庫是您的。 您決定其中發生的事情,這意味着除非您自己為他們建立路徑,否則其他人都無法偷偷進入。 您可以在結帳時運行任意命令來更新本地配置或其他任何內容,但是在您的存儲庫中,在您管理的每個存儲庫中(例如,包括您使用git clone
或git init
或git submodule update --init
創建的每個存儲庫)您控制這些命令是什么。
因此,如果您想在每次結帳后運行上述sed
,請將(可能已修復的版本)放入該存儲庫的hooks/post-checkout
,您將擁有所需的內容。
出於安全考慮,我沒有實現此功能。
我決定在 JSON 中使用一個單獨的配置文件並將我需要的值存儲在那里。
因此,我可以在需要時解析配置文件,而不是使用 git。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.