1. ホーム
  2. git

[解決済み] git remote update と fetch の違い?

2022-05-01 05:51:25

質問

git remote update と同等です。 git fetch ?

解決方法は?

UPDATE: 詳細情報!

最初からこうしておけばよかった。GitのリリースノートをGitのGitレポでググってみた(めっちゃメタ!)。

grep --color=always -R -C30 fetch Documentation/RelNotes/* | less

それから、私は less を検索してください。 --all の下には、このようなものがありました。 Git バージョン 1.6.6 のリリースノート :

git fetch 学ぶ --all そして --multiple オプションは、多くのリポジトリからフェッチを実行するために、そして --prune オプションで、古くなったリモート追跡用ブランチを削除します。 これらにより git remote updategit remote prune は不要になりました(削除の予定はありません)。 remote update また remote prune とはいえ)。

バージョン1.6.6がリリースされたのは 2009年12月23日 という質問に対して、元投稿者は2009年12月6日に質問しています。

つまり、リリースノートからわかるように、Git の作者は git remote update コマンドの機能とは多少重複しますが git fetch 既存のスクリプトやプログラムとの後方互換性のためか、あるいは単に作業が多すぎて、より優先順位の高い項目があるためか、削除しないことにしました。


より詳細なオリジナル回答

xenoterracideの回答 はもう3年半も前のもので、Gitはそれ以来何度もバージョンを変えてきました。 v1.6.5.5 からv1.8.3.2まで)、そして、この記事の執筆時点では 現在 のドキュメントを参照してください。 git remote update git fetch のように見えます。 は、複数のリモートから新しいコミットを取得するという基本的に同じ機能を実行することができます。 正しいオプションと引数があれば

すべてのリモートを取得する

複数のリモートを取得する方法のひとつに --all フラグを使用します。

git fetch --all

これは、設定されているすべてのリモートから取得します。 remote.<name>.skipFetchAll を設定します。

<ブロッククオート

true の場合、このリモートは、デフォルトで git-fetch(1) のupdateサブコマンド、または git-remote(1) . - git-config ドキュメント

を使用することと同じになります。

git remote update

取得するリモートグループを指定せず、また remotes.default が設定されていないこと、また、どのリモートも、レポの設定に remote.<name>.skipDefaultUpdate をtrueに設定してください。

は、その Gitの設定に関する現在の1.8.3.2ドキュメント には触れていません。 remotes.default の設定ですが、全知全能のGoogleに相談したところ、以下のような親切な解説がありました。 ミスラフ・マローニッチ :

$ 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のドキュメント は、このように説明しています。

<ブロッククオート

を使用して更新する場合、このリモートはデフォルトでスキップされます。 git-fetch(1) のupdateサブコマンド、または git-remote(1) .

指定したリモコン群の取得

すべてのリモートを取得するのではなく、両方の fetchremote update を使用すると、複数のリモートやリモートグループを指定して取得することができます。

git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)…]

git fetch [<options>] <group> は、グループに属する複数のリモートを取得することができます(別の例として ミスラフ ):

$ git config remotes.mygroup 'remote1 remote2 ...'
$ git fetch mygroup

git fetch --multiple では、一度に取得する複数のリポジトリやリポジトリグループを指定することができます( ドキュメント ):

複数を許可する <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 コマンドには、複数のグループ引数やリモート引数を指定することについては何も書かれておらず、ただ単に

で定義されたリポジトリ内の指定されたリモートの更新をFetch[es]します。 remotes.<group> .

というのは不明です。 git remote update と同じように動作します。 git fetch --multiple は、複数の個別リモートと複数のリモートグループを指定することができます。

単一のリモートを取得する

最後に、単一のリモートをフェッチするシンプルなケースを誰もが知っています。

git fetch <remote>

ということもあるかもしれません。

git remote update <remote>

を使えば同じことができるのですが、前節で述べたように、ドキュメントには git remote update 以外のものを取得することが可能かどうかについては不明です。 グループ コマンドを使用したリモートの

まとめ

説明したとおりです。 git fetchgit remote update は、複数のリモートからの取得に関して似たような動作をします。 これらは同じような構文と引数を持ちますが git fetch の方が短いので、入力しやすく、使いやすいと感じる人が多いのでしょう。

ということもあるかもしれません。 git remote update のように単一のリモートのみを取得するために使用することはできません。 git fetch しかし、私が指摘したように、ドキュメントではこの点が明確ではありません。

Git磁器コマンドの間で機能が重複していること、例として git fetchgit remote update は、一意ではありません。 同じような状況に気づいたのは git rebase --onto git cherry-pick というのは、どちらも新しいベースコミットにパッチを適用するために、ある範囲のコミットを取ることができるからです。

Git が長年にわたって進化するにつれ、いくつかの機能が(必然的に?)重複してきたと思います。おそらくエンドユーザーの利便性を考慮してのことでしょう(たとえば、範囲を cherry-pick 一つのコミットを何度も渡して範囲を選択するよりも)。 どうやら cherry-pick で説明されているように、必ずしもコミットの範囲を受け入れるとは限りませんでした。 v1.7.2 リリースノート :

<ブロッククオート

git cherry-pick は、コミットの範囲を選択することを学びました (例. cherry-pick A..Bcherry-pick --stdin ) も、そうでした。 git revert これらは、より洗練されたシーケンス制御をサポートしていません。 rebase [-i] は持っていますが。