我正试图在git中模仿svn:externals。在项目'A'中,我需要将库'B'下拉到'A'的子文件夹中。 A和B都是独立的git repos。我知道我可以用子模块或子树合并来做到这一点。但是,为了进一步复杂化,我需要将'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
...
答案 0 :(得分:0)
B(库)也必须是超级模块,其中包括子模块“python模块”
您选择了错误的工具并留在更高的抽象层,而不是任务
答案 1 :(得分:0)
不是通过调整git解决它,为什么不在任何地方安装B,并告诉A在哪里找到要包含的子模块?如果你只是添加sys.path
包含相关B子模块的文件夹,你就可以回家了。
答案 2 :(得分:0)
Git主要是全有或全无。您最好的办法是将模块克隆到其他位置,并使用符号链接所需的目录,或使用sys.path
。
- A
- src
- B symlink to ../../B/
- B
如果您担心子模块克隆的大小,并且您不需要提交它,那么您可以在克隆时使用--depth=1
来忽略历史记录。
很遗憾,您无法克隆子文件夹。除了选定的子文件夹之外,您最多可以使用git-filter-branch
删除repo中的所有内容。