Git:一个文件夹中有多个子树/子模块?

标签 git git-submodules git-subtree

在本地机器上,我有几个项目导入的通用脚本,例如:

/common/
  .git/
  scripts/
    common1.py
/projectA/
  .git/
  scripts/
    A1.py (imports from common1.py)
/projectB/
  .git/
  scripts/
    B1.py (imports from common1.py)

公共(public)脚本和项目在单独的 git 存储库中进行跟踪。这对我的个人工作很有效,因为我可以克隆所有需要的 repo 协议(protocol)。当通过 git 公开项目时,我可以通过子树或子模块包含公共(public)文件(对公共(public)文件的引用显然在 B1.py 中更新):

/projectB/
  .git/
  scripts/
    common/ (subtree from common)
      common1.py
    B1.py

现在我想组装一个 super 项目(目标):

/projectC/
  .git/
  scripts/
    common1.py
    A1.py
    B1.py

使用子树和子模块我已经能够实现:

/projectC/
  .git/
  scripts/
    common/
      common1.py
    projectA_scripts/ (via subtree)
      A1.py
      common/ (via subtree w/in projectA)
        common1.py
    projectB_scripts/ (via subtree)
      B1.py
      common/ (via subtree w/in projectB)
        common1.py 
    C1.py 

然而,这是相当多余的,并且通过 sub-x 链传播更改将是乏味的。如何在保留对项目和公共(public)文件进行更新的能力的同时实现上述目标目录结构?对于它的值(value),我不希望需要将子树/子模块更改推到上游。

不需要在两个操作系统上进行独立配置的跨平台 (Windows-UNIX) 解决方案的好处。首选基于 Git 的解决方案。

最佳答案

由于您不必将那些子树/子模块内容推回,您可以考虑symlink those folders into common/ :

关于Git:一个文件夹中有多个子树/子模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17903474/

相关文章:

git - 无法使用sourcetree推送子树

Git:在不丢失历史记录的情况下将子文件夹从存储库获取到新文件夹

git - 有人真的在使用 git super/subprojects 吗?

.net - NuGet 和 Git 子模块

git - 如何将功能分支 merge 到 Git 中的分支开发?

svn - 为什么 git 子模块与 svn 外部不兼容?

git子模块更新 "no-fetch"

git - 我可以从子目录进行子树 merge 吗?

git - merge 到git中的分支而不切换到它

git - .gitattributes : does text=auto still uses core. autocrlf 检测 EOL