Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.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
Svn 可扩展(50万个文件)版本控制系统_Svn_Git_Version Control_Mercurial_Cvs - Fatal编程技术网

Svn 可扩展(50万个文件)版本控制系统

Svn 可扩展(50万个文件)版本控制系统,svn,git,version-control,mercurial,cvs,Svn,Git,Version Control,Mercurial,Cvs,我们将SVN用于源代码修订控制,并正在尝试将其用于非源代码文件 我们正在处理一大组(300-500k)短(1-4kB)文本文件,这些文件将定期更新,并需要对其进行版本控制。我们尝试在平面文件模式下使用SVN,但它很难处理第一次提交(签入500k文件),大约需要36小时 每天,我们需要系统能够在短时间内处理每个提交事务中的10k个修改文件(截至2008年7月,Linux内核git repo大约有260000个文件。(2.6.26) 在这么多文件的情况下,内核开发人员仍然说git真的很快。我不明白

我们将SVN用于源代码修订控制,并正在尝试将其用于非源代码文件

我们正在处理一大组(300-500k)短(1-4kB)文本文件,这些文件将定期更新,并需要对其进行版本控制。我们尝试在平面文件模式下使用SVN,但它很难处理第一次提交(签入500k文件),大约需要36小时


每天,我们需要系统能够在短时间内处理每个提交事务中的10k个修改文件(截至2008年7月,Linux内核git repo大约有260000个文件。(2.6.26)


在这么多文件的情况下,内核开发人员仍然说git真的很快。我不明白为什么它在500000个文件时会慢一点。git跟踪内容,而不是文件。

git是最好的选择。你可以检入整个操作系统(几十万个文件中有2GB的代码)尽管初始签入需要相当长的时间,比如大约40分钟,但它仍然可用

  • 对于表示FSFS的svn“平面文件模式”,我认为:

    • 请确保您运行的是最新的svn。FSFS在~1.5 IIRC中添加了分片,这将在500k文件中产生昼夜差异。您运行的特定文件系统也将产生巨大的影响。(不要在NTFS上考虑这一点。)
    • 您将被这么多的文件事务绑定到IO上。SVN对此不是很有效,必须在.SVN/中统计文件以及真实文件
  • git的性能要比svn好得多,这至少要归功于您自己


  • 你真的需要一个像ZFS这样的带有廉价快照的文件系统吗?你可以将其配置为每5分钟保存一次文件系统的状态,以利用某种程度的更改历史记录。

    对于这样短的文件,我会检查是否使用数据库而不是文件系统。

    只要你不签出或更新,SVN是否合适整个存储库,那么是的

    SVN在提交大量文件(尤其是在Windows上)方面非常糟糕,因为所有这些.SVN目录都是为了在您操作系统时更新锁而写入的。如果您有少量目录,您不会注意到,但所花费的时间似乎呈指数级增长

    但是,一旦提交(成批提交,可能是逐目录提交),事情就会变得非常快。更新不会花费太长时间,您可以使用稀疏签出功能(非常推荐)处理存储库的各个部分。假设您不需要修改数千个文件,您会发现它工作得非常好

    提交10000个文件——同样,一次提交所有文件不会很快,但是每天十次提交1000个文件会更容易管理


    因此,一旦你有了所有的文件,就可以尝试一下,看看它是如何工作的。所有这些都将在1.7中修复,因为工作复制机制被修改以删除那些.svn目录(因此保持锁定更简单、更快).

    是否有任何理由每次提交都需要提交10k个修改过的文件?如果每个用户都立即签入自己的文件,Subversion的扩展性会更好。然后,每天有一次你需要“发布”文件,你可以非常快地对它们进行标记,并从标记中运行已发布的版本

    我推荐Mercurial,因为它仍然领先于git他是可用性部门(git一直在进步,但是,呃)



    bzr在可用性方面也取得了飞跃。

    如果你正在做我认为你正在做的事情,我会研究某种CMS。正如其他人指出的那样:可能值得解释一下你试图解决的问题,因为版本控制系统可能是错误的(至少不是最有效的)你的问题的解决方案。你的文件是如何构造的?许多文件系统将无法处理包含大量文件的目录。这让我很震惊。人们每天手动修改10000个文件?每个文件都需要手动进行差异和合并?每个文件可以达到4KB?哇。在这个问题上取得了进展:重申这一点:我刚刚测试了一个提交,它基本上重写了一个巨大存储库(26000个文件,5GB)的所有内容。这大约需要6分钟,大部分是I/O限制,在一个不太快的网络装载上。在您的用例中,差异更像是50MB,因此您应该会看到更快的提交时间。(您的初始提交可能仍需要一段时间——根据您的系统,大概需要五分钟到一小时。)请注意。Git对程序员来说有一个陡峭的学习曲线,对非程序员来说可能会让人困惑。我现在一直在使用Git,没有它就无法工作,但我花了几个月的时间才变得舒适。如果你致力于Git,请确保你准备花几个小时来培训你的非程序员同事——这不是双关语:)@Andy感谢你对Git学习曲线的宝贵评论。当我查看linux内核度量链接时,只有大约26000个文件(而不是260000个)。你的答案听起来像个问题(打字错误?)。总之,指针不错!它被称为苏格拉底方法;-)@Nathan Yes。我相信我们使用的是SVN的1.6.x版本。随着文件数量的增加,SVN 1.7将通过取消对大量文件有重大影响的.SVN目录而获得更好的支持。当然,这还没有结束。当你有大量的修订时,分片将帮助你,但它不会改善任何文件数量。存储库中分片的是修订版。@Sander:对,说得对。我想我把“定期更新”想象成个人提交,但对于这么多的文件来说,这不太可能。真正的减速是客户端。假设系统有快速磁盘,是的。我想SSD将是版本控制系统的终极速度之路。谢谢你的提示。对使用SSD作为SVN服务器HDD将加快速度。@hashable:您必须对此进行研究。我认为客户机上的硬盘是