一种在git中维护代码包的实用方法

时间:2017-11-03 15:50:32

标签: git

我正在开发一个项目,我们有一个从公共基础插件继承的多个插件。我们试图找到一种方法来以实用的方式使用git来实现这一目标。

Example Repo:
    OfficePlugin [directory containing several .cs files and a .csproj]
    CopyPlugin [directory with .cs files and .csproj. Class inherits from OfficePlugins]
    CutPlugin [directory with .cs files and .csproj. Class inherits from OfficePlugins]
    PastePlugin [directory with .cs files and .csproj. Class inherits from OfficePlugins]
    FontPlugin [directory with .cs files and .csproj. Class inherits from OfficePlugins]
    DecorationsPlugin [directory with .cs files and .csproj. Class inherits from OfficePlugins]

好的,所以对于这个例子,我们在这种情况下有一个名为OfficePlugin的基础项目。 (C#项目包含几个捆绑在一起的文件,但这可能是任何语言的问题。)

让我们假设我们有3名程序员从事项目工作。

Mark (Our I/O guy):
    CopyPlugin
    CutPlugin
    PastePlugin
Nancy (Out Font manager):
    FontPlugin
    FontDecorationsPlugin
Joe (The cross department integrator):
    FontDecorationsPlugin
    PastePlugin

在一个正常的git设置中,所有这些文件都在一个仓库中(据我所知),我们的程序员必须忽略他们无法控制的目录。那没关系,没问题。

但是,让我们说Joe添加了一种特殊类型的粘贴功能,当您将文本从一个文档粘贴到另一个文档时,会保留字体样式。接下来是一些提交。

Commit Log
    Commit: 12345  Author: Mark   CopyPlugin Enhancements
    Commit: 23456  Author: Nancy  FontPlugin Speed Profiling
    Commit: 34567  Author: Joe    PastePlugin Font Decoration Ability
    Commit: ABCDE  Author: Mark   Update of all I/O Plugins

此时,马克和乔意识到乔的变化是一个突破性的变化。需要回滚PastePlugin的目录以提交ABCDE,但不希望丢失FontPlugin和CopyPlugin上的更改。

我有类似的情况,除了我们有近150个插件。 150个回购(每个插件一个)看起来很疯狂,我需要一份OfficePlugin。

SubModule或SubRepo看起来可能是一个不错的选择,但是在添加或删除其他回购时,不能确保使用Bamboo进行自动构建。

可以做一些疯狂的分支方案和合并,但这听起来真的很痛苦。另一个选择是找到确切的提交并检出该目录中的每个文件。这个选项看起来很麻烦,特别是如果我们需要提交2次提交并浏览日志以查看3个月前的情况。

另一种选择可能是以某种方式标记?但我认为这与查看特定目录一样具有挑战性。

有没有一种实用的方法来处理这种情况?

1 个答案:

答案 0 :(得分:1)

我只会使用一个具有良好路径结构的repo。

要回滚这个示例中的一个插件非常简单:

cd PastePlugin
git checkout ABCDE -- .
git commit 

那就是它。

了解Google如何构建他们的git存储库(强调 y )作为灵感,尽管他们的方法是多年工作的结果。但要吸取的教训是,很可能在一个存储库中安装许多项目,并且可以通过工具(即脚本,钩子......)实现很多项目。