Git子模块URL不包括用户名?

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.commyuser(他们没有我的密码); 我怎样才能拥有一个多个开发人员可以拉/推的主存储库,并允许他们单独访问子模块(设置他们在子模块主机服务器上共享的单个用户名可以工作,但不是很好的用户管理) ?

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).

  • 它不采用相同的主机,而是采用相同的 URL,例如: ssh://user@example.com:29412/mainmodule/submodule (3认同)

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中,我可以为我工作.

  • 效果棒极了!除了超级模块克隆命令行之外,任何地方都没有主机、端口或用户名。 (2认同)

bvi*_*tor 6

你可以尝试.insteadOf,例如

git config --global url."ssh://YOUR_USERNAME@gerrit.foobar.com:29418/".insteadOf "ssh://gerrit.foobar.com:29418/"
Run Code Online (Sandbox Code Playgroud)

每个开发人员都必须在他们工作的每台计算机上执行一次此操作。


mki*_*lic 5

您可以使用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)

  • 你还在指定一个用户; 现在不是假设其他维护者拥有"myuser"帐户的密码,而是假设他们拥有`git`用户帐户的密码,不是吗? (6认同)
  • 不.Git服务器只需查找您的公钥即可与您的用户匹配.在这些服务器中,有Github,Atlassian Bitbucket Server(以前称为Stash)和Atlassian Bitbucket(SaaS版本).这很简洁,因为您在网址中没有用户名这样的问题 (2认同)