2013-06-01 123 views
12

我正在开发一个项目,其中版本控制系统是SVN,我想要使用git。我做了一个git svn克隆,但git status工作非常缓慢(约8分钟)。该存储库大约有63000个文件,其中大多数都是被git忽略的库。这是正常的吗?我做了一个git prune && git gc来执行清理无法访问的对象和垃圾收集。我也做了一个git repack -Adf但这使事情变得更糟。它需要更长的时间(超过20分钟)。git状态需要很长时间

我在做什么错?这是一个visual studio项目,我假定.gitignore文件没有包含正确的东西。是否有可能找出哪些文件是从Visual Studio生成的,哪些文件需要版本化?

如果.gitignore文件不是问题,我怎样才能使我的git status速度更快,对于具有65000个文件(大约10GB)的项目来说,使用git缓慢工作正常吗?

+1

我也发现git在某些windows环境下速度很慢。你有没有看过http://stackoverflow.com/questions/4485059/git-bash-is-extremely-slow-in-windows-7-x64?lq=1和http://stackoverflow.com/questions/2835775/ msysgit-的bash-是-窘况慢式 - 窗口7?LQ = 1? –

+0

完成后会显示'git status'? –

+0

@me_and它显示一个正常的“没有提交”的消息,它只需要很长的时间 –

回答

5

对于该大小的存储库,git status和相关命令可能会非常缓慢。当项目被分开和分离时,Git工作得更好,而Subversion倾向于鼓励使用包含多个项目的单个庞然大物存储库,所以使用Git-SVN时这种问题并不少见。

尽管如此,是几个不同的解决方案,你可以用它来加快速度:

  • 如果您尚未升级到使用固态硬盘,而不是一个磁盘。当我在类似的仓库中工作时,这一次更改对Git的速度产生了巨大影响

  • 查看git help svn的配置部分。这说明设置Git-SVN以使用Subversion存储库中的跟踪子文件夹(例如trunk/project-a,branches/*/project-a, tags/*/project-a,...)而不是整个存储库。如果这对您的存储库有意义,这意味着您可以拥有更小的结账和更快的运行git status

  • 看看git help read-tree的Sparse Checkout部分。这将通过设置Git来使用稀疏工作副本来讨论,类似于Subversion稀疏检出。同样,这意味着工作副本中会有更少的文件Git跟踪,因此检查它们都会更快。

  • 考虑在您的工作副本的大型部分设置“假定不变”标志。这将告诉Git不检查文件是否发生了变化。有这样做的方法有两种:

    1. 要为特定文件夹的标志,运行类似如下:

      find <folder-name>... -type f -exec git update-index --assume-unchanged {} + 
      
    2. 要设置标志整个储存库(注意:这会失去未提交变化):

      git config core.ignorestat true 
      git reset --hard HEAD 
      

    在01 --assume-unchanged选项看看和config.ignoreStat部分git help config有关这些工作方式的更多信息。

    使用这些将意味着你需要指定路径命令,如git diffgit add明确,即像裸git diff命令,git commit -a &Ç将无法正常工作。

  • 更改您的操作系统和/或文件系统。根据Git手册页(与之前的项目符号相同),Windows'lstat速度很慢,CIFS文件系统也是如此。我怀疑这个理想在Linux或其他* nix上是类似ext3或ext4的东西。