質問

私は小さなプロジェクトの開発中にWindowsとUbuntuの両方でGitを使用しており、頻繁に2つの間を行き来しています。問題はそれです git bash 一貫して遅くなります。

私がゆっくりと言うとき、私はそれを走ることを意味します cd ランニング、8〜25秒の範囲になります git コマンドには5〜20秒かかります ls 時々最大30秒かかることがあります。言うまでもなく、これは楽しいことではなく、非生産的ではありません。窓のGitが遅いことは知っていますが、これはばかげています。

うまく機能したソリューションの1つのソリューションは、一般的に - 私にとっては、ネットワーク接続を無効にすることでした(で示唆されているとおり この答え)、git bashを起動してから再接続します。それを行ってから数日間迅速に実行され続けることもありますが、パフォーマンスは常に最終的に低下します。 MSYSGITディスカッショングループ、Stack Overflow、MSYSGITの問題リストなどを数週間オンとオフにトロールしましたが、機能するソリューションを見つけることができませんでした。

これまでのところ、私は試しました:

  • ウイルススキャナーの除外リストにGit&Projectフォルダを追加する
  • 私のウイルススキャナーを完全に無効にする(Kasperskyは2011年です)
  • Outlookが実行されていないことを確認する(Outlook 2007)
  • 他のすべてのアプリケーションをシャットダウンします
  • 管理者としてgit bashを実行します
  • ネットワーク接続の無効化、Git Bashの開始、および接続を無効に保つ
  • ネットワーク接続の無効化、Git Bashの開始、再有効接続(たまにしか動作しない)
  • ランニング git gc
  • 上記の組み合わせ

私は、数人がバッシュの完成を無効にすることに成功したことを読みましたが、理想的にはその活動を維持したいと思います。 MSYSGITのバージョンは1.7.3.1-PREVIEW20101002で、OSはWindows 7 X64です。 Linuxで同じことを実行することは、予想通り、速度で稲妻です。 Linuxのみを使用しますが、Windowsでも物を実行する必要があります(特定のアプリケーション、テストなど)。

誰かが同様の問題に遭遇しましたか?もしそうなら、根本的な問題は何でしたか、そして解決策は何でしたか(もしあれば)?

これはGITリポジトリだけを超えて拡張されますが、参照のためだけに、Gitを使用しているリポジトリはかなり小さいです。

役に立ちましたか?

解決 7

Gitを完全にアンインストールし、再起動(クラシックウィンドウの治療法)、Gitの再インストールが治療法であるように見えます。また、残っているすべてのbash構成ファイルを拭き取りました(手動で作成されました)。すべてが再び速いです。

何らかの理由で再インストールできない(または望ましい)場合、私は間違いなく参照されているPS1変数を変更してみます クリス・ドーランの答え;その結果、特定の操作が大幅に高速化されました。

他のヒント

いくつかの構成オプションを設定するために3つのコマンドを実行することにより、WindowsでGitを大幅に高速化できます。

git config --global core.preloadindex true
git config --global core.fscache true
git config --global gc.auto 256

ノート:

  • core.preloadindex レイテンシを非表示にするために並行してファイルシステム操作を行います(更新:git2.1でデフォルトで有効になります)

  • core.fscache UACの問題を修正して、GITを管理者として実行する必要はありません(更新:Windows 2.8のGitでデフォルトで有効になります)

  • gc.auto .git/のファイルの数を最小化する

バッシュプロンプトにGit情報を表示していますか?もしそうなら、たぶんあなたはすべてのコマンドであまりにも多くの作業をしているのです。この理論をテストするには、次の一時的な変更を試してみてください。

export PS1='$'

私のWindows Home Directoryはネットワーク上にあり、Git Bashコマンドが最初に見ているのではないかと疑っていました。案の定、私が見たとき $PATH, 、リストされています /h/bin まず、どこで /h Windowsファイルサーバーの共有ですが、 /h/bin 存在しません。
編集しました /etc/profile そして、それを最初に置くエクスポートコマンドにコメントしました $PATH:

#export PATH="$HOME/bin:$PATH"

これにより、おそらくGit Bashが実行可能ファイルのネットワークを探していないため、私のコマンドははるかに速く実行されました。私の /etc/profile だった c:\Program Files (x86)\Git\etc\profile.

ネットワークドライブがパフォーマンスの問題であることがわかりました。 HOME ネットワーク共有が遅いことを指していました。オーバーライドできませんでした HOMEDRIVE しかし、それは私が見たものからの問題ではありません。

デスクトップでコンピューターを右クリックして環境変数を設定します - >プロパティ - >高度なシステム設定 - >環境変数ユーザー変数セクションに追加

HOME=%USERPROFILE%

クリス・ドーランの答えの延長で、私は次の代替案を使用しました PS1 設定。 〜/.Profile(Windows 7:C:/users/username/.profile)にコードフラグメントを追加するだけです。

fast_git_ps1 ()
{
    printf -- "$(git branch 2>/dev/null | sed -ne '/^\* / s/^\* \(.*\)/ [\1] / p')"
}

PS1='\[\033]0;$MSYSTEM:\w\007
\033[32m\]\u@\h \[\033[33m\w$(fast_git_ps1)\033[0m\]
$ '

これにより、色付きのシェルと現在のブランチ名の表示の利点が保持されます(GITリポジトリにある場合)が、マシンでは〜0.75秒から0.1秒まで大幅に高速です。

これはに基づいています このブログ投稿.

あなたの問題はネットワークベースかもしれませんが、私は個人的に私のローカルをスピードします git status 2つの変更を行うことにより、10倍(700ミリ秒まで7秒以上)を呼び出します。これは、21,000個のファイルと過剰な数の大きなバイナリファイルを備えた700 MBリポジトリにあります。

1つは、並列インデックスのプリロードを有効にすることです。コマンドプロンプトから:

git config core.preloadindex true
これは変わりました time git status 7秒から2.5秒。

アップデート!

以下はもう必要ありません。パッチはこれをMySySgit 1.9.4の時点で修正しました
https://github.com/msysgit/git/commit/64d63240762df22e92b287b145d75a0d68a66988
ただし、入力して修正を有効にする必要があります
git config core.fscache true

また、UACと「LUAFV」ドライバーを無効にしました(再起動する必要があります)。これにより、Windows Vista、7および8のドライバーが無効になり、システムの場所に書き込もうとするプログラムをリダイレクトし、代わりにユーザーディレクトリへのアクセスをリダイレクトします。

これがGITのパフォーマンスにどのように影響するかについての議論を見るには、こちらをご覧ください。https://code.google.com/p/msysgit/issues/detail?id=320

このドライバーを無効にするには、regeditで、「スタート」キーを変更します HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/luafv 4にドライバーを無効にします。次に、UACを最低の設定「Never Notifify」に置きます。

このドライバーを無効にすると、注意する必要がある場合、システムパーティションとは異なるドライブ(またはパーティション)で代替手段が実行されています。どうやら、ドライバーはシステムパーティションのファイルアクセスでのみ実行されます。 2番目のハードドライブがあり、Dドライブでそれを行わずに行うように、Cドライブでこのレジストリ変更で実行すると同じ結果が表示されます。

この変更には必要です time git status 2.5秒から0.7秒まで。

あなたもフォローしたいかもしれません https://github.com/msysgit/git/pull/94https://github.com/git/git/commit/d637d1b9a8fb765a8542e69bd2e04b3e229f663b Windowsの速度問題については、どのような追加作業が進行中であるかを確認します。

「管理者として実行」でCMD.exeを開始することにより、Windows 7 X64で遅いGitの問題を解決しました。

core.preloadindexに設定することにより、適切な改善が見られました ここで推奨されているように真です.

クリス・ドーランとウィルバートの答えに記載されているように、 PS1はあなたを遅くします.

(ドーランが示唆しているように)完全に無効にするのではなく、ウィルバートが提供するスクリプトを使用するのではなく、はるかに高速な「ダムPS1」を使用しています。

それは使用しています (git symbolic-ref -q HEAD || git rev-parse --short HEAD) 2> /dev/null:

PS1='\033[33m\]\w \n\[\033[32m\]$((git symbolic-ref -q HEAD || git rev-parse -q --short HEAD) 2> /dev/null) \[\033[00m\]# '

私のCygwinでは、これはより速いです ウィルバートの「fast_git_ps1」の回答 -200ミリ秒対400ミリ秒、それがあなたの迅速な遅れを剃る。

それほど洗練されていません __git_ps1 - たとえば、CDが.gitディレクトリなどにCDを変更した場合、プロンプトを変更しませんが、通常の日常の場合は十分で高速です。

これはGIT 1.7.9(Cygwinでテストされましたが、任意のプラットフォームで動作するはずです)。

Git BashとGit GUIの両方で、私は同じ問題を抱えていました。どちらのプログラムもうまく動作しますが、その後、ランダムにクロールまで減速し、その理由を理解できませんでした。

結局のところ、それはアバストでした。 Avastはさまざまなプログラム(私が書いたプログラムを含む)に奇妙なことを引き起こしたので、私はそれを1秒間無効にしました。 gitプログラムファイルフォルダーを追加しました(C:\Program Files\Git)Avast除外リストに、そして今ではLinuxと同じ速度で実行されます。

そして、はい、私は元の投稿ではウイルス対策ソフトウェアが問題ではなかったことに気付きましたが、誰かに役立つ場合に備えてこれをここに置くだけです。

また、次のgit構成を変更することで、非常にサブキーなパフォーマンスブーストを得ることができます。

git config --global status.submoduleSummary false

シンプルを実行するとき git status ウィンドウ7 x64でコマンドで、コンピューターが30秒以上かかりました。このオプションが定義された後、コマンドは即時になります。

次のページで説明されているように、Git自身のトレースをアクティブにすると、問題の起源がわかりました。https://github.com/msysgit/msysgit/wiki/diagnosing-why-git-is-solow

これらの他の回答に加えて、並列サブモジュールフェッチを使用して複数のサブモジュールを使用してプロジェクトを盛り上げました(2016年初頭のGIT 2.8以降)。

これはで実行できます git fetch --recurse-submodules -j8 とセットします git config --global submodule.fetchJobs 8, 、またはあなたが持っている/使用したい多くのコア。

CMDのGitを使用する場合は、Git Bashから実行してみてください。 CMDでは、git.exeは実際には、開始するたびに正しい環境をセットアップするラッパーであり、その後、実際のgit.exeを起動します。必要なことを行うためだけに必要な時間の2倍の時間がかかります。そして、Git Bashは、環境が起動したときにのみセットアップします。

Device ManagerのAMD Radeonグラフィック(またはIntelグラフィック)をオフにするだけで役立ちました。

enter image description here

ここで答えを見つけました:https://superuser.com/questions/1160349/git-is-extremely-slow on-windows#=

組み合わせた回答:

  1. ウィルバート - PS1に含める情報
  2. Sinelaw's - (<branch_name>) また (<sha>)
# https://unix.stackexchange.com/questions/140610/using-variables-to-store-terminal-color-codes-for-ps1/140618#140618
# https://unix.stackexchange.com/questions/124407/what-color-codes-can-i-use-in-my-ps1-prompt
# \033 is the same as \e
# 0;32 is the same as 32
CYAN="$(echo -e "\e[1;36m")"
GREEN="$(echo -e "\e[32m")"
YELLOW="$(echo -e "\e[33m")"
RESET="$(echo -e "\e[0m")"

# https://stackoverflow.com/questions/4485059/git-bash-is-extremely-slow-in-windows-7-x64/19500237#19500237
# https://stackoverflow.com/questions/4485059/git-bash-is-extremely-slow-in-windows-7-x64/13476961#13476961
# https://stackoverflow.com/questions/39518124/check-if-directory-is-git-repository-without-having-to-cd-into-it/39518382#39518382
fast_git_ps1 ()
{
    git -C . rev-parse 2>/dev/null && echo " ($((git symbolic-ref --short -q HEAD || git rev-parse -q --short HEAD) 2> /dev/null))"
}

# you need \] at the end for colors
# Don't set \[ at the beginning or ctrl+up for history will work strangely
PS1='${GREEN}\u@\h ${YELLOW}\w${CYAN}$(fast_git_ps1)${RESET}\] $ '

結果:

frolowr@RWAMW36650 /c/projects/elm-math-kids (master) $

Windows 7 X64でWindows(MSYSGIT)のGitを実行しているのと同じ問題がかなり長い間、限られたユーザーアカウントとして遭遇しました。

私がここで読んだものや他の場所から、共通のテーマは管理特権やUACの欠如であるようです。 UACは私のシステムでオフになっているため、プログラムファイルディレクトリ内の何かを書き込み/削除しようとしているという説明が私にとって最も理にかなっています。

いずれにせよ、ZipInstallerを使用してPortableバージョンのgit 1.8をインストールすることにより、問題を解決しました。 ZipInstallerが機能するためには、.7Zディストリビューションファイルを解除し、ZIPファイルとして再パックする必要があることに注意してください。また、そのディレクトリをシステムパスに手動で追加する必要がありました。

パフォーマンスは今大丈夫です。にインストールされていても Program Files (x86) 限られたユーザーとしての権限がないディレクトリは、同じ問題に苦しんでいないようです。

これは、ポータブルバージョンがファイルを書き込み/削除する場所でもう少し保守的であるという事実に帰します。どちらが理由であるかを特定しようとはしません。バッシュを含め、今ではもっとうまく機能すると言うだけで十分です。

私の場合、それは実際にはGit Bashにつながり、Powershellさえも本当に遅くなることにつながるAvast Antivirusでした。

私は最初にアバストを10分間無効にして、速度が向上したかどうかを確認しました。その後、読み取り、書き込み、実行のために、Avastの例外としてGit Bashインストールディレクトリ全体を追加しました。私の場合はそうでした C:\Program Files\Git\*.

上記のことは私を助けることができませんでした。私のシナリオでは、この問題は次のように現れていました。

  • どれでも ll コマンドは遅かった(実行に約3秒かかっていた)
  • その後 ll コマンドは即座に実行されました、 ただし、前のLSコマンドから45秒以内にのみ.

でデバッグすることになったとき プロセスモニター すべてのコマンドの前にDNSリクエストがあったことがわかりました。

したがって、ファイアウォール(私の場合はcomodo)を無効にしてすぐに、コマンドを実行させて問題がなくなりました。そして、ファイアウォールが戻ってきたときに戻ってきません。最古の機会を得て、この応答は、ブロッキングDNSリクエストとターゲットが何であったかについての詳細を確認します。

BR、g

また、GIT PS1の遅さに問題がありましたが、長い間データベースサイズの問題(大きなリポジトリ)だと思っていて、さまざまな試みをしていました git gc トリック、そしてあなたのように他の理由を探していました。しかし、私の場合、問題はこの行でした:

function ps1_gitify
{
   status=$(git status 2>/dev/null )      # <--------------------
   if [[ $status =~ "fatal: Not a git repository" ]]
   then
       echo ""
   else
       echo "$(ps1_git_branch_name)  $(ps1_git_get_sha)"
  fi
}

やっている git status すべてのコマンドラインのステータスラインは遅かった。痛い。それは私が手で書いたものでした。私が試したとき、それは問題だと思いました

export PS1='$'

ここで1つの答えで言及されているように。コマンドラインは速く稲妻でした。

今私はこれを使用しています:

function we_are_in_git_work_tree
{
    git rev-parse --is-inside-work-tree &> /dev/null
}

function ps1_gitify
{
    if ! we_are_in_git_work_tree
    then
    ...

スタックオーバーフローポストから git電流分岐と色を備えたPS1ライン そして、それは正常に機能します。再び高速のgitコマンドラインがあります。

私の場合、git bashショートカットはに設定されていました Start in:%HOMEDRIVE%%HOMEPATH% (Git Bashをクリックしてプロパティを選択することで、これを確認できます)。これがネットワークドライブでした。

解決策は、それを指摘することです %HOME%. 。持っていない場合は、環境変数でセットアップでき、Git Bashは速く稲妻になるはずです。

私の同僚は、WindowsでGitに問題がありました(7) git status checkoutadd 速かったが、 git commit 年齢を取った。

私たちはまだこれの根本的な原因を見つけようとしていますが、リポジトリを新しいフォルダーにクローン化すると、彼の問題が修正されました。

多くの人が言ったように、これは次のとおりです stash Windowsのシェルスクリプトであるが、GIT 2.18.0以降、Windowsインストーラーには、スタッシュのはるかに高速な(〜90%)組み込みバージョンの実験機能のオプションがあります -https://github.com/git-for-windows/build-extra/pull/203.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top