代码之家  ›  专栏  ›  技术社区  ›  Paul Alexander

具有多个项目的服务器的GIT存储库布局

git
  •  95
  • Paul Alexander  · 技术社区  · 16 年前

    \main
        \ProductA
        \ProductB
        \Shared
    

    然后

    svn checkout http://.../main/ProductA
    

    作为git的新用户,我想在提交到特定的工作流之前探索一下该领域的一些最佳实践。据我所知,git将所有内容存储在项目树根目录下的一个.git文件夹中。所以我可以做两件事中的一件。

    1. 为每个产品设置一个单独的项目。
    2. 建立一个单一的大型项目并将产品存储在子文件夹中。

    产品之间存在依赖关系,因此单个大型项目似乎是合适的。我们将使用一个所有开发人员都可以共享代码的服务器。我已经通过SSH实现了这一点&还有我喜欢的那部分。然而,SVN中的存储库已经有很多GB的大小,所以在每台机器上拖拽整个存储库似乎是个坏主意——特别是因为我们要为过多的网络带宽付费。

    我可以想象Linux内核项目存储库同样大,所以必须有一个适当的方法来处理Git,但我只是还没有弄清楚。

    对于使用非常大的多项目存储库,有什么指导方针或最佳实践吗?

    2 回复  |  直到 13 年前
        1
  •  65
  •   Community Mohan Dere    9 年前

    在以下方面,指导方针很简单: Git limits

    一切 在一个巨大的git回购中,但构建一个小型回购作为主要项目,它将引用其他回购的正确承诺,每个回购代表一个项目或其自身的公共组件。


    OP Paul Alexander comments :

    这听起来类似于subversion提供的“externals”支持。
    我们尝试了这个方法,发现在外部不断更新版本引用是非常麻烦的,因为这些项目是同时开发的,并且相互依赖。还有别的选择吗??

    • 直接从主项目中开发子项目(如中所述) True Nature of submodules
    • 或者你在次级回购中引用 origin 对于其他地方正在开发的相同的次级回购:从那里你只需要从该次级回购中提取其他地方所做的更改。

    在这两种情况下,您都不能忘记提交主项目,以记录新的配置。此处没有要更新的“外部”属性。整个过程更加自然。

    老实说,这听起来像是一个真正的痛苦和任何需要开发人员做一些手动每次只是将是一个经常性的错误源维护。
    我想我会考虑在超级项目中使用一些脚本来实现自动化。

    老实说,你可能是对的。。。直到最近 Git release 1.7.1
    git diff git status

    也就是说:

        2
  •  2
  •   Andre    9 年前

    super-repo
    +- module-a-repo
    +- module-b-repo
    
    gits clone url-super-repo
    gits commit -a -m "msg"
    

    Repo-per-project具有组件化和使用Maven等工具简化构建的优势。 Repo-per-project通过限制开发人员正在更改的内容的范围(垃圾的错误提交)增加了保护。