2013-06-01 408 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的東西。