SVN比Git有什么优势?[关闭]


293

毫无疑问,关于程序员工具的大多数争论都归结为个人选择(由用户)或设计重点根据特定用例优化设计(由工具构建者)。文本编辑器可能是最突出的例子-可以在Windows上工作并且在Mac上可以在Mac上的Haskell中进行编码的编码器,可以实现跨平台和编译器集成的价值,因此可以选择Emacs而不是TextMate等等。

事实证明,新引入的技术真正地优于现有的选件并不常见。

版本控制系统(VCS),尤其是集中式 VCS(CVSSVN)与分布式 VCS(GitMercurial)是否真的是这种情况?

我使用SVN已有大约五年的时间,目前在我工作的地方使用SVN。不到三年前,我转到所有个人项目的Git(和GitHub)。

我可以想到Git相对于Subversion的许多优点(并且在很大程度上抽象出了分布式与集中式VCS相比的优点),但是我想不出一个相反的例子-一些任务(这一点很重要,并且在程序员中很常见)工作流程),Subversion比Git更好。

我从中得出的唯一结论是,我没有任何数据-并不是说Git更好,等等。

我的猜测是存在这样的反例,因此是这个问题。


3
@jokoon:有效的是什么?肯定不会提高速度,因为与本地操作相比,即使快速的以太网也很慢。
maaartinus 2011年


4
我一直认为Git太过推崇。这是一种时尚,尽管这种想法遭到了许多反对,但程序员对时尚并不陌生。像这个世界上的每个人一样,每个人都想要闪亮的玩具(Git)。Git可能很好-甚至对某些人来说很棒-但客观思考它从来没有比SVN 更好
2012年

3
我以为SVN还是好用的,学习曲线比GIT好。

5
这个问题最近被搁置,主要是基于意见。这种分类是错误的;请注意,这个问题已有很长时间了;关于DVCS的优点有很多问题,而这个问题并没有问它是否更好(意见),而是它有什么好处。差异不是意见,而是整体产品是否有效-这很棘手(但不是这个问题的重点)。
Eamon Nerbonne

Answers:


207

Subversion是一个中央存储库

虽然许多人希望拥有分布式存储库以明显提高速度和多个副本的好处,但在某些情况下更需要中央存储库。例如,如果您有一些关键的代码段,不想让任何人访问,则可能不希望将其放在Git下。许多公司希望将其代码集中化,而且(我猜)所有(严肃的)政府项目都在中央存储库下。

颠覆是传统观念

这就是说,许多人(尤其是经理和老板)具有通常的方式来对版本进行编号,并将开发视为一条硬编码到他们大脑的“单行”。没有冒犯,但是Git的自由并不容易吞噬。任何Git书籍的第一章都告诉您将所有常规的理想从头脑中清除,然后重新开始。

颠覆是一种方式,别无所求

SVN是一个版本控制系统。它有一种完成工作的方式,每个人都以相同的方式进行。期。这使得从其他集中式VCS到SVN的过渡变得容易。Git甚至不是纯VCS,它是一个文件系统,具有许多拓扑结构,可用于在不同情况下设置存储库,并且没有任何标准。这使得选择一个更加困难。

其他优点是:

  • SVN支持空目录
  • SVN具有更好的Windows支持
  • SVN可以检出/克隆子树
  • SVN支持排他访问控制svn lock,这对于难以合并的文件很有用
  • SVN更轻松地支持二进制文件和大文件(并且不需要到处复制旧版本)。
  • 添加提交涉及的步骤要少得多,因为没有任何拉/推操作,并且本地更改始终隐式地基于svn update

55
“ Subversion以一种方式做到这一点”-我也这么想,直到我开始目前的工​​作。在我目前的工作中,声称没有信任问题的老板将服务器配置为需要锁定。在我们的系统中没有合并发生。文件已锁定在存储库上,没有锁,没有其他人可以写入文件。对于那些需要宪法的人来说,自上而下的控制绝对是svn比git更好的。
丹·雷

14
中央存储库的优点之一是易于备份。如果所有签入的代码都放在一个位置,并且该位置有异地备份,那么即使办公室被烧毁,您也不会丢失所有内容。使用DVCS,除非您对开发人员的计算机进行异地备份,否则您将丢失所有尚未推送到异地备份的服务器的东西。
Paul Tomblin

94
为什么不能集中使用git?只需要一个中央存储库,您的开发人员就可以像他们检出,更新和提交一样克隆和拉动和推送。
David Thornley

29
@PaulTomblin-根据工作流程,Git可以提供更好的备份。例如,我们使用私有github仓库,我经常将代码推送到功能分支。如果我的同事这样做git fetch origin,他们每个人都有我代码的备份以及Github本身提供的备份。(我们会定期修剪本地和Github上合并的分支机构。)
Nathan Long

52
您似乎暗示,对于大型公司或政府工作而言,中央管理系统更为安全。这是不正确的。如果您的计算机上有该代码的副本,则也有该代码的副本。它是来自中央服务器还是拥有DVCS存储库的中央文件系统都没关系。
约翰·费希尔

131

颠覆过了Git的一个好处可以是Subversion允许检查出唯一子树。使用Git,整个存储库是一个单元,您只能获得全部或一无所获。使用模块化代码,与Git子模块相比,这可能会很好。(虽然Git子模块也有自己的位置)。

还有一点好处:Subversion可以跟踪空目录。Git会跟踪文件内容,因此不会显示没有文件的目录。


11
恕我直言,使用子树是SVN在GIT之上的唯一功能。采取观点,空目录是不错的选择,但也没有必要(可以解决)。如果git子模块和git子树不那么令人困惑,那么就不会有很多人无法迁移到GIT。一些人提到的其他优点归结为(开发人员)心态。例如,如果您需要自上而下的方法,那很好。我不会为你工作。
直到

3
有趣的是,这些是唯一可以支持SVN(以及其他集中式版本控制)的方法
dukeofgaming 2012年

1
为什么好笑?-较新的系统向较旧的系统学习。与git相比,RCS甚至还有一个好处:可以轻松地手动编辑历史文件,并且可以具有按文件的分支。但是eolution涉及该功能将丢失...
约翰内斯·

3
我听说有一家游戏公司正是出于这个原因在GIT上使用SVN-当您谈论一个大小为GB的存储库时,它突然变得很重要!
詹姆斯

18
从git版本1.8.0开始,您现在可以使用git subtree命令来完成此操作。最后的Subversion优势咬住了灰尘:)此处的详细信息:github.com/gitster/git/blob/…注意:即使这是指向github项目的链接,git-subtree现在也是核心git发行版的一部分。
卡尔

51

我可以想到三个。首先,使用它比较容易,特别是对于非开发人员而言。从概念上讲,它比DCVS选项要简单得多。其次是成熟度,尤其是Windows上的TortoiseSVN不过,TortoiseHg正在快速追赶。第三,在某些情况下,野兽的本质(就像一个文件系统的映像,您可以从树的任何级别检出内容)可以派上用场,例如对数十种不同的配置文件进行版本控制没有数十个存储库的服务器数量。

这并不是说我们不会将所有开发转移到Mercurial。


25
较容易打钩是一个重要的优势,因为这使它更有可能被使用。SVN肯定比没有版本控制要好得多,并且如果有人对旧方法之以鼻,那么SVN可能是它们的最佳选择。
2011年

12
@jhocking:我不喜欢SVN,但是如果有人告诉我“我不喜欢这些新的DVCS东西,那么我将继续使用CVS”,那么我绝对会推荐它:至少这是一条轻松的道路部分理智的VCS ;-)
Joachim Sauer

4
@jhocking在每种情况下,新方法并不总是最好的。它使人想起了NASA花费数百万美元开发可以用0g书写的笔的古老故事。另一方面,宇航员用铅笔制作。有时候旧的方法更好,现在就下车吧!
maple_shaft

25
@maple_shaft,有时不是。snopes.com/business/genius/spacepen.asp
Peter Taylor

3
容易不休是非常主观的,并且很大程度上取决于您如何尝试将新知识融入您可能已经知道的知识中。您的学习来源也有很大不同。如果要按手册页进行操作,祝您好运。如果您是由一位已经精通该技巧的好老师教导的,那么您就已经做好了。在YouTube上观看了几部优秀的视频后,我发现git非常有意义。如果您从已经将其精炼到简单核心的人那里得到了理解,那么任何事情都将更容易理解。
WarrenT

32
  • 从管理员和管理员的角度来看,SVN存储库更易于管理(ACL +身份验证方法+热拷贝+镜像+转储)
  • SVN *挂钩更易于实现和支持
  • svn:external 比子模块具有更多的功能和灵活性
  • 基于文件系统的存储库树比具有仅逻辑分隔的单片存储库更易于使用
  • SVN具有更多不同的客户端工具
  • SVN具有第三方可用的Web前端,比Git的要好得多
  • SVN不会伤脑筋

23
不会伤脑筋吗 想教我如何轻松地将分支与SVN中的冲突合并?
WarrenT

4
“更好的”工具/前端,这是一个移动的目标。工具在两方面都得到改善。我们都不知道几年后将提供哪些工具。10个月前的评估可能会随时间轻松变化,现在可能已过时。我希望看到实质性的答案。
WarrenT

6
树冲突?校验。是或否对所有选项?不。Svn旨在激怒。清理工作副本命令?否。还原无法清除未版本控制的文件。
沃伦·P

1
删除所有内容并再次签出将清除未版本控制的文件。
jgmjgm

我爱你的最后一个主意,吉特伤了我的大脑:'(
路加福音

24

我将此内容作为对其他人答案的评论,但我想它本身就应该是一个答案。

我公司为SVN精心选择的配置要求文件级锁定来编辑内容,并且永远不会使用合并。结果,多个开发人员争夺锁,这可能是一个主要的瓶颈,并且永远不会发生合并冲突的机会。

SVN绝对比Git做得更好。在向git进行skunkworks迁移(要求宽恕而不是允许)的过程中,我无数次惊恐了我的经理,因为没有任何软件强制的中央主控服务器,我们都是从属服务器。


中心性是神话的事,而不是事实。没有人可以阻止我进行任何更改。使用cvc,它们可以阻止我集中更改某些内容。在DVC中也一样。cvcs中的commit一词将commit和push压缩。
沃伦·P

@JonathanHenson:绝对不是 Torvalds讨厌SVN的唯一原因。SVN可能是集中式的,并且可能是更好的CVS,但很难使其成为一个好的软件。Torvalds讨厌CVS / SVN并不是因为它们是集中式的,而是因为他认为它们是可悲的糟糕软件。他是否正确取决于您的决定,但是看到Linux(和Android)(在数十亿种设备上运行)和Git(在几乎席卷整个世界的风头)都取得了巨大的成功, d在不同意他之前要三思。多年前,Torvalds在Google上关于Git的演讲真是太神奇了。
塞德里克·马丁

大声笑。您的经理很害怕,没有适当的备份系统。只是说“但是它的DVCS以便有人可以复制”就不会飞-我知道,当我在最后一个地方看到git时,他们实际上没有任何存储库的任何副本。请注意,锁定在某些情况下可能会很好,而git在这方面会失败-除非您拥有用于图像或其他二进制文件的神奇合并工具。git仅适用于文本文件。
gbjbaanb 2014年

22

我的理由:

  • 成熟度-服务器和工具(例如TortoiseSVN)
  • 简单-只需较少的步骤,一次提交就是一次提交。DVCS(如Git和Mercurial)先进行提交,然后进行推送。
  • 二进制处理-SVN比Git / Hg更好地处理二进制可执行文件和映像。由于我喜欢将与构建相关的工具检入源代码管理,因此对.NET项目尤其有用。
  • 编号-SVN具有可读的提交编号方案,仅使用数字-易于跟踪修订版本号。Git和Hg的做法大不相同。

1
仅当您具有标准中继线时,才可以使用“提交编号方案”。否则,哪个获得主要编号?

1
+1 svn中的数字。这个数字是唯一的。有一些工具可以将此编号用作app-versionnumber xx.yy.zz.12882的一部分,其中12882是svn版本号。如果有生产问题,您可以询问vor版本号,并获得使用该软件构建的确切svn修订版
k3b 2013年

22

我很高兴您正在寻找有用的信息,但是这种问题只会引起您的注意:“我认为Git赢了很多,所以svn teh suxorz!答案。

我尝试过,亲自发现Git对我的小团队来说太多了。对于地理上分散的大型分布式团队或团队组来说,这似乎很棒。我非常了解Git的好处,但是我认为源代码控制并不能使我彻夜难眠。

我是鹿狩猎者,当我和我的朋友出去时,他们武装起来,牙齿the满,弹药和高科技装备刺满了牙齿。我带着一支步枪,七发子弹和一把降压刀出现。如果我需要进行七轮以上的比赛,那我做错了,我做的和其他人一样。

我要说的是,如果您是一个从事中小型项目的小型团队,并且已经熟悉SVN,则可以使用它。它肯定比CVS或(抖动)SourceSafe更好,并且建立存储库只用了不到五分钟的时间。有时候,Git可能会被过度杀伤。


3
真?那我建议你看看化石
斯宾塞·拉特邦

7
让我们丝毫没有争议的可能。重要主题通常是最具争议的主题,也是最有可能引起强烈拥护的观点的主题。因此,“此类问题”很重要,超出范围的回答的可能性似乎不合理。我假设本网站的用户是成年人。更重要的是,我的Q的表达方式,如果不是中立的,那么就会对颠覆者有所帮助。对我的Q的响应将不得不背诵git优于git的优势,而不是相反。
doug

@SpencerRathbun,谢谢!我将不得不看一看。我不喜欢svn,因为我对git不满意。
maple_shaft

10
@Spencer -反之,因为两者的用户githg,我会建议善变的人谁认为git实在是太多了。对于曾经使用过TortoiseSVN的任何人来说,TortoiseHG都会非常熟悉(它甚至在Windows上共享相同的资源管理器覆盖图)。它肯定比VSS容易得多,如果我花了几秒钟的时间来设置hg存储库,提交初始状态并将其克隆到共享驱动器,我会感到惊讶。
Mark Booth

@MarkBooth如原始问题中所述,我认为这是需求和需求的问题。在我目前的工作场所中,没有回购之前。我需要将所有或大部分我想打包的项目工具打包在一起,易于使用,保留所有内容而不是增量的东西,并且可以将工作分配给由多台计算机组成的1或2个人的团队。
斯宾塞·拉特邦

20

这都是相对的,就像maple_shaft所说的那样,如果一个对您有用,那就不要改变!

但是,如果您确实想要某些东西,我想说它可能对设计师,Web程序员等来说更好-它处理图像和二进制文件要好一些。


2
SVN如何更好地处理它们?Git认为每个文件都是BLOB。
WarrenT

4
@WarrenT由于工作流程的缘故,使用git分支和合并很多(或者为什么要麻烦使用它),并且您实际上无法合并二进制文件。因此,您通常在SVN中的二进制文件上放置“需要锁定”属性。
gbjbaanb 2012年

1
某些二进制文件可以(理论上)合并,例如ODT文档。
Donal Fellows 2013年

18

可用性。它实际上并不是Subversion的优点,而是TortoiseSVN的优点。存在TortoiseGit,但要匹配TortoiseSVN还有很长的路要走。

如果您问什么Git比SVN更好,我会回复GitHub。有趣的是第三方工具如何发挥了如此巨大的作用。


1
Assembla(用于任何支持 SCM - SVN列表)比github上更好,我认为
懒惰獾

现在也有smartgit,GitXL等程序,这些程序使使用git的方式更简单
wirrbel

@LazyBadger,从没听说过。
Pacerier,2015年

16

当您不需要分支和合并时,SVN(在Windows上为TortoiseSVN)非常易于理解和使用。对于简单的情况,Git过于复杂,因为它试图简化分支/合并。

(如果管理好,许多小型项目就不必分支。Git针对复杂的情况;因此,大多数Git文档都假定您需要执行复杂的操作,如分支和合并。)


8
使用git分支和合并不是复杂的操作。即使没有多个版本的要求,我什至在一个人的项目中使用分支。让您暂时无法在分支机构中继续工作,而当您发现尝试其他解决方案可能会更好时,git便会分支……但是,我同意这有点难学。
maaartinus 2011年

任何时候您需要在旧版本中进行错误修复时,都需要分支和合并。

1
人们为什么不认为水银比svn或git更容易呢?
沃伦·P

我认为部分原因在于,由于SVN直到最近才不花高昂的成本就不支持分支和合并,因此它使程序员在想要不断更改某人正在处理的工作时可以站在经理的立场上。工具必须在公司的政治内部运作,还必须帮助塑造公司的政治。
2013年

14

好吧,我的祖父可以在他的Windows XP计算机上使用SVN,但是他在使用Git时遇到了麻烦。也许这是TortoiseSVN优于TortoiseGit的成就,但我认为这与以下事实联系在一起:Git本质上功能更强大,因此也更加复杂,将其降低到相同水平是毫无意义的。

现在对我的爷爷来说,这并不重要,因为他最近没有进行任何编程。但是,我曾经在一个团队中工作,我们的图形艺术家也在使用我们的源代码控制。

这些人只是希望他们的工具能够工作(我也是,但是我有一个现实的机会让他们在失败的情况下工作)并且很直观。除了事实之外,要使他们与DVCS相处还很费劲,几乎没有收获。在团队中只有两名程序员的情况下,我们也应该坚持使用SVN。


git是版本控制的一种更“哲学”的方法。您开始考虑提交,分支等的语义。因此,想要将VCS用作“备份”和分发工具的人们会比较困难,但是git并不困难
wirrbel

11

在工作中,由于以下两个原因,我无法将开发人员从SVN切换到任何DVCS

  • 部分检出(如项目树中只有三个不同深度的文件夹)
  • 文件锁定(二进制格式的报告)

8
  • 进行“ svn提交”时的安全感。由于将提交提交到服务器,因此我不可能做任何修改,以免在提交更改后删除更改。在git中,提交是本地的,因此在我推送之前,一个流浪的'rm -rf'都结束了。
  • 提交经过验证。默认情况下,我可以告诉git我以任何人的身份提交。
  • 更少的命令可供日常学习。'svn checkout','svn up'和'svn commit'将使您走得更远。
  • 共享的结帐功能更好。当您提交时,它会要求您提供用户名/密码,而不必记住要传递某些命令行参数。有时在工作中,我们有一台共享的机器,并且共享了某些项目的svn签出。有人可能会说“ Bob,您可以在这台机器上看一下吗”,他可以,而且他可以以用户身份进行更改而不会造成任何麻烦。
  • 存储库布局。您可以有一个总括项目和子项目,然后选择要在什么时间签出。
  • 版本号是递增的整数。
  • 专为中央存储库工作流而设计。

+1用于身份验证问题。需要对Git提交进行签名,并且需要检查签名,这很困难。
基督教徒

6

其他人已经发布了一些很好的答案,但是权限呢?使用基于SSH的Subversion,您可以在服务器上为SVN创建一个单独的帐户。可以为不同的开发人员提供对存储库不同部分的不同访问权限。GIT可以做到吗?我猜那里有一种乙醇钛矿,但对我而言似乎并不灵活或健壮,也不知道有人在实际使用它。


2
其他人则提到“自上而下的管理控制”。这是我的环境的关键要素-我们的存储库中有某些区域需要锁定为某些用户组为只读或什至为未读。我们还需要有一个可以指向的位置,然后说:“这是权威的主副本,如果您的副本与此处的内容不符,则不是官方的。”
alroc

1
项目负责人的祝福仓库,中尉正在控制可以承诺。在启用了http-auth的服务器上发布的Git存储库(使用svn使用的相同的apache模块)进行身份验证,并说出谁可以克隆/签出什么内容。当然,它不像每个目录的svn权限那样精细,但是对我来说,它看起来更像是微管理,而不是实际需要。
休伯特·卡里奥

@HubertKario-这引发了一个问题,“您最好的程序员是否应该花时间检查别人的代码?” 实际上,我对这个问题的答案非常感兴趣,以至于我将其发布在这里:programmers.stackexchange.com/questions/181817/…–
GlenPeterson

5

速度。有时需要10到15分钟才能克隆一个大型git仓库,而一个类似大小的subversion仓库则需要花费几分钟的时间来检出。


6
但是结帐/克隆是一种罕见的操作。在大多数情况下,git比颠覆要快。
RDS

5
git clone --depth=1如果您不关心历史,您将是您的朋友
休伯特·卡里奥

4

我将此作为回应而不是发表评论。

我承认,DVCS目前正处于趋势中,但我将尝试说明原因。

DVCS更好,因为就像很多人都在说:“这就是我们从一开始就应该进行的工作”。的确,您可以使用DVCS来实现与SVN相同的功能,从而使SVN变得过时。

但是,并非每个软件项目都像它得到的一样好:

  • 长期项目从DVCS中受益匪浅,因为它使用的开销更少,允许更好的管理(分支等),并且受到google代码和github之类的主机的大力支持。

  • 这些项目不是唯一的,在没有外部世界或互联网任何帮助的情况下,公司正在开发其他类型的项目:所有事情都是在内部完成的,通常是短期的。一个很好的例子:视频游戏。代码发展迅速。

对于后一种情况,开发人员实际上并不需要DVCS可以提供​​的分支或复杂功能,他们只想共享源代码和资产。他们编写的代码不太可能被重用,因为有最后期限。由于以下几个原因,它们依赖SVN而不是DVCS:

  • 开发人员拥有属于公司的机器,并且这种情况可能会迅速改变。配置存储库会浪费时间。
  • 如果这些人没有自己的计算机,则他们不太可能使用相同的源代码/项目的一部分。再加上一个用于集中式数据。
  • 网络速度和巨额资金允许使用可处理SVN一切的集中式服务器,这是不好的做法,但需要进行备份等。
  • SVN只是使用更简单,即使这是错误的方式:在没有冗余的同级上同步文件也不是一个简单的问题,而“总是以正确的方式”只是无法始终如一地使它变得完美。

考虑一下游戏行业的机器以及SVN如何节省时间。人们在这些项目上进行了更多的交流,因为游戏是关于重复性编程和自适应代码的:没有什么很难编码的,但是必须尽快以正确的方式进行。雇用了程序员,他们编写自己的代码,进行编译,稍作测试,提交,完成,游戏测试人员将处理其余的工作。

DVCS专为互联网和非常复杂的项目而设计。SVN适用于小型,短期,紧密的团队项目。您不需要从SVN学到很多东西,它几乎是FTP的愚蠢差异。


您能解释一下游戏行业的例子吗?
约翰尼2015年

3

Subversion和Git都鼓励使用特定(且非常不同)的开发和协作方法。根据组织和文化的不同,有些组织将从Git中获得更多收益,而另一些组织将从Subversion中获得更多收益。

Git和Mercurial都是非常优秀的专业程序员组成的分散且组织松散的团队的理想选择。这两种流行的DVCS工具都鼓励使用小型存储库,开发人员之间的重用是通过具有(相对)稳定接口的已发布库进行的。

另一方面,Subversion鼓励建立更加集中和紧密耦合的管理结构,在开发人员之间进行更多的交流,并增强对日常开发活动的组织控制程度。在这些组织更紧凑的团队中,开发人员之间的重用倾向于通过具有(相对)不稳定接口的未发布库进行。TortoiseSVN还允许Subversion支持具有非专业程序员(例如系统工程师,算法工程师或其他主题领域专家)成员的跨学科团队。

如果您的团队是分散的,成员要么在家工作,要么在许多不同的国际站点工作,或者如果他们希望独自工作并且保持沉默,几乎没有面对面的交流,那么像Git或Mercurial这样的DVCS将是一个不错的选择文化契合度。

另一方面,如果您的团队位于一个站点上,并且具有积极的“团队”开发方法,并且进行了很多面对面的交流,并且有“嗡嗡声”,那么SVN可能就是更好的文化适应性,特别是如果您有很多跨学科团队。

当然,可以配置Git和Hg(功能强大且灵活)以执行几乎任何您想做的事,但这肯定是更多的工作,而且它们肯定更难使用,特别是对于那些自然不会倾向于使用任何形式的版本控制。

最后,我还发现,使用Svn下的“热”库开发(使用CI和测试驱动方法)共享功能可以实现协调开发的步伐,而对于分布更分散的团队来说,这是很难实现的。



1

现在,版本控制有两个主要趋势:分布和整合

Git擅长下放权力。

SVN具有许多与其集成的工具。设置SVN服务器是很常见的,以便在签入修复程序时,在签入注释中提及错误号,它会自动将其设置为“处于测试中”状态,并提醒指定的测试人员需要看它。然后,您可以标记一个版本,并获得此版本中修复的所有错误的列表。

使用SVN进行此操作的工具已经成熟,并且每天都在使用。


-1

在Subversion中,可以在完成提交并推送之后编辑日志消息(也称为“提交消息”)。对于大多数实际用途,通过设计在分散系统(包括git)中是不可能的。当然,在git中,您可以执行“ git commit --amend”,但是在将您的提交推送到其他位置后,这无济于事。在SVN中,当您编辑日志消息时,您是在每个人都共享的中央存储库上进行操作,因此每个人都可以进行编辑,而无需更改修订的标识符。

事后编辑日志消息通常非常有用。除了修正错误或遗漏日志消息外,它还使您能够执行诸如更新日志消息来引用日志消息之类的操作。将来的提交之类的(例如修订了错误的修订或完成了当前修订中引入的工作)。 。

顺便说一句,没有丢失信息的危险。如果您真的很担心,那么pre-revprop-change和post-revprop-change钩子可以保存旧消息的历史记录,或者发送带有日志消息diff的电子邮件(实际上这是更常见的),因此审核跟踪。


1
这在git中也很简单;例如,git --amend; 做到这一点的另一种方法是通过git reset --soft HEAD ^,它只是向后走,但不会更改索引,因此您可以编辑/重写提交消息。
doug

嗨,道格 是的,您可以在本地存储库中完成此操作,但是我在谈论的是一旦将更改推到其他位置,“ git commit --amend”对您无济于事。在SVN中,您可以在中央服务器上编辑日志消息,这恰恰是因为存在中央服务器的概念。这就是我所说的“分散系统中的设计不可能”。我将编辑答案以使其更清楚。
卡尔·福格尔

1
我喜欢所谓的“可以随历史而变”的功能。如果不是故意的,我会认为这是一个错误。
cHao 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.