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