SVN - 生命周期

本章讨论版本控制系统的生命周期。 在后面的章节中,我们将看到每个操作的 Subversion 命令。


创建存储库:

存储库是开发人员存储所有工作的中心位置。 存储库不仅存储文件,还存储有关更改的历史记录。 这意味着它保留了文件中所做更改的历史记录。

"create"创建操作用于创建新的存储库。 大多数情况下,此操作只执行一次。 当您创建一个新的存储库时,您的 VCS 会希望您说出一些信息来识别它,例如您希望在哪里创建它,或者应该为存储库指定什么名称。


签出

"Checkout"签出操作用于从存储库创建工作副本。 工作副本是一个私人工作场所,开发人员在其中进行更改,然后将这些更改提交到存储库。


更新

顾名思义,"Update"更新操作用于更新工作副本。 此操作将工作副本与存储库同步。 由于存储库由所有团队共享,其他开发人员可以提交他们的更改,并且您的工作副本变得更旧。

让我们假设 TomJerry 是在一个项目上工作的两个开发人员。 两者都从存储库中签出最新版本并开始工作。 此时,它们的工作副本与存储库完全同步。 Jerry 非常高效地完成了他的工作并将他的更改提交到存储库。

现在 Tom 的 工作副本已经过时了。 更新操作将从存储库中提取 Jerry 的 的最新更改,并将更新 Tom 的 工作副本。


执行更改

结帐后,可以进行各种操作来进行更改。 编辑是最常见的操作。 可以编辑现有文件以从文件中添加/删除内容。

可以添加文件/目录。 但是这些文件/目录不会立即成为存储库的一部分,而是将它们添加到待处理的更改列表中,并在提交操作后成为存储库的一部分。

同样可以删除文件/目录。 删除操作会立即从工作副本中删除文件,但实际删除的文件会添加到挂起的更改列表中,并在提交操作后对存储库进行更改。

"Rename"重命名操作更改文件/目录的名称。 "Move"移动操作用于将文件/目录从存储库树中的一个位置移动到另一个位置。


查看更改

当您签出工作副本或更新工作副本时,您的工作副本将与存储库完全同步。 但是当您对工作副本进行更改时,它会变得比存储库更新。 在"提交"操作之前检查您的更改是一个很好的做法。

"Status"状态操作列出了对工作副本所做的修改。 正如我们之前提到的,每当您在工作副本中进行更改时,所有这些更改都会成为待处理更改列表的一部分。 并且"状态"操作用于查看待处理的更改列表。

"Status"状态操作仅提供更改列表,但不提供有关更改的详细信息。 可以使用 diff 操作来查看对工作副本所做的修改的详细信息。


修正错误

假设有人对他的工作副本进行了更改,但现在,他想丢弃这些更改。 在这种情况下,"revert"还原操作会有所帮助。

还原操作还原对工作副本所做的修改。 可以还原一个或多个文件/目录。 也可以恢复整个工作副本。 在这种情况下,"revert"还原操作将破坏待处理的更改列表并将工作副本恢复到其原始状态。


解决冲突:

合并时可能会发生冲突。 "Merge"合并操作会自动处理可以安全完成的所有事情。其他一切都被视为冲突。 例如,"hello.c" 文件在分支中被修改并在另一个分支中被删除。 这种情况需要一个人来做决定。 "resolve"操作用于帮助用户找出问题并告知 VCS 处理冲突的方式。


提交更改

"Commit"提交操作用于将更改从工作副本应用到存储库。 此操作会修改存储库,其他开发人员可以通过更新他们的工作副本来查看这些更改。

在提交之前,必须将文件/目录添加到待处理的更改列表中。 这是等待提交更改的地方。 通过提交,我们通常会提供一条日志消息来解释为什么有人进行了更改。 此日志消息成为存储库历史记录的一部分。 提交是一个原子操作,这意味着要么整个提交成功,要么回滚。 用户永远不会看到半完成的提交。