mid*_*iby 42 git ssh git-submodules
我在使用包含多个子模块的git存储库时遇到了一些麻烦.
使用命令构建了超级git存储库
mkdir projectname
cd projectname
git init
git submodule add ssh://myusername@server/pathtorepos
Run Code Online (Sandbox Code Playgroud)
当一个不同的用户("otheruser")然后克隆超级存储库时,一切似乎都有效.但是,是时候访问子模块了
git submodule init
git submodule update
Run Code Online (Sandbox Code Playgroud)
git尝试使用"myusername"而不是"otheruser"克隆子模块.
如何解决这个问题呢?
Mar*_*air 41
如果可能,最好确保该.gitmodules文件包含可由任何人克隆的存储库的URL,通常是a git://或http://URL.然后,具有SSH访问权限的用户可以在克隆后更改为子模块,并将URL更改remote.origin.url为指向具有其用户名的SSH URL,例如:
cd my-submodule
git remote set-url origin otheruser@server:/pathtorepos
Run Code Online (Sandbox Code Playgroud)
即使在当前情况下,其他用户也应该能够这样做. 更新: Chris Johnsen在下面指出,.gitmodules如果省略用户名并且存储库的所有用户都具有SSH访问权限,则使用SSH URL也是合理的- 如果它们在本地不同,则需要添加与上述类似的用户名和远程.
请注意,URL .gitmodules仅在初始化子模块时使用.初始化子模块设置的配置值submodule.<SUBMODULE-NAME>.url主项目无论在承诺.gitmodules-这是将在第一子模块的更新中使用的值.在初始化和更新子模块之间,您还可以使用以下命令更改将用于第一次更新的URL:
git config submodule.my-submodule.url otheruser@server:/pathtorepos
Run Code Online (Sandbox Code Playgroud)
实际上,如果第一次更新失败,您可能需要这样做.一旦子模块第一次更新,您需要更改的URL是origin在子模块中定义的URL - 此时,submodule.my-submodule.url如果您可能正在删除并重新设置主项目中的配置值,那么它是唯一有用的更新子模块.
Ikk*_*kke 12
另一个用户必须更改.git/config文件以将用户名更改为他自己的用户名.这样,git使用正确的用户连接到服务器.
[submodule "path/to/module"]
url = ssh://otheruser@server/pathtorepos
Run Code Online (Sandbox Code Playgroud)
chr*_*own 10
不要使用绝对 URL!在一个开源项目中,我们在 .gitmodules 文件中输入一个相对 URL。这将导致 git 根据父项目的 URL 模式克隆的 URL 克隆子模块 URL。使用相对路径巧妙地避免了完全指定协议(https、ssh)和用户名。例如:
[submodule "my/tests/schemas"]
path = my/tests/schemas
url = ../my-schema
Run Code Online (Sandbox Code Playgroud)
ps 发布后我意识到我的答案是一个骗局,这是您应该使用的来源:Automatically access git submodules via ssh or https
| 归档时间: |
|
| 查看次数: |
39817 次 |
| 最近记录: |