注意:尽管(从已经发生的讨论中)看起来 GIT 实际上并不适合这个用例,但我已经将这个问题开放给赏金以提示更明确的答案,希望来自在 GIT 方面有丰富的经验。原始问题如下。
我有一种情况,我有大量独立的文件。所谓独立,我的意思是每个文件不依赖于它周围文件的存在、不存在或特定状态。一个很好的类比是一个图像目录,我们的工作流程允许独立创建、编辑和删除每个图像,并且在图像上完成的工作与目录中的其他图像无关。
请注意,这种独立性不仅是偶然的,而且对我们的工作流程至关重要。
这些文件中的每一个都将受益于类似 GIT 的工作流程。如果能够跟踪每个文件的更改,让人们在独立的分支中处理每个文件,然后在完成后合并他们的更改,那就太好了(因此,为了我们的类比,想象这些是 SVG 图像,您可能让艺术家绘制图像和翻译文本内容),并从使用 GIT 的其他项目访问文件。
根据我的经验,当您拥有一组都处于特定状态的文件时,GIT 非常棒。例如,当您在达到“Production Release 1.2”状态后提交 GIT 存储库时,每个文件在该提交时共享“Production Release 1.2”状态。
但是我不确定如何应用 GIT 工作流程,或者当每个文件没有也不能共享它周围的文件的状态时是否可行。您可以将每个文件放在其自己的 GIT 存储库中,但这似乎不切实际。
所以,我的问题是:
- 我对 GIT 仅适用于相关文件集合的印象是否正确?
- 如果不是,那么在逐个文件的基础上使用 GIT 的克隆/分支/合并功能的过程是什么?
更新
作为对iberbeu的回应:并不是我将版本视为XY,而是我将GIT提交视为假设存储库中的所有文件具有相同的版本或提交点(但是您定义了一个版本)。在这种情况下,GIT 存储库中的文件并不完全独立。
这里的问题是,当您使用包含所有独立文件的单个 repo 时,将其克隆到您自己的本地 repo 并开始在分支上工作。此时假定所有文件都属于该分支,即使从我们拥有的工作流程的角度来看,您只在处理一个文件。但是,现在所有这些独立文件都“顺其自然”,承担与您实际要编辑的单个文件关联的修订历史记录。
因此,Joe 可能会创建一个名为“Joe Working on Image 1”的 repo 分支。他的分支有他想要处理的图像 1,以及他不感兴趣的 10,000 个其他图像。
Jane 可能会创建一个名为“Jane working on Image 987”的相同存储库的分支。她的分支有她想要处理的图像 987,以及她不感兴趣的其他 10,000 张图像。
这很好,只要 Joe 和 Jane 不想开始在他们的分支中编辑一些其他图像。但如果他们这样做了,我们就会失去将每个图像作为独立实体进行编辑的概念模型,并且与其他图像隔离编辑。
因此,如果乔在他应该只编辑图像 1 的分支中编辑了图像 2,并将这些更改合并回 repo,我们现在将图像 2 的显式修订历史记录与图像 1 一起编辑。但是图像 1 和 2 应该完全独立。不应该有图像 2 的概念,因为它是与图像 1 一起编辑的。
所以这是问题的症结所在。GIT 是否支持它控制的文件作为独立实体的概念,其修订版与任何其他文件都不相关?或者这只能通过每个文件的单独 git repos 来实现?
更新 2
看起来子模块可能会替代拥有数千个 GIT 存储库。