2013-06-01 11 views
12

バージョン管理システムがSVNで、gitを使用したいプロジェクトで作業しています。私はgit svnクローンを行ったが、git statusはひどく遅い(約8分)。リポジトリには約63000個のファイルがあり、そのほとんどはgitで無視されるライブラリです。これは正常ですか?私はgit prune && git gcを実行して、到達不能オブジェクトのクリーンアップとガベージコレクトを実行しました。私もgit repack -Adfでしたが、これはさらに悪いことになりました。さらに長い時間がかかります(20分以上)。gitのステータスが長すぎます

私は間違っていますか?これはビジュアルスタジオプロジェクトであり、.gitignoreファイルに正しいものが含まれていないと仮定します。どのファイルがビジュアルスタジオビルドから生成され、どのファイルをバージョン管理する必要があるのか​​を正確に知ることは可能ですか?

ファイルが問題でない場合は、どうすればgit statusを高速化できますか?65000ファイル(約10GB)のプロジェクトで正常に動作しますか?

+1

また、一部のWindows環境でgitが遅いことがわかりました。 http://stackoverflow.com/questions/4485059/git-bash-is-extremely-slow-in-windows-7-x64?lq=1とhttp://stackoverflow.com/questions/2835775/を見ましたか? msysgit-bash-is-horrendously-slow-in-windows-7?lq = 1? –

+0

完了時に 'git status'と表示されるのは何ですか? –

+0

@ me_andそれは普通の "何もコミットしない"というメッセージを表示しますが、それは時間がかかりすぎます –

答えて

5

このサイズのリポジトリの場合、git statusとそれに関連するコマンドは非常に遅くなる可能性があります。 Subversionは複数のプロジェクトを含む単一の巨大リポジトリの使用を推奨しがちですが、Git-SVNを使用する場合はこの種の問題は珍しくありません。すでに、ソリッドステートディスクではなく、磁気ディスクを使用してにアップグレードしていない場合は

  • はそれにもかかわらず、あなたは物事をスピードアップするために使用できるいくつかの異なるソリューションをそこにいます。この単一の変更は、私が似たようなリポジトリを使って作業していたときのGitのスピードと大きな違いをもたらしました。

  • git help svnの設定セクションを見てください。リポジトリ全体ではなくSubversionリポジトリ(例:trunk/project-abranches/*/project-atags/*/project-a、...)のトラックサブフォルダを使用するようにGit-SVNを設定する方法について説明します。これがあなたのリポジトリにとって理にかなっていれば、はるかに小さなチェックアウトと非常に高速な実行が可能であることを意味します。git status

  • git help read-treeのスパースチェックアウトのセクションをご覧ください。それはSubversionのスパースチェックアウトに似た、疎な作業コピーを使うようにGitを設定することで話します。この場合も、作業コピーにGitの追跡ファイルが少なくなるため、それらをすべて確認することがもう一度速くなります。

  • 作業コピーの大きな部分に "変更されていない"フラグを設定することを検討してください。これは、ファイルが変更されているかどうかを調べることを気にしないようにGitに指示します。

    1. 特定のフォルダのためのフラグを設定するには、以下のようなものを実行します:これを行うには2つの方法があります

      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 commit -a & cは動作しません。つまり、明示的にgit diffgit addのようなコマンドへのパスを指定する必要が裸git diffなどのコマンドを意味します。

  • オペレーティングシステムおよび/またはファイルシステムを変更してください。 Gitのマニュアルページ(前の箇条書きと同じもの)によれば、WindowsのlstatはCIFSファイルシステムと同様に遅いです。私は、理想はLinuxや他の* nix上のext3やext4のようなものだと思う。

関連する問題