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工作的速度是否正常?
对于该大小的存储库,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不要检查文件是否已更改.有两种方法可以做到这一点:
要设置特定文件夹的标志,请运行以下内容:
find <folder-name>... -type f -exec git update-index --assume-unchanged {} +
Run Code Online (Sandbox Code Playgroud)设置整个存储库的标志(请注意,这将丢失未提交的更改):
git config core.ignorestat true
git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)请查看--assume-unchanged
选项git help update-index
和config.ignoreStat
部分,git help config
了解有关这些工作方式的更多信息.
使用这些将意味着你需要指定路径类似的命令git diff
,并git add
明确,即像裸命令git diff
,git commit -a
&C将无法正常工作.
更改操作系统和/或文件系统.根据Git手册页(与前一个子弹中的相同),Windows' lstat
和CIFS文件系统一样慢.我怀疑理想是Linux或其他*nix上的ext3或ext4.
归档时间: |
|
查看次数: |
7511 次 |
最近记录: |