素晴らしく簡単な質問-「git fetch」の機能はgit fetch --tags
の厳密なサブセットですか?
つまりgit fetch --tags
を実行する場合、すぐにgit fetch
をすぐに実行する理由はありますか?
git pull
とgit pull --tags
はどうですか?同じ状況?
注:この回答はgit v1.8以前でのみ有効です。
このほとんどは他の回答とコメントで述べられていますが、ここでは簡潔な説明があります。
git fetch
は、すべてのブランチヘッド(またはremote.fetch configオプションで指定されたすべて)、それらに必要なすべてのコミット、およびこれらのブランチから到達可能なすべてのタグをフェッチします。ほとんどの場合、すべてのタグはこの方法で到達可能です。git fetch --tags
は、すべてのタグ、およびそれらに必要なすべてのコミットをフェッチします。フェッチされたタグから到達可能であっても、ブランチヘッドをnot更新します。概要:フェッチのみを使用して完全に最新にしたい場合は、両方を実行する必要があります。
また、コマンドラインで入力するという意味でない限り、「2倍遅い」ことはありません。その場合、エイリアスは問題を解決します。 2つの要求は異なる情報を要求しているため、2つの要求を行う際にオーバーヘッドは本質的にありません。
私は自分でこれに答えるつもりです。
違いがあると判断しました。 「git fetch --tags」はすべてのタグを取り込む可能性がありますが、新しいコミットは取り込みません。
完全に「最新」にするには、これを行う必要があることがわかります。つまり、マージせずに「git pull」を複製します。
$ git fetch --tags
$ git fetch
これは2倍遅いので残念です。 「git fetch」だけが通常行うことを行うオプションを持っていた場合andすべてのタグを取り込みます。
ここでの一般的な問題は、git fetch
が+refs/heads/*:refs/remotes/$remote/*
をフェッチすることです。これらのコミットのいずれかにタグがある場合、それらのタグも取得されます。ただし、リモートのブランチから到達できないタグがある場合、それらは取得されません。
--tags
オプションは、refspecを+refs/tags/*:refs/tags/*
に切り替えます。 couldgit fetch
に両方を取得するように依頼します。次のコマンドを使用するgit fetch && git fetch -t
を実行するだけで十分です。
git fetch Origin "+refs/heads/*:refs/remotes/Origin/*" "+refs/tags/*:refs/tags/*"
そして、これをこのレポジトリのデフォルトにしたい場合は、2番目のrefspecをデフォルトフェッチに追加できます。
git config --local --add remote.Origin.fetch "+refs/tags/*:refs/tags/*"
これにより、このリモートのfetch =
に2番目の.git/config
行が追加されます。
プロジェクトでこれを処理する方法を探していました。これが私が思いついたものです。
git fetch -fup Origin "+refs/*:refs/*"
私の場合、これらの機能が欲しかった
refs/*:refs/*
を使用します+
で上書きします-u
-p
に存在しないブランチとタグを削除します-f
ほとんどの場合、git fetch
は必要な処理を行う必要があります。つまり、「リモートリポジトリから新しいものをすべて取得し、ローカルブランチにマージせずにローカルコピーに配置します」。 git fetch --tags
はそれを正確に行いますが、新しいタグ以外は何も取得しません。
その意味で、git fetch --tags
はgit fetch
のスーパーセットではありません。実際にはまったく逆です。
git pull
は、もちろんgit fetch <thisrefspec>; git merge
のラッパーにすぎません。そもそもgit fetch
が何をしているのかを理解するのに役立つので、git merge
にジャンプする前に、手動でgit pull
ingとgit pull
ingに慣れることをお勧めします。
つまり、関係はgit fetch
とまったく同じです。 git pull
はgit pull --tags
のスーパーセットです。
git fetch upstream --tags
正常に機能し、新しいタグのみを取得し、他のコードベースは取得しません。