注:Git 2.6以降(2015年第3四半期)はその__git_ps1
ステータスを加速するはずです:
SZEDERGábor ( )によるcommit dd160d7、commit 6bfab99(2015年7月19日)を参照してください。(濱野純雄による合併---コミット461c119、2015年8月3日)szeder
gitster
bashプロンプト:追跡されていないディレクトリを使用した追跡されていないステータスインジケータの高速化
追跡されていないステータスインジケータが有効になっている場合は、__git_ps1()
''を実行して追跡されていないファイルを探しますgit ls-files
。
追跡されていないディレクトリに多くのファイルが含まれている場合、追跡されていないディレクトリで見つかったすべてのファイルがリストされ、/dev/null
すぐにリダイレクトされるため、これはかなり遅くなる可能性があります。
これは、によって実行される実際のコマンド__git_ps1()
です。
$ ls untracked-dir/ |wc -l
100000
$ time git ls-files --others --exclude-standard --error-unmatch \
-- ':/*' >/dev/null 2>/dev/null
real 0m0.955s
user 0m0.936s
sys 0m0.016s
--directory --no-empty-directory
' 'オプションを' 'に追加して渡すことにより、この遅延をなくしgit ls-files
、すべてのコンテンツではなく、空でない追跡されていないディレクトリの名前のみを表示します。
$ time git ls-files --others --exclude-standard --directory \
--no-empty-directory --error-unmatch -- ':/*' >/dev/null 2>/dev/null
real 0m0.010s
user 0m0.008s
sys 0m0.000s
これはea95c7bのスーツに従います(完了:ファイル名の完了のための追跡されていないディレクトリフィルタリングを改善します、2013-09-18、git 1.8.5)。
に影響を与えるコードの一部でリークフィックスが利用可能であるため、Git 2.29(2020年第4四半期)を必ず使用してくださいgit ls-files
。
Elijah Newren()によるcommit eceba53、commit dad4f23(2020年8月18日)を参照してください。( Junio C Hamanoによってマージされました---コミットad00f44 、2020年8月24日)newren
gitster
dir
:メモリリークを回避するために問題のあるAPIを修正
サインオフ-作成者:Elijah Newren
構造物のdir
周りには多くの漏れや問題があるようでした。
最初に私はそれに気づき、リークされparent_hashmap
てrecursive_hashmap
いました(ただし、Peffは私の前で修正に気づき、提出しました)。
次に、前回のコミットで、entries[]とignored[]を内部的に割り当てたにもかかわらず、clear_directory()
内のフィールドのサブセットに対してのみ責任を負っていることに気づきました。
もちろん、その結果、多くの発信者がこれらのアレイとそのコンテンツをリークしたり、無計画に解放しようとしたりしました。dir_struct,
dir.c
さらに掘り下げてみると、その上部にあるかなり明確なドキュメントにもかかわらず、ユーザーが不要になったときdir.h
に電話をかけることになっていたにもかかわらず、まったく気にしない4人の発信者がいたことがわかりました。
しかし、そのうちの2つは、指令があったためにリークについて明確に考えていました。これは、データを解放する方法があまりにも不明確であったことを示唆しています。
APIの非自明性とその穴が、人々にAPIを回避させ、それが雪だるま式になって、、、および問題のさらなる問題に陥ったのではないかと思います。clear_directory()
dir_struct,
UNLEAK(dir)
entries[]
ignored[]
parent_hashmap,
recursive_hashmap
gitの他のデータ構造とより一致するように名前を変更し、すべてゼロへの提案されたmemsettingを処理するためのをclear_directory()
導入します。
「」のような名前がより明確になり、の存在が、コードを見ている人に、aまたはaのいずれかを探して、を見つけるように導く必要があるというヒントを提供することを願っています。dir_clear()
dir_init()
dir_struct
"dir_clear()
dir_init()
dir_clear()
dir_free()
dir_clear()
それは影響します:
git add
git check-ignore
git clean
git grep
git ls-files
git stash
git merge