如何使用Git组织编程题目解题历程?

如何组织分支?

最近在codewars上做题,我想使用git记录解题的历程
例如在做一道题的时候,可能经过一下历程

想了方法A,但是只有部分正确  -> 提交
对方法A做出修改,AC了    -> 提交
想了方法B, AC了    -> 提交
改进方法B    -> 提交
....

如果我都在同一个分支上进行提交的话

  • 不太容易找到一个特定问题的提交历史。
  • 一个问题的提交历史可能会被另一个问题的提交历史给打断(不再是连续的多个提交了),比如今天做了问题A,提交之后,过了几天又改进问题A的解法,但是这几天里我又提交了B、C等问题。

我想的一个方案是:

  • 对每一个问题都建立一个分支
  • 每个问题可能有不同的解法,对每个不同的解法可能还会有一些改进,那么再在每个问题分支上再建立解决方案的分支。

这样就没有了上面的问题。但是可能需要建立很多的分支,这有必要吗?这样方案有什么问题吗?有其他更好的组织分支的方案吗?

阅读 1.6k
avatarAI BotBETA

使用Git组织编程题目解题历程的建议

对于你的问题,有几种方法可以使用Git来组织你的解题历程。

  1. 使用特性分支:对于每个问题,你可以创建一个特性分支。在这个分支上,你可以记录所有的解题历程,包括不同的解法和改进。当你完成一个问题的解答后,可以将这个分支合并到主分支(例如mastermain)。这样,每个问题的提交历史都是连续的,不会被其他问题的提交历史打断。
  2. 使用标签:在你的主分支上,每当你开始解决一个新问题时,可以创建一个标签来标记这个问题的开始。然后,在这个标签之后的所有提交,都是关于这个问题的解答历程。当你完成这个问题后,可以再创建一个标签来标记这个问题的结束。这样,你可以通过查看这两个标签之间的提交历史,来查看一个特定问题的解答历程。
  3. 使用子模块或子树:如果你的项目变得非常大,或者你想将每个问题的解答历程分开存储,你可以考虑使用Git的子模块或子树功能。每个问题可以作为一个独立的仓库(子模块或子树),你可以在主仓库中引用这些子仓库。这样,每个问题的解答历程都在它自己的仓库中,不会相互干扰。

关于你的方案

你的方案也是可行的,即为每个问题建立一个分支,然后在每个问题分支上再建立解决方案的分支。但是,这可能会创建大量的分支,使得管理变得复杂。另外,如果你经常需要在不同的解法之间切换,或者需要比较不同的解法,那么这种方法可能会变得不太方便。

总的来说,选择哪种方法取决于你的具体需求和偏好。你可以尝试不同的方法,看看哪种方法最适合你的工作流程。

4 个回答

我觉得用Git做这样的事不是很合适,直接编写维护md文档更好一些。Git主要是用来做版本变更记录以及多人协作的,你的需求不太需要用到Git,涉及到修改的部分实际上完全可以在同一个文档中持续记录,而不是在原位置修改以后再提交变更,事实上前者才更直观不是吗?

因为 Git 的设计思路就不是以你的问题为目标,所以当然感觉怎么用都不合适。

Git 设计用来解决团队协作和版本回溯等问题,而你的问题并不涉及到这两点,所以就不合适。

你的问题似乎并不复杂,我觉得每个问题你建立一个单独的文档即可。然后在文档里记录你的提交。因为不同问题不太可能互相影响,所以用文本记录就足够了。

你这个需求适合记录在 github.issues 类似的网站或平台上, 每次有新问题就建立新 issue, 有新题解就评论对应的 issue, 别人有更好的 idea 或者是想评论也可以评论在对应的 issue, ...

这类平台的优点是既可以分隔不同的问题, 也可以保留所有人评论的顺序, 查看某条评论的历史版本, 打标签, ...; 缺点是运行题解需要自己拷贝粘贴...

既然想用 git 首先考虑的是版本控制问题。但显然你这个需求不适合 git 的模式,反而更适合在线文档,比如说飞书文档或者金山文档之类有版本控制、支持协作编辑的文档。

推荐问题