这就是我所说的“二维”:通常,Git会跟踪一段时间内对文件集合的更改(时间=单维)。
我想做的是有一个“步骤”流,这些步骤是离散表示的,并且这些步骤也会随着时间的推移进行跟踪。
我确信这仍然令人困惑,因此请允许我进一步澄清并提供我要解决的用例。
我想将编码教程作为Git存储库进行跟踪,以跟踪同一代码的多个“版本”。该教程是累积性的,每个步骤都基于上一步的代码。
所以本教程可能看起来像这样:
第1步
第2步
第3步
在任何给定时刻,我都希望能够对本教程中的任意“步骤”进行结帐。
现在,如果本教程从未更改过,您可以简单地使每个Step成为同一分支上的一系列提交,然后在提交之间来回跳转。
问题在于该教程很复杂并且会随着时间的推移而变化,我希望对步骤2中引入的文件进行错误修复,以在步骤2之后的所有步骤中更新该文件的相应部分。 / p>
现在,我已经尝试在StackExchange上发布问题之前解决用例,但这有点古怪,我希望有一个更好的解决方案。
我目前正在为每个“步骤”使用一个分支,所以我有这样的分支:
我有一个脚本,每次更新如下所示的分支时都会运行:
git checkout step-1 && git rebase master && git checkout step-2 && git rebase step-1 ...
您明白了。我正在使用Git跟踪一段时间内的分支(第一个维度),并使用脚本控制我的第二个维度(按特定顺序层叠分支中的更改)。
当前的问题是我经常遇到合并冲突,并且我担心所有重新定基将使该回购交易难以公开共享。
是否有更好/更优雅的方法来解决此用例?
答案 0 :(得分:0)
有趣的问题!
当前问题是我经常遇到合并冲突
没有办法解决。工具没有足够的信息来自动分类。如果您走那条路,即使意味着更多的提交,也要尽量减少增量。
此外,您可以构建一个程序,该程序知道如何使用最少的信息来构建每个步骤/文档,而不是为此使用分支。例如,即应用增量/差异或类似内容的脚本。不过,我认为您将无法提供更多的启发式/知识来避免获得与解决方案相同的冲突顺序;鉴于我们正在讨论的文本类型(代码,即在编码教程中进行了很多改动),但这对于其他类型的文本/项目可能是一个不错的解决方案。
现在,我认为最好(也是最简单)的是将步骤分别存储在不同的文件夹中,但是与您的Git存储库中记录的步骤有所不同。现在,无论何时进行更改,都可以通过检查差异的 差异 来轻松地验证是否正确更新了所有步骤。编写一些小脚本来自动化这些比较/更新,然后就可以开始了。看看最新版Git中的range-diff
,了解 diff的差异的外观以及如何为其着色。