Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
支持本机Windows的SVN替代方案_Svn_Version Control_Tortoisesvn_Repository_Revision - Fatal编程技术网

支持本机Windows的SVN替代方案

支持本机Windows的SVN替代方案,svn,version-control,tortoisesvn,repository,revision,Svn,Version Control,Tortoisesvn,Repository,Revision,到目前为止,我一直在我的开发机器上使用,我发现有一些缺点。我是一名文件管理员,我发现自己经常在工作区内删除或移动文件夹。因为我使用由Total Commander调用的标准文件系统操作,而不是由TortoiseSVN提供的操作,这通常会破坏工作区,并且我无法提交到存储库 是否有免费的替代方案,安装驱动程序/服务来监视文件系统操作,以便正确记录这些操作,从而不会损坏工作区?或者,是否有一种源代码控制软件完全没有这些缺点 编辑 SVN/Git/Mercurial中的重命名处理 Git完全自动处理

到目前为止,我一直在我的开发机器上使用,我发现有一些缺点。我是一名文件管理员,我发现自己经常在工作区内删除或移动文件夹。因为我使用由Total Commander调用的标准文件系统操作,而不是由TortoiseSVN提供的操作,这通常会破坏工作区,并且我无法提交到存储库

是否有免费的替代方案,安装驱动程序/服务来监视文件系统操作,以便正确记录这些操作,从而不会损坏工作区?或者,是否有一种源代码控制软件完全没有这些缺点

编辑 SVN/Git/Mercurial中的重命名处理

Git完全自动处理重命名,Mercurial能够使用显式命令自动发现重命名,而SVN根本不处理重命名

另一个相对重要的区别是,如果出于任何原因Mercurial没有检测到文件重命名,它会将文件存储在存储库中,从而复制内容。Git从不复制内容,无论它是否检测到文件重命名

Mercurial的自动重命名处理

以下两个扩展允许为Mercurial添加类似Git的自动重命名处理:


()

Mercurial和Git的比较







(有趣的功能比较,尽管很老)

Mercurial入门

Git工具 除了前面提到的,它是非常有用的VisualStudio Git扩展。是Git扩展的另一种选择,但根据我的测试,Git扩展更加用户友好,具有整洁的用户界面。在Git扩展中使用子模块也更好。

自动检测已移动的文件。然而,与SVN相比,更喜欢git还有许多其他原因——首先,git是一个分布式版本控制系统,它比SVN这样的集中式系统带来了许多好处。例如,您可以在本地提交更改,而不必立即将更改上载到中央回购(这意味着您可以更频繁地提交更改(从而降低了出错的风险),因为您不需要在提交更改之前拥有100%有效的更改),而使用分支是轻而易举的事。不利的一面是,学习曲线比许多其他源代码控制系统更陡峭,从SVN开始使用git可能需要一段时间

如果您想在windows上尝试git,我建议。

自动检测已移动的文件。然而,与SVN相比,更喜欢git还有许多其他原因——首先,git是一个分布式版本控制系统,它比SVN这样的集中式系统带来了许多好处。例如,您可以在本地提交更改,而不必立即将更改上载到中央回购(这意味着您可以更频繁地提交更改(从而降低了出错的风险),因为您不需要在提交更改之前拥有100%有效的更改),而使用分支是轻而易举的事。不利的一面是,学习曲线比许多其他源代码控制系统更陡峭,从SVN开始使用git可能需要一段时间


如果你想在windows上试用git,我推荐。

你可以使用的另一个DVCS是Mercurial


您可以使用的另一款DVCS是Mercurial


尽管我越来越喜欢git,但mercurial也是一个很棒的系统,从SVN到mercurial的转换可能比从SVN到git的转换简单。不过,我不记得它处理移动和重命名的能力有多好。在使用时,我的.net项目从未遇到过重命名/移动问题。我没有将mercurial用于任何其他目的,因此我无法判断这个问题是否是有关mercurial重命名处理的一些信息。虽然我更喜欢git,但mercurial也是一个很棒的系统,从SVN到mercurial的转换可能比从SVN到git的转换简单。不过,我不记得它处理移动和重命名的能力有多好。在使用时,我的.net项目从未遇到过重命名/移动问题。我没有将mercurial用于任何其他目的,因此我无法判断这个问题是否是有关mercurial重命名处理的信息。@Aasmund Eldhuset:您说过它检测文件。这是否意味着它也检测文件夹?如果我在工作区中移动文件夹,它实际上是作为“移动”记录的,还是作为“删除文件夹及其所有内容+创建新文件夹并添加其所有内容”?@Paja:git的方法有些不寻常-它没有“记录移动操作”的概念。相反,它能够分析在同一提交中添加和删除的文件,并检测删除的文件是否在其他地方重新出现。当您要求文件的
diff
时,您可以要求它跟踪重命名,以便获得文件的完整历史记录。如果您移动文件夹,git会将其记录为许多已删除的文件和已添加的文件,但如果您
diff
其中一个文件,您将获得其完整的历史记录。@Paja:另外,git根本不跟踪文件夹;它只跟踪文件及其路径,并创建包含这些文件所需的文件夹。所以你不能提交一个空文件夹,如果你删除了文件夹中的所有内容,该文件夹将从git中消失。@Aasmund Eldhuset:然后如果我移动了一个文件夹,然后立即修改文件夹中的一个文件,然后提交,当文件显示为一个完全不同的文件时,git如何跟踪该文件的历史记录?@Paja:只要修改很小,它就可以工作。在提交过程中,git将所有删除的文件与所有新文件进行比较,并假设如果删除的文件a与新文件B的行匹配(例如95%),则a实际上已移动到B。@Aasmund Eldhu