11

スタックオーバーフロー向けなのか分かりませんが。質問してみます。

私は、いつもgit config --global fetch.prune trueしているのですが。
そもそもなぜrefsが残るのでしょう。そして、なぜオプション扱いなのでしょうか。
refsを残したほうがいい場合というのが思いつきません。

というのも「pruneすれば消える」という情報は直ぐ見つかるのですが
「こういう時は、pruneしてはいけない!」という情報が見つからず、おまじない化していることに不安を覚えました。

pruneしてはいけない代表的な事例とは、どういう状況でしょうか。

Norikaz Ishii
  • 1,111
  • 6
  • 27

2 Answers2

8

代表的かどうかはわかりませんが、例えばこんなケースでしょうか?

  1. 隣の人からあるブランチを引き継ぎたいので、(originを経由せずに)その人のレポジトリをremoteとして追加し、直接fetch
  2. 隣の人は、渡し終わったのでローカルブランチを削除
  3. 取得したリモートブランチからローカルブランチを作成する前に、別のブランチを更新しようとしてもう一度fetch
  4. pruneしていたので、先に取得したリモートブランチも消えてしまう

デフォルトがpruneになっていないのは、安全側に倒すためではないでしょうか。

snak
  • 776
  • 4
  • 8
  • あー。なるほど。確かにそういう手続きをしてしまうと問題ですね。git側の破壊的(destructive)だからというだけじゃなくて、事例がわかるとしっくりきました。@snakさん、@3100さん、ありがとうございます。 – Norikaz Ishii Mar 18 '15 at 07:08
7

fetch: make --prune configurable · 737c5a9 · git/git

Since --prune is a potentially destructive operation (Git doesn't
keep reflogs for deleted references yet), we don't want to prune
without users consent, so this configuration will not be on by
default.

とのことで、安全性を考慮してこのようになっているようです。

3100
  • 2,607
  • 13
  • 27