git remote updateと同等ですgit fetchか?
2 に答える
はいといいえ。git remote update1 つだけでなく、すべてのリモートから取得します。
コードを見てremote update単なるシェル スクリプト (可能) であるかどうかを確認することなく、基本的に、各リモートに対して fetch を実行します。git fetchはるかに細かくすることができます。
更新: 詳細情報!
最初からこれを行うべきでした: Git の Git リポジトリで Git のリリース ノートを grep しました (とてもメタです!)
grep --color=always -R -C30 fetch Documentation/RelNotes/* | less
次に、 をless検索しました。これは、Git バージョン 1.6.6--allのリリース ノートで見つけたものです。
git fetch多くのリポジトリからフェッチを実行するための学習オプション--allと、古くなったリモート追跡ブランチを削除するオプション。これらはandの必要性を少なくします ( norを削除する予定はありませんが)。--multiple--prunegit remote updategit remote pruneremote updateremote prune
バージョン 1.6.6 は2009 年 12 月 23 日までリリースされず、元の投稿者は 2009 年 12 月 6 日に質問をしました。
リリース ノートからわかるように、Git の作成者は、git remote updateコマンド機能が によって多少複製されているという事実を認識してgit fetchいましたが、おそらく既存のスクリプトやプログラムとの下位互換性のために、またはおそらく理由のために、それを削除しないことに決めました。それはあまりにも多くの仕事であり、より優先度の高い項目があります。
詳細を含む元の回答
xenoterracide の答えは現在 3.5 年前のものであり、Git はそれ以来いくつかのバージョンを経ており (この記事の執筆時点ではv1.6.5.5 からv1.8.3.2になっています)、および の現在のドキュメントを見るgit remote updateとgit fetch、適切なオプションと引数が与えられれば、どちらも複数のリモートから新しいコミットを取得するという基本的に同じ機能を実行できるようです。
すべてのリモートを取得しています
複数のリモートを取得する 1 つの方法は、--allフラグを使用することです。
git fetch --all
これは、設定していないと仮定して、構成されたすべてのリモートから取得しますremote.<name>.skipFetchAll。
true の場合、 git-fetch(1)またはgit-remote(1)の update サブコマンドを使用して更新するときに、このリモートはデフォルトでスキップされます。— git-config ドキュメント
これは、
git remote update
フェッチするリモートグループを指定せずremotes.default、レポ構成で設定せず、リモートremote.<name>.skipDefaultUpdateがtrueに設定されていない.
Gitの構成に関する現在の 1.8.3.2 のドキュメントでは、この設定について言及されていませんremotes.defaultが、私はそれについて The Almighty Google に相談し、Mislav Marohnićからの次の役立つ説明を見つけました。
$ git config remotes.default 'origin mislav staging'
$ git remote update
# fetches remotes "origin", "mislav", and "staging"
コマンドによってフェッチされるリモートのデフォルト リストを定義できます
remote update。これらは、チームメイト、オープンソース プロジェクトの信頼できるコミュニティ メンバーなどからのリモートである可能性があります。
したがって、おそらく、remotes.default設定していて、すべてのリモートがリストされているわけでgit remote updateはない場合、リポジトリが「認識」しているすべてのリモートを取得することはありません。
remote.<name>.skipDefaultUpdate設定に関しては、Git docsで次のように説明されています。
true の場合、 git-fetch(1)またはgit-remote(1)の update サブコマンドを使用して更新するときに、このリモートはデフォルトでスキップされます。
指定されたリモート グループの取得
すべてのリモートをフェッチする代わりに、 と の両方fetchをremote update使用して、複数のリモートとリモートのグループをフェッチするように指定できます。
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)…]
git fetch [<options>] <group>グループの一部である複数のリモートを取得できます ( Mislavから別の例を借りるために):
$ git config remotes.mygroup 'remote1 remote2 ...'
$ git fetch mygroup
git fetch --multiple一度に取得する複数のリポジトリとリポジトリ グループを指定できます ( docsから)。
複数
<repository>の<group>引数を指定できるようにします。いいえ<refspec>sを指定できます。
git remote updateドキュメントのあいまいさ
の概要でgit remote updateは、コマンド構文が次のように指定されています。
git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]
最後の部分に注意してください[(<group> | <remote>)…]。末尾のドット...は、コマンドで複数のグループとリモートを指定できることを意味します。これは、コマンドと同じように動作することを意味しgit fetch --multipleます ...2 つの間の構文がどのように似ているかを参照してください。
ただし、同じドキュメントのupdateコマンドの説明には、複数のグループおよびリモート引数を指定することについては何も記載されていません。
で定義されているように、リポジトリ内のリモートの名前付きセットの更新を取得します
remotes.<group>。
そのため、複数の個別のリモートと複数のリモート グループの指定に関して、 がgit remote update同じように機能するかどうかは不明です。git fetch --multiple
単一のリモートのフェッチ
最後に、単一のリモートをフェッチする単純なケースは誰もが知っています。
git fetch <remote>
また、使用できる場合もあります
git remote update <remote>
しかし、前のセクションで述べたように、 のドキュメントでは、このコマンドで単一のリモートグループgit remote update以外のものを取得できるかどうかが明確ではありません。
要約
私が説明したように、複数のリモートからのフェッチに関して同様に動作しますgit fetch。git remote update構文と引数は似ていますgit fetchが、短いため、入力と使用が簡単になるでしょう。
git remote updateのように単一のリモートだけを取得するために使用できない場合もありますが、git fetch指摘したように、ドキュメントではこれが明確にされていません。
さておき
git fetch上記のとで例示されている Git 磁器コマンド間の機能の重複は、git remote update固有のものではありません。git rebase --ontoとで同様の状況に気付きました。git cherry-pickどちらも、新しいベース コミットにパッチを適用するためにさまざまなコミットを行うことができるという点です。
Git が何年にもわたって進化してきたため、一部の機能が (必然的に?) 複製され、おそらくエンドユーザーの利便性のために複製されたと思います (たとえば、cherry-pick単一のコミットを何度も渡すよりも、 に範囲を渡す方が簡単です)。範囲を選択します)。v1.7.2リリース ノートcherry-pickで説明されているように、さまざまなコミットを常に受け入れるとは限らなかったようです。
git cherry-pickコミットの範囲を選択することを学びました (例:cherry-pick A..Bandcherry-pick --stdin)git revert。ただし、これらはより優れたシーケンス制御をサポートしていませんrebase [-i]。