1

我已经在 git 中建立了一个实验分支,但是我正在尝试使用不同的库来实现一个功能的几个不同的实现。我想保留这些记录,作为我自己对该方法/库的文档。我的前 git 直觉是注释掉之前的实验 --- 但是在 git(或通常的版本控制)中处理多个实验的最佳方法是什么?

编辑我应该澄清这些通常是一小段代码(实际上是功能的一部分),也许只有 3-10 行长。例如,使用getenv("HOME")vs. wordexpon ~;使用strcpyvs. memcpy_ 因此,它们可能有很多,即使是相对简单的功能的每一步都有替代方案。

作为第一次尝试,我为每个版本创建了一个不同的分支——但这很快就会变得难以管理。

我目前的猜测是:

  1. 实施第一个实验
  2. 提交它
  3. 删除第一个实验
  4. 实施第二个实验
  5. 提交它

然后我可以查看日志以找到特定的实验。EDIT日志条目将被注释并注明日期。

(实际上,我可能想在处理第二个实验时注释掉第一个实验,以便我可以轻松引用它 - 然后在提交第二个实验之前将其删除)。

这是一个好的工作流程吗?有没有更好/标准的方法?非常感谢您分享您的经验!

4

2 回答 2

2

使用分支是正确的方法。它不应该变得难以管理。这正是 git 闪耀的地方。分支一个提交,用一个解释正在发生的事情的名称(例如git checkout -b featureX_fooLib),处理它,然后分支你最初为下一个测试分支的同一个提交(例如git checkout -b featureX_barLib a41f38),并在那里处理下一个示例。您还可以在开始任何这些分支之前标记您所在的位置git tag featureX_libTestsBase- 然后对于每个新分支使用它作为新起点 - git checkout -b featureX_bazLib featureX_libTestsBase

我不想在我的代码中的其他地方出现杂乱无章的东西,所以我不想在每个新分支中提交已注释掉的旧代码版本,但这并不意味着我不会这样做;我只是不希望它成为barLib提交的一部分。您可以做的一件事是 - 从fooLib分支的工作最终提交中,保存文件的副本,并且不要将其添加到 git。现在,当您签出新barLib分支时,它将作为未跟踪文件存在。你也可以——从新的barLib分支——简单地用git show featureX_fooLib:filename >filename. 现在你可以进去,注释掉那一点,开始工作,然后简单地为每个新的提交添加新的东西。这可能是两全其美。

于 2013-05-17T19:22:23.887 回答
1

每个实验保留一个分支并给它们合适的名称,甚至可能给它们“命名空间”(即git checkout -b experiments/testing-algorithm-A)。最初,这些分支将仅存在于您的本地存储库中,但您可以将它们推送到origin或不同的存储库,以便您拥有实验的冗余副本,以防万一......

于 2013-05-17T19:19:38.393 回答