git状态需要太长时间

Jac*_*ieg 15 git git-svn git-status

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

我究竟做错了什么?这是一个visual studio项目,我认为该.gitignore文件不包含正确的东西.是否有可能确切地找出从Visual Studio构建生成哪些文件以及哪些文件必须进行版本控制?

如果.gitignore文件不是问题,我怎样才能让我git status更快,对于6500个文件(大约10GB)的项目,使用git工作的速度是否正常?

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.

  • 看看Sparse Checkout部分git help read-tree.这将通过设置Git来使用稀疏的工作副本,类似于Subversion稀疏结账.同样,这意味着Git在您的工作副本中跟踪的文件将更少,因此检查它们将再次更快.

  • 考虑在工作副本的大部分上设置"假设未更改"标志.这将告诉Git不要检查文件是否已更改.有两种方法可以做到这一点:

    1. 要设置特定文件夹的标志,请运行以下内容:

      find <folder-name>... -type f -exec git update-index --assume-unchanged {} +
      
      Run Code Online (Sandbox Code Playgroud)
    2. 设置整个存储库的标志(请注意,这将丢失未提交的更改):

      git config core.ignorestat true
      git reset --hard HEAD
      
      Run Code Online (Sandbox Code Playgroud)

    请查看--assume-unchanged选项git help update-indexconfig.ignoreStat部分,git help config了解有关这些工作方式的更多信息.

    使用这些将意味着你需要指定路径类似的命令git diff,并git add明确,即像裸命令git diff,git commit -a&C将无法正常工作.

  • 更改操作系统和/或文件系统.根据Git手册页(与前一个子弹中的相同),Windows' lstat和CIFS文件系统一样慢.我怀疑理想是Linux或其他*nix上的ext3或ext4.