![]() |
1
6
是的,这是可能的。参见 Does Subversion have Changesets? 来自官方常见问题解答。
通常首先测试测试环境中的当前状态是否编译,然后检查是否编译。 您可以使用 pre-commit hook 运行测试,在这种情况下继续签入。 |
![]() |
2
4
是的,您可以一次签入多个文件,这只会使修订增加1。 在您的第二个问题中,我不认为您的意思是“编译”,因为修订控制系统不关心它们控制的代码是否可编译。我认为你的意思是“承诺”。在这种情况下,答案是颠覆提交是原子的。他们要么完全工作要么完全失败。尝试多文件提交是不可能的,并且某些文件成功,但其他文件则不行。提交失败不会增加修订号。 |
![]() |
3
2
修订号为 原子的 这意味着它适用于一次提交所做的全部更改,每次增加一个修订号。 无论是否编译,修订号都会增加,因为Subversion不知道您的特定技术堆栈,也不与之关联,以确定是否成功构建。 如果不在本地编译,您通常不会提交。如果你这样做了,你就“破坏了建筑”,应该把钱投进“基蒂”队。;-) |
![]() |
4
2
Subversion提交是事务性的。要么整个提交成功,要么整个提交失败。如果提交成功,则修订号将递增。所以,不管提交包含多少文件,整个提交都会导致修订号增加1。 Subversion无法知道代码是否编译。因此,如果提交了损坏的代码,那么提交了损坏的代码,但修订号仍然在增加。你不能撤销承诺(至少,不容易,也不会造成相当大的不便)。 如果您需要一个构建服务器,我可以推荐 JetBrains TeamCity . TeamCity附带了一个允许您执行“预测试提交”的VisualStudio插件。也就是说,您将代码提交到teamcity build服务器,该服务器生成代码。如果(并且仅当)构建成功,那么TeamCity会将您的更改提交给您的Subversion。如果构建失败,那么TeamCity会通知您,并且不提交代码。它可以很好地工作,有助于防止损坏的构建被破坏。) |
![]() |
5
1
有些版本控制系统对每个文件使用一个版本号。Subversion对整个存储库使用一个修订号。执行提交时,可以让Subversion提交对单个文件、多个文件,甚至是自上次签出后更改的每个文件所做的更改(请参见
Subversion不知道代码是否编译,所以没有任何东西阻止您签入错误的代码。您可以使用Subversion来存储任何类型的文件,而不仅仅是源代码,因此Subversion不会尝试验证您签入的任何文件的功能(因为尝试“构建”一个包含文本文件的存储库是没有意义的,并且服务器没有可靠的方法来猜测您的构建系统或如何编译代码)。也就是说,可以告诉Subversion服务器在尝试提交时但在处理事务之前运行脚本(称为 预提交挂钩 )有些人将此功能与试图构建源代码(包括传入更改)的脚本一起使用。如果脚本无法构建源代码,它将返回一个错误,Subversion将拒绝事务(在您结束时,您将看到提交操作失败)。自动生成源代码并不是默认情况下嵌入到Subversion中的代码,但是如果您感兴趣,添加它并不太困难。 更多信息,我强烈建议阅读(免费)官方颠覆书籍 "Version Control with Subversion" . 这是一个简单的阅读,包含几乎所有你想知道的关于颠覆,并有很多例子。 |