Version control 教程的版本控制设置

Version control 教程的版本控制设置,version-control,workflow,Version Control,Workflow,我正在尝试为编程相关教程设置版本控制。事实证明这是有问题的,因为有两种不同的历史: 这是本教程正在构建的项目的历史,每章都有,读者将会看到。如果我再也不打算更改教程中已经编写的章节,我可以将每个章节作为标记存储在项目历史记录中 然后还有教程本身的历史(不仅是文本,还有我在假装项目历史方面的工作)。如果我发现一个bug,我需要在第1章中返回并修复,那么在末尾添加一个新的提交是不起作用的,因为我想更改项目在该阶段“出现”的方式,即在项目历史记录中插入一个提交,并将该章的标记向前移动 到目前为止,我已

我正在尝试为编程相关教程设置版本控制。事实证明这是有问题的,因为有两种不同的历史:

这是本教程正在构建的项目的历史,每章都有,读者将会看到。如果我再也不打算更改教程中已经编写的章节,我可以将每个章节作为标记存储在项目历史记录中

然后还有教程本身的历史(不仅是文本,还有我在假装项目历史方面的工作)。如果我发现一个bug,我需要在第1章中返回并修复,那么在末尾添加一个新的提交是不起作用的,因为我想更改项目在该阶段“出现”的方式,即在项目历史记录中插入一个提交,并将该章的标记向前移动

到目前为止,我已经考虑了一些可能性——使用git分支,其中每一章都是一个分支,每当我进行更改时都会重新设置到前一章的前面;使用我插入补丁的mercurial补丁队列;或者围绕我可以放入子存储库的一组模块构建教程


我想我应该问问是否有人有过这种经验,哪些解决方案有效,哪些没有。

这就是标签的用途。标记“快照”点,然后从那里开始。如果您需要返回并更改某些内容,请这样做并更新标记。如果您不想让人们看到中间阶段,只需创建第二个存储库,并以增量方式每次签入一个“提交”标记。

与其因为对早期章节的后期修复而重写所有项目的历史记录,我宁愿将每个章节都隔离在自己的分支中,让每个
标题
代表每个章节的当前状态。
组装all教程更像是一个发布管理问题(通过从Git Repo中提取相关信息来部署教程)

然后,您可以开发教程,以实现类似的功能

(注意:如果这本书更像是你想要的电子书,那么将是一种更有趣的版本方式。)


在评论中添加了以下内容:


我正在尝试对章节的示例代码进行版本化,其中每个章节的代码都基于前一章的代码

这意味着您添加的任何错误修复都需要报告给代表其他章节的其他分支,在这种情况下,请参见:

  • (避免采摘樱桃,这通常是个坏主意)

基于CLI的版本控制的好处在于,您可以使用shell脚本构建教程示例,例如:

#!/bin/bash
mkdir example_repo
cd example_repo
git init .
touch file1
git add file1
git commit -m "Added file 1"
git checkout -b branch2
echo "New line" > file1
git commit -am "Added new line to file 1"

你明白了。它可以让你从头开始建立一个新的回购,无论你喜欢什么,中间的错误很容易修复,因为你每次都是从一个空白的板条开始。您可以将shell脚本本身置于版本控制之下,或者只是注释掉不同示例中不需要的部分。

git-rebase--interactive
可能是这里最简单的解决方案。这将允许您选择要编辑的特定提交,然后在其上重新应用所有后续提交。当然,这不应该比常规合并困难多少,这取决于您的更改有多广泛。查看git rebase手册页中关于拆分提交的部分。这将允许您出于历史原因保留原始版本,然后在历史记录中添加一个新的提交,您可以在其中移动标记。

我不确定是否遵循-如果我按照第1章中的要求标记代码,请添加更多提交,然后返回并根据第1章添加新的提交,除非我做一些诸如重定基址或合并之类的事情,否则后面的东西不会有那个修复。这是正确的。这不会有趣的。您可以选择提交(如果使用git)将其应用于所有后续标记,每一章的代码都是基于前一章的代码。@Rusky:向其他分支报告错误修复的问题以前已经解决过:请参阅我在回答中添加的链接。这是一个有趣的想法。我想知道它将如何扩展到大量的代码,但是-它可能会以大量的遗传或从项目的“真实”存储库中挑选樱桃而告终。@Rusky,根据你的评论,我想我误解了你的初衷。我的答案是基于你的教程主题是版本控制本身的使用,即分支模型等等,而不是示例代码。现在我添加了一个新的答案,以便更好地理解你的问题。决定不编辑这个,因为有人可能会发现它在其他情况下很有用。