代码之家  ›  专栏  ›  技术社区  ›  Jeremy Raymond

嵌套git存储库?

git
  •  155
  • Jeremy Raymond  · 技术社区  · 15 年前

     /project_root/
     /project_root/my_project
     /project_root/third_party_git_repository_used_by_my_project
    

    这样做有意义吗 git init/add 这个 /project_root 在本地轻松管理一切,还是我必须管理 my_project 和第三方分开?

    6 回复  |  直到 4 年前
        1
  •  182
  •   Alan W. Smith vishes_shell    11 年前

    您可能正在寻找名为 submodules . 此功能可帮助您管理嵌套在主存储库中的依赖存储库。

        2
  •  35
  •   Tom Nguyen Igor Zevaka    3 年前

    Git Tools - Submodules (专业Git书籍,第二版)

    在决定如何分割回购时,我通常会根据修改回购的频率来决定。如果它是第三方库,并且您对它所做的唯一更改是升级到新版本,那么您肯定应该将它与主项目分开。

        3
  •  30
  •   Sergey Ushakov    7 年前

    我建议还有另一个解决方案: subtree merging .

    与子模块相比,它更易于维护。 您可以按常规方式创建每个存储库。

    $ git remote add -f OtherRepository /path/to/that/repo
    $ git merge -s ours --no-commit OtherRepository/master
    $ git read-tree --prefix=AnyDirectoryToPutItIn/ -u OtherRepository/master
    $ git commit -m "Merge OtherRepository project as our subdirectory"`
    

    然后,为了将另一个存储库拉入您的目录(以更新它),请使用子树合并策略:

    $ git pull -s subtree OtherRepository master
    

    我使用这种方法已经很多年了,它很有效:-)

    关于这种方法的更多信息,包括与子模块的比较,可以在这个git中找到 howto doc .

        4
  •  23
  •   crizCraig    5 年前

    /project_root/third_party_git_repository_used_by_my_project
    

    /project_root/.gitignore
    

    这将防止嵌套回购包含在父回购中,并且您可以独立使用它们。

        5
  •  13
  •   ephemient    15 年前

    git-subtree 将帮助您在一棵树中处理多个项目

        6
  •  4
  •   lachy    5 年前

    总结。

    对但是,默认情况下git不跟踪 .git

    git init/添加/project\u root以简化本地所有内容的管理,还是我必须单独管理我的\u项目和第三方项目?

    这可能没有意义,因为git具有管理嵌套存储库的功能。Git管理嵌套存储库的内置功能包括 submodule subtree

    a blog on the topic 这是 a SO question 这涵盖了使用每种方法的优点和缺点。

        7
  •  1
  •   gnud    15 年前

    我会为每个项目使用一个存储库。这样,历史就更容易浏览了。