git remote update
はgit fetch
と同等ですか?
更新:詳細情報!
最初からこれを行う必要がありました:GitのGitリポジトリでGitリリースノートをgrepしました(メタ!)
grep --color=always -R -C30 fetch Documentation/RelNotes/* | less
次に、less
で--all
を検索しましたが、これは Gitバージョン1.6.6のリリースノート :
git fetch
は、多くのリポジトリからフェッチを実行する--all
および--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に移行しています)。currentgit remote update
および git fetch
のドキュメント、それらは両方が新しいコミットをフェッチする基本的に同じ機能を実行できるように見えます複数のリモート、正しいオプションと引数を指定します。
複数のリモートを取得する1つの方法は、--all
フラグを使用することです。
git fetch --all
remote.<name>.skipFetchAll
が設定されていない場合、これは設定されたすべてのリモートから取得します。
Trueの場合、 git-fetch(1) または git-remote(1) のupdateサブコマンドを使用して更新する場合、このリモートはデフォルトでスキップされます。— — git-config documentation
これは、使用するのと同等です
git remote update
フェッチするリモートグループを指定せずに、リポジトリ構成でremotes.default
を設定しておらず、また、どのリモートでもremote.<name>.skipDefaultUpdate
をtrueに設定していないこと。
Gitの設定に関する現在の1.8.3.2ドキュメント はremotes.default
設定について言及していませんが、全能のGoogleに相談して MislavMarohnić :
$ 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>
で定義されているように、リポジトリ内のリモートの名前付きセットのFetch [es]更新。
したがって、複数の個別のリモートおよび複数のリモートグループを指定することに関して、git remote update
がgit fetch --multiple
と同じように機能するかどうかは不明です。
最後に、誰もが単一のリモートを取得する簡単なケースを知っています。
git fetch <remote>
あなたも使用できる場合があります
git remote update <remote>
同じことを行うために、前のセクションで述べたように、git remote update
のドキュメントは、コマンドでリモートの単一のgroup以外のものをフェッチできるかどうかについて不明です。
説明したように、git fetch
とgit remote update
は、複数のリモートからのフェッチに関して同様に動作します。 git fetch
はより短いので、それらは同様の構文と引数を共有します。
git remote update
を使用して、git fetch
のように単一のリモートをフェッチすることはできない場合もありますが、先ほど指摘したように、ドキュメントではこれを明確にしていません。
余談
上記のgit fetch
とgit remote update
で例示されているGit磁器コマンド間の機能の重複は一意ではありません。 git rebase --onto
と git cherry-pick
で同様の状況に気付きました。両方が新しいベースコミットにパッチを当てるために一定範囲のコミットを取ることができます。
Gitが長年にわたって進化してきたため、一部の機能は(必然的に?)複製されました。おそらくエンドユーザーの利便性のためかもしれません(たとえば、単一のコミットを渡すよりも、範囲をcherry-pick
に渡す方が簡単です)範囲を選択します)。どうやらcherry-pick
は、 v1.7.2リリースノート :
git cherry-pick
は、ある範囲のコミット(cherry-pick A..B
やcherry-pick --stdin
など)を選択することを学びました。したがって、git revert
も同様です。ただし、これらは、rebase [-i]
が持つ優れたシーケンス制御をサポートしていません。
はいといいえ。 git remote update
は、1つだけではなく、すべてのリモートからフェッチします。
remote update
が単なるシェルスクリプト(可能性あり)であるかどうかを確認するためにコードを見ずに、基本的に、各リモートに対してフェッチを実行します。 git fetch
はさらに細かくすることができます。