我有一个git存储库设置了几个子模块,它创建了一个.gitmodules
文件,它是父存储库中的跟踪文件。但是,还有其他开发人员想要在此存储库上工作,并检查子模块。但是目前远程子模块存储库的URL包含我的用户名;在.gitmodules
文件中它是这样的:
[submodule foo]
path = sub/foo
url = https://[email protected]/git/foo.git
显然其他开发人员无法从example.com
获取myuser
(他们没有我的密码);我怎样才能拥有一个多个开发人员可以拉/推的主存储库,并允许他们单独访问子模块(设置他们在子模块主机服务器上共享的单个用户名可以工作,但不是很好的用户管理) ?
如果我理解正确,您将通过HTTPS使用HTTP基本身份验证,以仅允许特定开发人员访问存储库。在这种情况下,您可以提交一个类似于的.gitmodules
:
[submodule foo]
path = sub/foo
url = https://example.com/git/foo.git
...即没有用户名,然后告诉每个开发人员将他们的用户名和密码放在他们的~/.netrc
文件中。 (如果你使用的是Windows,那么就有some good advice on that here。)一个简单的.netrc
文件可能如下所示:
machine example.com
login myusername
password areamandyingtotellsomeonehiscoolpassword
更新:不涉及使用.netrc
的替代方案如下:
再次,从.gitmodules
中的URL中删除用户名并提交并推送该更改。当某人克隆存储库时,他们将首先运行:
git submodule init
...将配置选项submodule.sub/foo.url
设置为.gitmodules
中的URL。但是,init
步骤不会将子模块克隆到位,直到你执行git submodule update
,所以你可以这样做:
git config submodule.sub/foo.url https://myuser:[email protected]/git/foo.git
... 然后:
git submodule update
使用正确的用户名克隆子模块。请注意,然后您的HTTP身份验证的用户名和密码将存储在您的git配置中。
实际上,您可以在.gitconfig
中指定子模块的“相对”路径:
[submodule foo]
path = sub/foo
url = ./git/foo.git
此URL将引用与存储库本身相同的主机(https://example.com)。
这个线程帮助了我,但我想补充一点,在你修改文件.gitmodules的内容后,你需要执行以下命令,这样git会把它拿起来:
git submodule sync
Antonk的答案不适用于团队,因为个人的.gitconfig或.git / config不受版本控制。
但是它确实让我在.gitmodules中试验了url。
[submodule foo]
path = sub/foo
url = ../foo.git
假设子模块repo与父元素在同一个url中,我可以为我工作。
您可以使用ssh身份验证。
只需要替换它
[submodule foo]
path = sub/foo
url = https://[email protected]/git/foo.git
有了这个
[submodule foo]
path = sub/foo
url = [email protected]:git/foo.git
我和Gerrit(通过ssh)一起遇到了这个问题。 删除用户名, 所以我的.gitmodules现在看起来像这样:
[submodule "sub/module1"]
path = sub/module1
url = ssh://servername:29418/module1
你可以试试.insteadOf
,例如
git config --global url."ssh://[email protected]:29418/".insteadOf "ssh://gerrit.foobar.com:29418/"
每个开发人员必须在他们使用的每台计算机上执行此操作一次。
修改你的.gitmodules
并从url
中删除用户名:
[submodule foo]
path = sub/foo
url = https://example.com/git/foo.git
最后:
cd foo/
git submodule init
git submodule update
# Will be prompted to provide username and password