我使用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就崩溃了......
我已经审核了其他选项,包括:
关注subtree merge strategy(按照提案here)。 这看起来很不错。
其中一个工作变通方法是使用“非标准”网址初始化子模块,如git Submodules Explained末尾所述(找到链接here)
我认为一些更简单的解决方法可能对我的情况有所帮助(比如在某些本地配置文件中或通过命令行提供默认登录),但我没有找到任何可行的提示。
问题:在绝对网址中使用没有硬编码用户名的子模块的最简单方法是什么?
答案 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