17

実行を引き起こすコマンドの決定的なリストはどこかにありgit gc --autoますか?git-gc(1)のマニュアルページには、次のように記載されています。

--auto

このオプションを使用すると、gitgcはハウスキーピングが必要かどうかをチェックします。そうでない場合は、作業を実行せずに終了します。一部のgitコマンドgit gc --autoは、多くの緩いオブジェクトを作成する可能性のある操作を実行した後に実行されます。

(強調を追加)

私はSVNからGitへの大規模な移行を計画しているところです。圧倒的多数のユーザーはWindowsPCを使用し、それらの重要でない部分は技術的ではありません。彼らはTortoiseGitを使用します(すでに慣れ親しんでいるTortoiseSVNと密接に一致しているため)-TortoiseGitにはgit gc手動で実行する機能がまったく含まれていないことに気づきました。

git gc --auto技術者以外のスタッフは、適切な作業ディレクトリから実行するために「gitbash」コマンドラインを起動する必要があるとは期待できません。また、MsysGitの「ポータブル」ディストリビューションを使用しているため、「GitGUIHere..」ウィンドウシェルコンテキストメニューショートカットはありません。

時間の経過とともにGitがほとんど自己維持することを期待するのは合理的ですか、それとも技術的ではないユーザーフレンドリーな呼び出し方法を試してみる必要がありgit gc --autoますか?

4

2 に答える 2

5
builtin/merge.c:            const char *argv_gc_auto[] = { "gc", "--auto", NULL };
builtin/receive-pack.c:     "gc", "--auto", "--quiet", NULL,
git-am.sh:                  git gc --auto
git-rebase--interactive.sh: git gc --auto &&
git-svn.perl:               command_noisy('gc', '--auto');

git grep -- --autogit.git以降、これらの結果は興味深いものに見えました。注目すべきbuiltin/merge.c点は、これまでにないほど一般的なものgit pullがをトリガーする必要があることを意味しgit gc --autoます。

さらに、「非技術的」スタッフが「高度な」作業を行っていない限り(その時点では、「非技術的」ではなくなります)、なぜ彼らがgit gc単にではなく手動で実行する必要があるのか​​わかりません。すべてを処理させgit gc --autoます。

于 2011-02-28T02:07:18.860 に答える
2

Git 2.17(2018年第2四半期)では、をgit commitトリガーするコマンドのリストに追加する必要がありますgit gc --auto
実際、Gitが始まって以来そうだったはずです。

ÆvarArnfjörðBjarmason ( )によるcommit 095c741(2018年2月28日)を参照してください。濱野純雄による合併---コミット9bb8eb02018年3月8日avar
gitster

commit:フックgit gc --autoの直前で実行post-commit

の動作をgit-commitd4bb43e( "Invoke" git gc --auto"from commit、、、および 。" merge、2007-09-05、Git v1.5.4-rc0)での動作に変更します。amrebasegit-commit.sh

その後まもなく、f5bbc32( "Port git committo C。"、2007-11-08、Git v1.5.4-rc0)でCに移植されたとき、" git gc --auto"の呼び出しはなくなりました。

その意図しない回帰以降、、、、、およびgit gc --autoに対してのみ実行されgit-amまし git-mergeた。ローカルで大量のデータを処理し、実行されない スクリプトを作成することは可能でした。git-fetchgit-receive-pack
git commitgc

生成されたゾーンファイルの変更をローカルでコミットしていたそのようなリポジトリの1つは、毎日のcronジョブが ""に追加される前に、最大60GBのサイズに成長し、git gc1GB未満になりました。これにより、そのようなケースは介入なしで機能します。

リポジトリが永久に大きくなるような病理学的なケースを修正することは、「」を呼び出すのに数ミリ秒を費やす価値のあるトレードオフだと思いますgit gc --auto(それが何もしない一般的なケースでは)。


このリストの別の図は、Git 2.27(2020年第2四半期)で見つけることができます。これは、「 」オプションを指定して実行すると、「 」を「 」に渡すように「 am」、「commit」、「」、「」mergeを教えます。rebase--quiet--quietgc --auto

濱野純夫()によるコミット7c3e9e8コミット850b6ed(2020年5月6日)を参照してください。( Junio C Hamanoによってマージされました---コミット3af459e 、20205月13日)gitster
gitster

auto-gcgit fetch:「 」から再利用可能なヘルパーを抽出します

レビュー投稿者:Taylor Blau

1991006c (:convert to struct 、2014-08-16、Git v2.1.1)に戻って、""オプションを""に渡すように""を教えました。 fetchargv_gc_autoargv_arraygit fetch --quiet--quietgc --auto

ただし、この問題は「フェッチ」に限定されません。

$ git grep -e 'gc.*--auto' \*.c

am「 」、「commit」、「」、merge「 」のヒットを検出します。これらのコマンドは、それら自体が静かであると指示された場合、 「」を「 」にrebase渡しません。--quietgc --auto

run_auto_gc()準備手順として、呼び出し元がブール値 " quiet"を渡し、ヘルパーを使用して ""の修正をやり直すことができる、ヘルパー関数を導入しましょうgit fetch

于 2018-03-11T03:56:30.833 に答える