【问题标题】:is it possible not to have extra subdirectory when using Git - submodule - sparse-checkout?使用Git - submodule - sparse-checkout时是否可以没有额外的子目录?
【发布时间】:2014-02-15 17:33:52
【问题描述】:

我想模仿 svn:externals 之类的行为:我有一个主项目,并且在另一个存储库中有一些“通用”代码。使用 SVN 我会这样做:

svn co <url>/src common

我的文件夹结构是:

repo/common/*.cpp

现在使用 git + submodule + sparse checkout 这要复杂得多,当我添加子模块时我有一个额外的子目录层;

git submodule add <url> common

现在我的文件夹结构是:

repo/common/src/*.cpp
repo/common/lib/...

通过稀疏结帐,我可以确保只签出 src 文件夹,但与 svn:externals 解决方案相比,我仍然多一层 (src):

repo/common/src/*.cpp

通用代码有更好的解决方案吗?或者有什么方法可以清理它?我知道一切都会好起来的;就是不太干净……

【问题讨论】:

    标签: git svn git-submodules svn-externals sparse-checkout


    【解决方案1】:

    您无法避免子模块中的额外文件夹,但您可以添加符号链接(即使在 Windows 上)以找到您想要的内容。

    使用它的 repo 名称添加您的子模块:

    git submodule add -b master /url/of/repo
    

    添加符号链接:

    ln -s repo/src common
    

    如果您希望您的存储库遵循其 master 分支,请不要忘记添加“-b master”。
    从 git 1.8.2 开始这是可能的:请参阅“git submodule tracking latest”。


    即使Git 2.25 and its git sparse-checkout command 也无法避免额外的文件夹级别“common”。

    【讨论】:

    • 哇,感谢有关“-b master”选项的提示!我会进一步检查...
    • @ChrisMaes 是的,它是您与子模块关联的 本地 配置。任何git submodule update --remote 都会在获取子模块上游分支之后更新子模块的内容。
    • 鉴于最近对子模块和稀疏结帐的更改,这个答案是否仍然正确?
    • @eggyal 是的。我在stackoverflow.com/a/62617098/6309 中介绍了Git 2.25 git sparse-checkout 新命令。但是在 OP 的上下文中,对于要使用的任何子模块,您仍然会有一个中间文件夹级别。
    • 好的,谢谢。在我的情况下,我有一个子模块只关注整个 repo 的一小部分,而不仅仅是想避免中间文件夹,但我想工作集现在必须包含完整的子模块。
    猜你喜欢
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 2016-02-21
    相关资源
    最近更新 更多