Mid*_*ing 47 git git-submodules
我有一个git存储库设置了几个子模块,它创建一个.gitmodules文件,它是父存储库中的跟踪文件.但是,还有其他开发人员想要在此存储库上工作,并检查子模块.但是目前远程子模块存储库的URL包含我的用户名; 在.gitmodules文件中它是这样的:
[submodule foo]
path = sub/foo
url = https://myuser@example.com/git/foo.git
Run Code Online (Sandbox Code Playgroud)
显然,其他开发人员无法从获取example.com的myuser(他们没有我的密码); 我怎样才能拥有一个多个开发人员可以拉/推的主存储库,并允许他们单独访问子模块(设置他们在子模块主机服务器上共享的单个用户名可以工作,但不是很好的用户管理) ?
Mar*_*air 35
如果我理解正确,您将通过HTTPS使用HTTP基本身份验证,以仅允许特定开发人员访问存储库.在这种情况下,您可以提交.gitmodules如下所示的内容:
[submodule foo]
path = sub/foo
url = https://example.com/git/foo.git
Run Code Online (Sandbox Code Playgroud)
...即没有用户名,然后告诉每个开发人员将他们的用户名和密码放在他们的~/.netrc文件中.(如果您使用的是Windows,那么这里有一些很好的建议.)一个简单的.netrc文件可能如下所示:
machine example.com
login myusername
password areamandyingtotellsomeonehiscoolpassword
Run Code Online (Sandbox Code Playgroud)
更新:不涉及使用的替代方案.netrc如下:
再次,从URL中删除用户名.gitmodules并提交并推送该更改.当某人克隆存储库时,他们将首先运行:
git submodule init
Run Code Online (Sandbox Code Playgroud)
...将配置选项submodule.sub/foo.url设置为URL中的.gitmodules.但是,在init您执行之前,该步骤不会将子模块克隆到位git submodule update,因此您可以执行以下操作:
git config submodule.sub/foo.url https://myuser:mypass@example.com/git/foo.git
Run Code Online (Sandbox Code Playgroud)
... 然后:
git submodule update
Run Code Online (Sandbox Code Playgroud)
使用正确的用户名克隆子模块.请注意,然后您的HTTP身份验证的用户名和密码将存储在您的git配置中.
Ant*_*onK 30
实际上,您可以在以下位置指定子模块的"相对"路径.gitconfig:
[submodule foo]
path = sub/foo
url = ./git/foo.git
Run Code Online (Sandbox Code Playgroud)
此URL将引用与存储库本身相同的主机(https://example.com).
use*_*116 12
这个线程帮助了我,但我想补充一点,在你修改文件.gitmodules的内容后,你需要执行以下命令,这样git会把它拿起来:
git submodule sync
Run Code Online (Sandbox Code Playgroud)
小智 9
Antonk的答案对团队不起作用,因为个人的.gitconfig或.git/config不受版本控制.
但是它确实让我在.gitmodules中试验了url.
[submodule foo]
path = sub/foo
url = ../foo.git
Run Code Online (Sandbox Code Playgroud)
假设子模块repo与父元素在同一个url中,我可以为我工作.
你可以尝试.insteadOf,例如
git config --global url."ssh://YOUR_USERNAME@gerrit.foobar.com:29418/".insteadOf "ssh://gerrit.foobar.com:29418/"
Run Code Online (Sandbox Code Playgroud)
每个开发人员都必须在他们工作的每台计算机上执行一次此操作。
您可以使用ssh身份验证.
只需要替换它
[submodule foo]
path = sub/foo
url = https://myuser@example.com/git/foo.git
Run Code Online (Sandbox Code Playgroud)
有了这个
[submodule foo]
path = sub/foo
url = git@example.com:git/foo.git
Run Code Online (Sandbox Code Playgroud)