当使用 Git 尝试 2 或 3 个解决方案时,我们必须使用 2 或 3 个分支进行提交,这是真的吗?

Is it true that when using Git to try for 2 or 3 solutions, we have to use 2 or 3 branches with commits?

对于一个问题,我们可能想通过3种方式来解决。有时我们可以只注释掉代码并尝试这 3 种方法,但是如果我们想要 3 个工作代码的快照,并且可以在几秒钟内轻松切换怎么办? (这样 React 网站就可以“热重载”,比如向经理或同事展示这三个解决方案)。

如果我 git clone 3 次,并且根据需要编辑每个目录,我就可以做到。在这种情况下,我们根本不需要做任何提交。问题是,如果它是 React 应用程序,例如,我们必须停止服务器并在另一个目录中重新启动服务器。 (而不是动态重新加载网站...)

然后是另一种方式,创建分支

git checkout -b easy-way

并进行我们的更改和 git commit。现在,如果第二个解决方案是在解决方案 1 的基础上构建,那么

git checkout -b more-complicated-way

并进行我们的更改和 git commit

然后如果我们的第3种解决方案是基于服务器上的原始代码,那么:

git checkout 3f564c   # check the ID from the git log for the original code
git checkout -b the-third-way

然后再次进行更改和 git commit,所以现在,我们可以通过以下方式在 3 个版本之间切换:

git checkout simple-way
git checkout more-complicated-way
git checkout the-third-way

?这是让它工作的唯一方法吗?不知怎的,我觉得做这些提交很奇怪,因为可能有 console.log() 并且在每个地方都注释掉了代码。所以到git commit的时候代码还是乱七八糟的感觉怪怪的。

具体来说,

Is it true that when using Git ... we have to ...?

Is this the only way to make it work?

嗯,不。有 多种 种不同的方法,即使在 Git 中也是如此。但是您特别询问的两种方式都是(恕我直言)不错的可行解决方案,但也许可以使用一些小的(概念性的)调整。

旁注:您没有明确说明,但暗示您打算在存储库内的目录之外提供您的应用程序。我倾向于避免这样做。相反,我会将回购放在一边,并使用部署脚本将适当的文件子集移动到服务位置。这样做的好处是您可以准确地选择要提供的文件子集,而且,也许更重要的是,提供的位置更有可能是干净的。例如,当 Git 存储库处于需要手动干预的冲突操作中间时,它通常不处于可用状态。话虽这么说,但很多人都是从回购协议中服务的,而且(据我所知)它对他们有用。

至于一些想法:

  1. 服务器上的 3 个不同目录:从 Git 的角度来看,我实际上认为这是选项 #2 或 #3 的子集。我认为您不需要 3 个单独的回购副本;一个就够了。但是您仍然可以将 3 组不同的代码 部署 到服务器上的 3 个不同目录中,每个目录由不同的提交表示。如果足够简单,而不是更改端点使用的目录,您可以同时设置 3 个端点,以便观众可以毫不延迟地看到所有 3 个(甚至可以随时自己尝试每个)。
  2. 3 个不同的提交在同一个分支上:这实际上是许多人自然而然地开发代码的方式:创建一个新的分支来工作。尝试并提交它。调整它或完全重做它并进行另一次提交。 (请注意,您不必在此处注释掉之前的尝试,只需完全替换它,因为它已经保存在之前的提交中。)再调整一些并提交。如果你这样做,为了你的演示目的,你可以 git reset --hard [commit-id]git checkout [commit-id] 在你想要的特定提交的状态之间切换,并将其部署到服务目录(如果你还没有在回购协议之外服务)。
  3. 3 个不同的分支:请注意,一个分支基本上只指向一个提交 ID,因此 3 个提交是在同一分支还是不同分支上并不重要。主要区别在于,如果您使用不同的分支,您可以使用一个漂亮的文本名称来检出:git checkout cool-feature-test1git checkout cool-feature-test2 等。请注意,即使提交是在同一个分支上,通过用一个好听的名字标记提交 ID,然后只检查好命名的标签而不是提交 ID。我可能会避免在某些可能会被丢弃的东西上使用标签。如果你只是因为这个原因而要在同一个分支上标记提交,那么我会从每个提交中创建新的分支,无论如何你最终都会排在#3。

如果是我,我可能会结合#3(独立​​分支)和#1(多个端点)。我更喜欢#3,这样我就不必确切记住要切换回哪个提交 ID,而#1,这样我就可以给测试人员提供 URL,并让他们根据自己的时间提供反馈。 (如果在现场演示中部署需要一段时间,特别是如果任何代码需要编译,#1 也很好。)如果您打算对更多内容进行额外的编辑,您还可以通过#3 单独调整每个尝试。比演示后的一次尝试。

同样,这些都应该可以正常工作。我不会过分强调要走哪条路。挑一个试试,觉得有需要再调整。