在git中将子树合并与稀疏结账相结合

时间:2012-03-14 18:07:54

标签: python git

我正试图在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
     ...

3 个答案:

答案 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中的所有内容。