我从未使用过 VCS,所以如果我犯了任何基本错误,请纠正我。
对于我的一个项目,我选择使用 Subversion,并且一直在阅读文档。如果我理解正确,每次签入都会增加修订号。然而,这带来了一个问题。是否可以一次签入多个文件(因此增量只有一个)?另外,如果签入无法编译怎么办……修订号会增加吗?
我从未使用过 VCS,所以如果我犯了任何基本错误,请纠正我。
对于我的一个项目,我选择使用 Subversion,并且一直在阅读文档。如果我理解正确,每次签入都会增加修订号。然而,这带来了一个问题。是否可以一次签入多个文件(因此增量只有一个)?另外,如果签入无法编译怎么办……修订号会增加吗?
是否可以一次签入多个文件(因此增量只有一个)?
是的,这是可能的。请参阅Subversion 是否有变更集?来自官方常见问题解答。
另外,如果签入无法编译怎么办……修订号会增加吗?
您通常会首先测试当前状态是否在您的测试环境中编译,然后检查是否可以。
您可以使用运行测试的预提交挂钩自动执行此操作,并在这种情况下继续签入。
是的,您可以一次签入多个文件,这只会将修订版本增加 1。
在您的第二个问题中,我认为您的意思不是“编译”,因为修订控制系统不关心它们控制的代码是否可编译。我想你的意思是“承诺”。在这种情况下,答案是颠覆提交是原子的。他们要么完全工作,要么完全失败。尝试多文件提交并让一些文件成功但其他文件不成功是不可能的。失败的提交不会增加修订号。
修订号是atomic,这意味着它适用于一次提交的全部更改,一次将修订号增加一个。
无论是否编译,修订号都会增加,因为 Subversion 没有任何知识或与您的特定技术堆栈的关联,无法确定是否成功构建。
如果它不在本地编译,您通常不会提交。如果你这样做了,你就“破坏了构建”,应该把钱投入到“小猫”团队中。;-)
Subversion 提交是事务性的。要么整个提交成功,要么整个提交失败。如果提交成功,则修订号增加。所以整个提交,无论它包含多少文件,都会导致修订号增加 1。
Subversion 无法知道您的代码是否可以编译。所以,如果你提交了损坏的代码,那么你就提交了损坏的代码,但修订号仍然会增加。你不能回滚一个提交(至少,不容易,也不是没有相当大的不便)。
如果您需要构建服务器,我可以推荐JetBrains TeamCity。TeamCity 附带一个 VisualStudio 插件,可让您进行“预测试提交”。也就是说,您将代码提交到构建代码的 TeamCity 构建服务器。如果(且仅当)构建成功,TeamCity 会为您提交对 Subversion 的更改。如果构建失败,TeamCity 会通知您并且不会提交代码。它工作得很好,有助于防止令人尴尬的损坏构建:)
一些版本控制系统为每个文件使用一个修订号。Subversion 对整个存储库使用单个修订号。当您进行提交时,您可以让 Subversion 提交您对单个文件、多个文件甚至自上次签出以来已更改的每个文件所做的更改(请参阅 、 和 的svn add
文档svn revert
)svn commit
。Subversion 将提交视为原子事务;也就是说,无论您提交多少文件,所有文件都在一个操作中提交,该操作要么完全成功,要么完全失败(在这种情况下,不会修改存储库)。每次您发出提交命令时,整个存储库的修订号都会增加。
Subversion 不知道您的代码是否可以编译,因此没有任何东西可以阻止您签入错误代码。您可以使用 Subversion 存储任何类型的文件,而不仅仅是源代码,因此 Subversion 不会尝试验证您签入的任何内容的功能(因为尝试“构建”一个充满文本文件的存储库没有意义,并且因为服务器没有可靠的方法来猜测您的构建系统或如何编译您的代码)。话虽如此,只要尝试提交但在处理事务之前(称为预提交挂钩),就可以告诉 Subversion 服务器运行脚本)。有些人将此功能与尝试构建源代码(包括传入的更改)的脚本一起使用。如果脚本无法构建源代码,它会返回一个错误并且 Subversion 会拒绝该事务(最终,您会看到提交操作失败)。自动构建源代码并不是 Subversion 默认内置的东西,但如果你感兴趣的话,添加它并不难。
有关更多信息,我强烈建议您阅读(免费)官方 Subversion 书籍“使用 Subversion 进行版本控制”。它很容易阅读,几乎包含了你想知道的关于 Subversion 的所有内容,并且有很多例子。