質問

素晴らしく簡単な質問-「git fetch」の機能です; git fetch --tags

の厳密なサブセット?

つまり git fetch --tags を実行した場合、すぐに git fetch をすぐに実行する理由はありますか?

git pull git pull --tags はどうですか?同じ状況ですか?

役に立ちましたか?

解決

注: git 1.9 / 2.0で始まる(2014年第1四半期) git fetch --tags は、オプションなしで同じコマンドラインによってフェッチされるものに加えて、 タグをフェッチします。

commit c5a84e9 を参照してください。 / mhagger "rel =" noreferrer ">マイケルハガティ(mhagger):

  

以前は、フェッチの" -tags "オプションはrefspecの指定と同等と見なされました

refs/tags/*:refs/tags/*
     コマンドラインで

;   特に、 remote。< name> .refspec 構成は無視されました。

     

しかし、他の参照を取得せずにタグを取得することはあまり有用ではありませんが、他の参照に加えて タグを取得できることは 非常に便利です。< br>   そのため、このオプションのセマンティクスを変更して後者を実行します。

     

ユーザーが only タグを取得したい場合、明示的なrefspecを指定することも可能です:

git fetch <remote> 'refs/tags/*:refs/tags/*'
     

&quot; fetch --tags &quot;のこの側面については、1.8.0.3以前のドキュメントがあいまいだったことに注意してください。動作。
   f0cb2f1をコミット(2012-12-14) fetch --tags ドキュメントを古い動作に一致させました。
  このコミットにより、新しい動作に合わせてドキュメントが変更されます( Documentation / fetch-options.txt )。

     

すべてのタグをリモートから取得するようにリクエストする他に取得するものに加えて


Git 2.5(2015年第2四半期)以降、 git pull --tags はより堅牢です:

commit 19d122b を参照してください。 / pyokagan "rel =" noreferrer ">ポールタン( pyokagan )、2015年5月13日。
C浜野潤夫- gitster - commit cc77b99 、2015年5月22日)

  

pull :マージ候補がない場合の-tags エラーの削除

     

441ed41 (&quot; git pull --tags &quot ;:より良いメッセージでエラー出力。   2007-12-28、Git 1.5.4 +)、 git pull --tags は次の場合に異なるエラーメッセージを出力します    git-fetch はマージ候補を返しませんでした:

It doesn't make sense to pull all tags; you probably meant:
       git fetch --tags
     

これは、その時点で git-fetch --tags がすべてをオーバーライドするためです   refspecsを構成したため、マージ候補はありません。このため、混乱を防ぐためにエラーメッセージが導入されました。

     

ただし、 c5a84e9 fetch --tags に加えてタグをフェッチします   その他のもの、2013-10-30、Git 1.9.0 +)、 git fetch --tags はさらにタグを取得します   設定済みのrefspecsへ。
  したがって、マージ候補がない場合は、-tags が設定されているためではありません。そのため、この特別なエラーメッセージは無関係になりました。

     

混乱を防ぐため、このエラーメッセージを削除してください。


Git 2.11以降(2016年第4四半期) git fetch はより高速です。

他のヒント

注:この回答はgit v1.8以前でのみ有効です。

これのほとんどは他の回答やコメントで述べられていますが、ここに簡潔な説明があります:

  • git fetch は、すべてのブランチヘッド(またはremote.fetch configオプションで指定されたすべて)、それらに必要なすべてのコミット、およびこれらのブランチから到達可能なすべてのタグをフェッチします。ほとんどの場合、すべてのタグはこの方法で到達可能です。
  • git fetch --tags は、すべてのタグ、それらに必要なすべてのコミットをフェッチします。ブランチヘッドが取得されたタグから到達可能であったとしても、 更新されません。

概要:フェッチのみを使用して完全に最新にしたい場合は、両方を実行する必要があります。

「低速の2倍」でもありませんコマンドラインでの入力という意味ではない限り、エイリアスは問題を解決します。 2つのリクエストは異なる情報を要求しているため、2つのリクエストを行う際にオーバーヘッドは本質的にありません。

これに自分で答えます。

違いがあると判断しました。 &git; git fetch --tags&quot;すべてのタグを取り込むことができますが、新しいコミットは取り込みません!

これは、完全に「最新」に、つまり「git pull」を複製するためにこれを行う必要があることを確認します。マージなし:

$ git fetch --tags
$ git fetch

これは2倍遅いので残念です。 &quot; git fetch&quot;のみの場合通常行うことを行うオプションがあり、 すべてのタグを取り込みます。

ここでの一般的な問題は、 git fetch + refs / heads / *:refs / remotes / $ remote / * をフェッチすることです。これらのコミットのいずれかにタグがある場合、それらのタグも取得されます。ただし、リモートのブランチから到達できないタグがある場合、それらは取得されません。

-tags オプションは、refspecを + refs / tags / *:refs / tags / * に切り替えます。両方を取得するように git fetch できます git fetch&amp;&amp;を実行するだけです。 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/*"

これにより、このリモートの .git / config に2番目の fetch = 行が追加されます。


プロジェクトでこれを処理する方法を探していました。これが私が思いついたものです。

git fetch -fup origin "+refs/*:refs/*"

私の場合、これらの機能が欲しかった

  • リモートからすべてのヘッドとタグを取得するため、refspec refs / *:refs / *
  • を使用します
  • ローカルブランチとタグを、refspecの前に非早送り + で上書きします
  • 必要に応じて現在チェックアウトされているブランチを上書きする -u
  • リモートの -p
  • に存在しないブランチとタグを削除します
  • 強制的に -f
  • を確認する

ほとんどの場合、 git fetch は、「リモートリポジトリから新しいものを取得し、ローカルブランチにマージせずにローカルコピーに配置する」という目的を果たす必要があります。 git fetch --tags は、新しいタグ以外のものを取得しないことを除いて、まさにそれを行います。

その意味では、 git fetch --tags は決して git fetch のスーパーセットではありません。実際はまったく逆です。

git pull は、もちろん、 git fetch&lt; thisrefspec&gt ;;のラッパーです。 git merge git pull にジャンプする前に、手動で git fetch ingおよび git merge ingを行うことに慣れることをお勧めします。最初に git pull が何をしているのかを理解してください。

とはいえ、関係は git fetch とまったく同じです。 git pull は、 git pull --tags のスーパーセットです。

git fetch upstream --tags

正常に動作します。新しいタグのみが取得され、他のコードベースは取得されません。

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