使用相对网址的Git子模块

时间:2011-12-01 16:16:57

标签: git tortoisegit git-submodules

我使用git(TortoiseGit 1.7.5.0)并拥有一个包含子模块的repo,这些子模块通过以下方式通过绝对路径引用:

[submodule "common/sub"]
path = common/sub
url = ssh://localhost/lib/common/sub

当super-repo被克隆为ssh://user@localhost/super时,用户名不应该进入每个子模块URL,因为不同的用户应该使用自己的凭据来处理代码。
当拉/推子模块时,我必须输入我的登录名(不需要密码,因为我正在运行Pageant):用户名不会通过命令行传递给TortoisePlink。

浏览网页时,我发现有几个帖子提到子模块的相对网址,但显然这种方法与TortoiseGit不兼容:我尝试了几种格式 - 程序经常崩溃。 无论如何,我成功的格式如下:

[submodule "common/sub"]
path = common/sub
url = ../common/sub

文件.git/config填充了正确的绝对网址,但在此之后TortoiseGit就崩溃了......

我已经审核了其他选项,包括:

  1. 使用 gitolite (如建议的here)或 sdorra (如建议here),但这看起来像一个过于复杂的解决方案

  2. 关注subtree merge strategy(按照提案here)。 这看起来很不错。

  3. 其中一个工作变通方法是使用“非标准”网址初始化子模块,如git Submodules Explained末尾所述(找到链接here

    我认为一些更简单的解决方法可能对我的情况有所帮助(比如在某些本地配置文件中或通过命令行提供默认登录),但我没有找到任何可行的提示。

    问题:在绝对网址中使用没有硬编码用户名的子模块的最简单方法是什么?

3 个答案:

答案 0 :(得分:2)

实际上,相对网址已经与msysgit一起使用了。我已经将它从1.7.7.1升级到1.7.8,并且崩溃了。大! :)

答案 1 :(得分:0)

而不是git子模块或子树合并策略(它有一些繁琐的工作流程需要掌握),实际上有一个git的贡献叫做“git subtree”,简化了整个过程。

这将允许您的超级项目在内部克隆子项目,如果您希望贡献,可以拆分出来。这样可以完全简化克隆,以便其他人获得您的项目,因为他们不需要处理来自不同凭据的各种存储库的额外提取。

你可以在这里阅读contrib“git subtree”:https://github.com/git/git/tree/master/contrib/subtree (一定要检查git-subtree.txt)

另外,既然你标记了tortoisegit,你可能有兴趣知道我正在努力为tortoisegit fork https://github.com/johnb003/TortoiseGit/tree/subtree-add提供对子树的支持{/ p>

答案 2 :(得分:0)

由于您使用SSH作为传输方式,因此可以使用〜/ .ssh / config设置特定主机的默认用户名:

Host git.example.org
    User my-git-account