簡體   English   中英

git子模塊中的本地git配置

[英]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 pullgit checkoutgit merge

因此,我的問題將有兩部分:

  1. 如何跟蹤repo/.gitconfig更改並將其用作本地配置文件?
  2. 如何為普通倉庫和子模塊實現上述功能?

我不認為這是可能的:

閱讀與 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 clonegit initgit submodule update --init創建的每個存儲庫)您控制這些命令是什么。

因此,如果您想在每次結帳后運行上述sed ,請將(可能已修復的版本)放入該存儲庫的hooks/post-checkout ,您將擁有所需的內容。

出於安全考慮,我沒有實現此功能。

我決定在 JSON 中使用一個單獨的配置文件並將我需要的值存儲在那里。
因此,我可以在需要時解析配置文件,而不是使用 git。

暫無
暫無

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

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