我正在开发一个项目,我们有一个从公共基础插件继承的多个插件。我们试图找到一种方法来以实用的方式使用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个月前的情况。
另一种选择可能是以某种方式标记?但我认为这与查看特定目录一样具有挑战性。
有没有一种实用的方法来处理这种情况?
答案 0 :(得分:1)
我只会使用一个具有良好路径结构的repo。
要回滚这个示例中的一个插件非常简单:
cd PastePlugin
git checkout ABCDE -- .
git commit
那就是它。
了解Google如何构建他们的git存储库(强调 y )作为灵感,尽管他们的方法是多年工作的结果。但要吸取的教训是,很可能在一个存储库中安装许多项目,并且可以通过工具(即脚本,钩子......)实现很多项目。