git remote update
と同等ですgit fetch
か?
2 に答える
はいといいえ。git remote update
1 つだけでなく、すべてのリモートから取得します。
コードを見て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
--prune
git remote update
git remote prune
remote update
remote 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..B
andcherry-pick --stdin
)git revert
。ただし、これらはより優れたシーケンス制御をサポートしていませんrebase [-i]
。