将子树合并与 git 中的稀疏结帐结合起来

问题描述 投票:0回答:3

我正在尝试在 git 中模拟 svn:externals。在项目“A”中,我需要将库“B”下拉到“A”的子文件夹中。 A 和 B 都是单独的 git 存储库。我知道我可以通过子模块或子树合并来做到这一点。然而,让事情变得更加复杂的是,我需要将“B”的子文件夹拉到“A”中,而不是整个项目,因为它是一个我需要直接导入的Python模块,并且那里不能有根目录结构否则无法导入。

使用 svn:externals 可以很容易地做到这一点。使用 git 似乎很复杂甚至不可能。

这是一个例子:

项目B:

-B
  - src
    __init__.py
 - test
   ...

项目A:

- A
   - src
     A.py (imports B)
     - B (partial check of sub folder 'src' as name 'B')
        __init__.py
   - test
     ...
python git
3个回答
0
投票

B(库)也必须是超级模块,其中包括子模块“python module”

您选择了错误的工具并离开了比任务所需更高的抽象层


0
投票

与其通过调整 git 来解决这个问题,为什么不直接在任何地方安装 B,并告诉 A 在哪里找到要包含的子模块呢?如果你只是添加到

sys.path
包含相关B子模块的文件夹,你就可以回家了。


0
投票

Git 基本上是要么全有要么全无。您最好的选择是在其他地方克隆该模块,然后符号链接您想要的目录,或者使用

sys.path

- A
   - src
      - B symlink to ../../B/
- B

如果您关心子模块克隆的大小,并且不需要提交它,那么您可以在克隆时使用

--depth=1
来忽略历史记录。

不幸的是,您无法克隆子文件夹。您最多可以使用

git-filter-branch
从存储库中删除除选定子文件夹之外的所有内容。

© www.soinside.com 2019 - 2023. All rights reserved.