我正在尝试在 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
...
B(库)也必须是超级模块,其中包括子模块“python module”
您选择了错误的工具并离开了比任务所需更高的抽象层
与其通过调整 git 来解决这个问题,为什么不直接在任何地方安装 B,并告诉 A 在哪里找到要包含的子模块呢?如果你只是添加到
sys.path
包含相关B子模块的文件夹,你就可以回家了。
Git 基本上是要么全有要么全无。您最好的选择是在其他地方克隆该模块,然后符号链接您想要的目录,或者使用
sys.path
。
- A
- src
- B symlink to ../../B/
- B
如果您关心子模块克隆的大小,并且不需要提交它,那么您可以在克隆时使用
--depth=1
来忽略历史记录。
不幸的是,您无法克隆子文件夹。您最多可以使用
git-filter-branch
从存储库中删除除选定子文件夹之外的所有内容。