【问题标题】:Git submodules using relative urls使用相对 URL 的 Git 子模块
【发布时间】:2011-12-01 16:16:56
【问题描述】:

我使用 git (TortoiseGit 1.7.5.0) 并有一个带有子模块的仓库,这些子模块通过绝对路径以某种方式引用:

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

虽然超级存储库被克隆为 ssh://user@localhost/super,但用户名不应进入每个子模块 url,因为不同的用户应使用自己的凭据处理代码。
当拉/推子模块时,我必须输入我的登录名(不需要密码,因为我正在运行 Pageant):用户名没有通过命令行传递给 TortoisePlink。

在网上冲浪时,我发现有几篇文章提到子模块的相对 url,但显然这种方法不适用于 TortoiseGit:我尝试了几种格式 - 程序经常崩溃。 无论如何,我成功地采用了如下格式:

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

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

我查看了其他选项,包括:

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

  2. 关注subtree merge strategy(建议here)。 这看起来是个不错的方法。

一种可行的解决方法是使用“非标准”URL 初始化子模块,如 git Submodules Explained 末尾所述(链接位于 here)。

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

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

【问题讨论】:

标签: git tortoisegit git-submodules


【解决方案1】:

实际上,相对 url 已经可以在 msysgit 上正常工作了。我已经将它从 1.7.7.1 升级到 1.7.8,并且崩溃消失了。伟大的! :)

【讨论】:

    【解决方案2】:

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

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

    您可以在此处阅读有关 contrib “git subtree”的信息:https://github.com/git/git/tree/master/contrib/subtree (一定要检查 git-subtree.txt)

    此外,由于您标记了 tortoisegit,您可能有兴趣知道我正在努力为 tortoisegit 叉子中的子树提供支持https://github.com/johnb003/TortoiseGit/tree/subtree-add

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-19
        • 2018-12-19
        • 1970-01-01
        • 2015-11-25
        • 2015-04-24
        • 2013-04-07
        • 1970-01-01
        • 2021-07-23
        相关资源
        最近更新 更多