Git Remote¶
Gitはたくさん特長があり、一つはremote操作がとても便利です。ここで五つgitコマンドの概要、使い方を説明します。

git clone¶
リモート操作の始め、リモートサーバからレポジトリをcloneする。
1 2 3 4 | $ git clone <レポジトリのアドレス> # 例えば、jQueryのレポジトリをcloneする場合は $ git clone https://github.com/jquery/jquery.git |
このコマンドをローカルで一つフォルダを生成して、名称は、リモートのレポジトリ名と同じです。違うフォルダ名を指定する場合は、二つ目のパラメータを指定できます。
1 | $ git clone <レポジトリのアドレス> <ローカルのフォルダー名> |
git cloneは複数のプロトコルをサポートできます,HTTP(s)のほか,SSHや、Gitや、ローカルファイルプロトコルなど
1 2 3 4 5 6 7 8 | $ git clone http[s]://example.com/path/to/repo.git/ $ git clone ssh://example.com/path/to/repo.git/ $ git clone [user@]example.com:path/to/repo.git/ $ git clone git://example.com/path/to/repo.git/ $ git clone /opt/git/project.git $ git clone file:///opt/git/project.git $ git clone ftp[s]://example.com/path/to/repo.git/ $ git clone rsync://example.com/path/to/repo.git/ |
常に、gitプロトコルを使う場合は、ダウンロードのスピードが一番早い。
git remote¶
管理しやすくなるために、Gitでは各リモートホストがホスト名を指定する必要があります。 git remoteコマンドは、ホスト名を管理するために使用されます。
1 2 3 4 5 6 | $ git remote origin $ git remote -v origin git@github.com:jquery/jquery.git (fetch) origin git@github.com:jquery/jquery.git (push) |
オプションはない場合は、すべてのリモートホストを表示します。 オプション「-v」、リモートホストのアドレスを表示します。 上記のコマンドで、リモートホストは1台しかないと見えます、名前は:originです。
レポジトリをcloneするときに、リモートホストの名称は自動的に「origin」で定義して、他の名称を指定したい場合は「-o」で指定
1 2 3 | $ git clone -o jQuery https://github.com/jquery/jquery.git $ git remote jQuery |
上記のコマンドで、リモートホスト名をjQueryで定義する
| git remote command | 説明 |
|---|---|
| $ git remote show |
ホストの詳細情報を表示する |
| $ git remote add |
リモートホストを追加する |
| $ git remote rm |
リモートホストを削除する |
| $ git remote rename |
リモートホストの名称を変更 |
git fetch¶
リモートレポジトリで、更新がある場合は、ローカルに取得したいときに、git fetchを使う
1 | $ git fetch <host_name> |
リモートレポジトリの更新をすべてローカルに取得する 常に、「git fetch」で他人の進捗を確認できて、取得したソースは、ローカルで開発されたソースに影響がありません。 デフォルトとしては、すべてのブランチの更新を取得し、特定のブランチを取得したい場合は、ブランチ名を指定できる。
1 2 3 | $ git fetch <host_name> <branch_name> // 例えば: $ git fetch origin master |
取得した更新は、ローカルで、「host_name/branch」の形式で読み込みです。例えば「origin/master」
git branchのオプション「-r」,リモートブランチを表示。「-a」すべてのブランチを表示する。
1 2 3 4 5 6 | $ git branch -r origin/master $ git branch -a * master remotes/origin/master |
取得した「origin/master」に基づいて、git checkoutコマンド新しいブランチを新規できる
1 | $ git checkout -b newBranch origin/master |
尚、git mergeとgit rebaseのコマンドで、ローカルブランチにリモートブランチを合併することができる。
1 2 3 | $ git merge origin/master # 或いは $ git rebase origin/master |
git pull¶
リモートブランチの更新を取得して、ローカルで指定するブランチに合併する、完全なフォーマット以下です。
1 | $ git pull <remote_host> <remote_branch>:<local_branch> |
例えば:originのnextブランチを取得して、ローカルのmasterに合併する、以下の例:
1 | $ git pull origin next:master |
もし、リモートブランチを現在のブランチに合併すると、「:」以後のlocal_branchを省略できる。
1 2 3 4 5 6 | # ** pull == fetch + merge ** $ git pull origin next $ git fetch origin $ git merge origin/next |
ローカルブランチの名は、リモートブランチと同じ場合は、git pullのリモートブランチ名を省略できる
1 | $ git pull origin |
現在のブランチに一つ追跡ブランチ(remote-tracking branch)しかない場合は、リモート名も省略できる
1 | $ git pull |
合併は、rebaseモードに必要な場合は、--rebaseで指定できる
1 | $ git pull --rebase <remote_host> <remote_branch>:<local_branch> |
リモートで、ブランチを削除するときに、デフォルトとして、git pullでローカルのブランチを削除しません。 もし、ローカルで、既にリモートから削除したブランチも削除したい場合は、「-p」で指定できる
1 2 3 4 | $ git pull -p # 等同于下面的命令 $ git fetch --prune origin $ git fetch -p |
git push¶
git pushは、ローカルでの修正をリモートにpushする
1 | $ git push <remote_host> <local_branch>:<remote_branch> |
注意: * ブランチの指定は、git pullと逆です。 * 同じ名称になる場合は、リモートブランチ名も省略できる * リモートブランチが存在しない場合は、新規する
1 | $ git push origin master |
1 2 3 | $ git push origin :master # 同じ $ git push origin --delete master |
ローカルのmasterを省略すると、指定するリモートブランチを削除する意味です。空のローカルブランチでリモートブランチにpushしたと理解する もし、現在のブランチはリモートと追跡ブランチ(remote-tracking branch)でしたら、ローカルブランチもリモートも省略できる
1 | $ git push origin |
1 | $ git push |
1 | $ git push -u origin master |
originをデフォルトホストとして指定したので、これからの操作は、パラメータを必要なくなる
パラメータなしのgit pushは、デフォルトは現在ブランチのみをpushする、simple方式と呼ばれる。 すべてのローカルブランチをoriginにpushする場合は、[--all]で指定する
1 | $ git push --all origin |
リモートのバージョンは、ローカルより最新でしたら、pushするときにエラーがある。
この時にローカルでgit pullで合併してから再度git pushでpushする。
もし、どうしてもpushしたい場合は、[--force]で指定できる
1 | $ git push --force origin |
できるだけ[--force]を使用することを退避する
最後、git pushはtagをpushしないので、pushしたい場合は[--tags]で指定する
1 | $ git push origin --tags |