日本語 ▾ トピック ▾ 最新バージョン ▾ git-remote は 2.45.0 で最終更新されました

名前

git-remote - 追跡しているリポジトリのセットを管理する

概要

git remote [-v | --verbose]
git remote add [-t <branch>] [-m <master>] [-f] [--[no-]tags] [--mirror=(fetch|push)] <name> <URL>
git remote rename [--[no-]progress] <old> <new>
git remote remove <name>
git remote set-head <name> (-a | --auto | -d | --delete | <branch>)
git remote set-branches [--add] <name> <branch>…​
git remote get-url [--push] [--all] <name>
git remote set-url [--push] <name> <newurl> [<oldurl>]
git remote set-url --add [--push] <name> <newurl>
git remote set-url --delete [--push] <name> <URL>
git remote [-v | --verbose] show [-n] <name>…​
git remote prune [-n | --dry-run] <name>…​
git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…​]

説明

追跡しているリポジトリ ("リモート") のセットを管理します。

オプション

-v
--verbose

少し詳細に出力し、名前の後にリモートURLを表示します。プロミサーリモートの場合、どのフィルター(blob:none など)が設定されているかも表示します。注意: これは remote とサブコマンドの間に配置する必要があります。

コマンド

引数がない場合、既存のリモートのリストを表示します。リモートに対する操作を実行するためにいくつかのサブコマンドが利用可能です。

add

<URL> にあるリポジトリに対して <name> という名前のリモートを追加します。その後、コマンド git fetch <name> を使用して、リモート追跡ブランチ <name>/<branch> を作成および更新できます。

-f オプションを使用すると、リモート情報が設定された直後に git fetch <name> が実行されます。

--tags オプションを使用すると、git fetch <name> はリモートリポジトリからすべてのタグをインポートします。

--no-tags オプションを使用すると、git fetch <name> はリモートリポジトリからタグをインポートしません。

デフォルトでは、フェッチされたブランチ上のタグのみがインポートされます (git-fetch[1] を参照してください)。

-t <branch> オプションを使用すると、デフォルトの glob リファレンススペックで refs/remotes/<name>/ 名前空間のすべてのブランチを追跡する代わりに、<branch> のみを追跡するリファレンススペックが作成されます。すべてのブランチを取得せずに複数のブランチを追跡するには、複数の -t <branch> を指定できます。

-m <master> オプションを使用すると、シンボリック参照 refs/remotes/<name>/HEAD がリモートの <master> ブランチを指すように設定されます。set-head コマンドも参照してください。

--mirror=fetch でフェッチミラーが作成されると、参照は refs/remotes/ 名前空間に保存されず、リモートの refs/ のすべてがローカルリポジトリの refs/ に直接ミラーリングされます。このオプションはベアリポジトリでのみ意味があります。なぜなら、フェッチするとローカルのコミットが上書きされるからです。

--mirror=push でプッシュミラーが作成されると、git push は常に --mirror が渡されたかのように動作します。

rename

<old> という名前のリモートを <new> に名前変更します。リモートのすべてのリモート追跡ブランチと設定が更新されます。

<old> と <new> が同じで、<old> が $GIT_DIR/remotes または $GIT_DIR/branches の下のファイルである場合、リモートは設定ファイル形式に変換されます。

remove
rm

<name> という名前のリモートを削除します。リモートのすべてのリモート追跡ブランチと設定が削除されます。

set-head

指定されたリモートのデフォルトブランチ(つまり、シンボリック参照 refs/remotes/<name>/HEAD のターゲット)を設定または削除します。リモートにデフォルトブランチがある必要はありませんが、特定のブランチの代わりにリモートの名前を指定できます。例えば、origin のデフォルトブランチが master に設定されている場合、通常 origin/master を指定する場所で origin を指定できます。

-d または --delete を使用すると、シンボリック参照 refs/remotes/<name>/HEAD が削除されます。

-a または --auto を使用すると、リモートの HEAD を決定するためにリモートが照会され、その後シンボリック参照 refs/remotes/<name>/HEAD が同じブランチに設定されます。たとえば、リモート HEADnext を指している場合、git remote set-head origin -a はシンボリック参照 refs/remotes/origin/HEADrefs/remotes/origin/next に設定します。これは refs/remotes/origin/next がすでに存在する場合にのみ機能します。存在しない場合は、最初にフェッチする必要があります。

<branch> を使用して、シンボリック参照 refs/remotes/<name>/HEAD を明示的に設定します。たとえば、git remote set-head origin master はシンボリック参照 refs/remotes/origin/HEADrefs/remotes/origin/master に設定します。これは refs/remotes/origin/master がすでに存在する場合にのみ機能します。存在しない場合は、最初にフェッチする必要があります。

set-branches

指定されたリモートによって追跡されるブランチのリストを変更します。これは、リモートの初期設定後に、利用可能なリモートブランチのサブセットを追跡するために使用できます。

指定されたブランチは、git remote add コマンドラインで -t オプションで指定されたかのように解釈されます。

--add を指定すると、現在追跡されているブランチのリストを置き換えるのではなく、そのリストに追加します。

get-url

リモートのURLを取得します。insteadOf および pushInsteadOf の設定がここで展開されます。デフォルトでは、最初のURLのみがリストされます。

--push を指定すると、フェッチURLではなくプッシュURLが照会されます。

--all を指定すると、リモートのすべてのURLがリストされます。

set-url

リモートのURLを変更します。リモート <name> の regex <oldurl> に一致する最初のURL(<oldurl> が指定されていない場合は最初のURL)を <newurl> に設定します。<oldurl> がどのURLにも一致しない場合、エラーが発生し、何も変更されません。

--push を指定すると、フェッチURLではなくプッシュURLが操作されます。

--add を指定すると、既存のURLを変更するのではなく、新しいURLが追加されます。

--delete を指定すると、既存のURLを変更するのではなく、regex <URL> に一致するすべてのURLがリモート <name> から削除されます。プッシュ以外のURLをすべて削除しようとするとエラーになります。

プッシュURLとフェッチURLは、異なる設定が可能ですが、それでも同じ場所を指している必要があることに注意してください。プッシュURLにプッシュした内容は、フェッチURLからすぐにフェッチした場合に表示される内容と同じである必要があります。ある場所(例: アップストリーム)からフェッチし、別の場所(例: 公開リポジトリ)にプッシュしようとしている場合は、2つの異なるリモートを使用してください。

show

リモート <name> に関するいくつかの情報を表示します。

-n オプションを指定すると、最初に git ls-remote <name> でリモートヘッダが照会されません。代わりにキャッシュされた情報が使用されます。

prune

<name> に関連付けられた古い参照を削除します。デフォルトでは、<name> の下の古いリモート追跡ブランチが削除されますが、グローバル設定とリモートの設定によっては、そこにプッシュされていないローカルタグも削除されることがあります。git fetch --prune <name> と同等ですが、新しい参照はフェッチされません。

様々な設定に応じて何が削除されるかについては、git-fetch[1] の PRUNING セクションを参照してください。

--dry-run オプションを指定すると、削除されるブランチを報告しますが、実際には削除しません。

update

remotes.<group> で定義されたリポジトリ内のリモートまたはリモートグループの更新をフェッチします。コマンドラインでグループもリモートも指定されていない場合、設定パラメータ remotes.default が使用されます。remotes.default が定義されていない場合、設定パラメータ remote.<name>.skipDefaultUpdate が true に設定されていないすべてのリモートが更新されます (git-config[1] を参照)。

--prune オプションを指定すると、更新されるすべてのリモートに対して剪定が実行されます。

考察

リモートの設定は、remote.origin.url および remote.origin.fetch 設定変数を使用して行われます (git-config[1] を参照)。

終了ステータス

成功した場合、終了ステータスは 0 です。

addrenameremove などのサブコマンドが対象のリモートを見つけられない場合、終了ステータスは 2 です。リモートが既に存在する場合、終了ステータスは 3 です。

その他のエラーの場合、終了ステータスは他の非ゼロ値である可能性があります。

  • 新しいリモートを追加し、フェッチして、そこからブランチをチェックアウトする

    $ git remote
    origin
    $ git branch -r
      origin/HEAD -> origin/master
      origin/master
    $ git remote add staging git://git.kernel.org/.../gregkh/staging.git
    $ git remote
    origin
    staging
    $ git fetch staging
    ...
    From git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging
     * [new branch]      master     -> staging/master
     * [new branch]      staging-linus -> staging/staging-linus
     * [new branch]      staging-next -> staging/staging-next
    $ git branch -r
      origin/HEAD -> origin/master
      origin/master
      staging/master
      staging/staging-linus
      staging/staging-next
    $ git switch -c staging staging/master
    ...
  • git clone を模倣するが、選択したブランチのみを追跡する

    $ mkdir project.git
    $ cd project.git
    $ git init
    $ git remote add -f -t master -m master origin git://example.com/git.git/
    $ git merge origin

GIT

git[1]スイートの一部

scroll-to-top