[解決済み] git remote update と fetch の違い?
質問
は
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 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年半も前のもので、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) .
指定したリモコン群の取得
すべてのリモートを取得するのではなく、両方の
fetch
と
remote 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 fetch
と
git remote update
は、複数のリモートからの取得に関して似たような動作をします。 これらは同じような構文と引数を持ちますが
git fetch
の方が短いので、入力しやすく、使いやすいと感じる人が多いのでしょう。
ということもあるかもしれません。
git remote update
のように単一のリモートのみを取得するために使用することはできません。
git fetch
しかし、私が指摘したように、ドキュメントではこの点が明確ではありません。
脇
Git磁器コマンドの間で機能が重複していること、例として
git fetch
と
git remote update
は、一意ではありません。 同じような状況に気づいたのは
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 で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] 新しいローカルブランチをリモートの Git リポジトリにプッシュし、それを追跡するにはどうすればよいのでしょうか?
-
[解決済み] Git のリモートブランチを作成する方法を教えてください。
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】GitHubで空のブランチを作成する
-
[解決済み】Githubエンタープライズ - リモート。Git の操作でパスワード認証が利用できない
-
[解決済み] [Solved] originにプッシュしようとすると、Gitが「No such remote 'origin'」と言うのはなぜですか?
-
[解決済み] 複数のgitコミットを元に戻すには?
-
[解決済み] ERROR: リモートレポ 'origin' のクローン作成に失敗しました。
-
[解決済み] TortoiseGitで「git did not exit cleanly (exit code 128)」というエラーを解決するには?[クローズド]
-
[解決済み] fatal: bad revision "とはどういう意味ですか?
-
[解決済み] Gitのフォルダ構造で変更・追加されたファイルのみをエクスポートする機能
-
[解決済み] ssh-keygen' は内部コマンドまたは外部コマンドとして認識されません。
-
[解決済み] 新しいBitbucketでリポジトリを削除するにはどうすればよいですか?