はじめに
リモートリポジトリ(Git Hub)を登録および、デフォルトリモートブランチの
設定について解説しています。
リモートリポジトリの登録
事前にGit Hub側でリポジトリを作成しておき、以降の作業は
手元のローカルリポジトリ上で作業を進めます。
# git blanch -l
* master
# touch README.md
# git add README.md
# git commit -m "First commit"
この時点での".git/config"は下記の状態です
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
手元の開発環境のリモートリポジトリとして、Git Hub側のリポジトリを登録します。
ここでは、リモートリポジトリ名をoriginalとします。
$ git remote add original git@github.com:hoge/test.git
この時点での".git/config"は下記の状態です。
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "original"] <-- originalという名前のリモートリポジトリが登録された
url = git@github.com:hoge/test.git
fetch = +refs/heads/*:refs/remotes/original/*
デフォルトリモートブランチの設定
git push
コマンド実行時に-u
オプションを指定することで
ローカルリポジトリのブランチとリモートリポジトのブランチの対応付けが行われます。
これにより、2回目以降はpullの場合はgit pull
、pushの場合はgit push
コマンド
とするだけでOKになります。
# git blanch -l
* master
$ git push -u original master
Enter passphrase for key '/home/hoge/.ssh/id_rsa':
Counting objects: 3, done.
Writing objects: 100% (3/3), 257 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:hoge/test.git
* [new branch] master -> master
Branch master set up to track remote branch master from original.
この時点での".git/config"は下記の状態です
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "original"]
url = git@github.com:hoge/test.git
fetch = +refs/heads/*:refs/remotes/original/*
[branch "master"] <-- これが追加された
remote = original
merge = refs/heads/master
他ブランチの設定
先ほどの例ではmasterブランチ上でデフォルトリモートブランチを
作成しましたが、今度はローカルリポジトリ上で新たにnew_branchを
作成し、デフォルトリモートブランチを作成します。
$ git checkout -b new_branch
Switched to a new branch 'new_branch'
$ git branch
master
* new_branch
$ git push -u original new_branch
Enter passphrase for key '/home/hoge/.ssh/id_rsa':
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:hoge/test.git
* [new branch] new_branch -> new_branch
Branch new_branch set up to track remote branch new_branch from original.
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "original"]
url = git@github.com:hoge/test.git
fetch = +refs/heads/*:refs/remotes/original/*
[branch "master"]
remote = original
merge = refs/heads/master
[branch "new_branch"] <--新しく追加されている
remote = original
merge = refs/heads/new_branch
ローカルリポジトリとリモートリポジトリのブランチ名が異なる場合の登録
これまでの説明ではローカルリポジトリとリモートリポジトリのブランチ名が
同じであることを前提にして説明していました。
ローカルリポジトリとリモートリポジトリでブランチ名が異なる場合は下記のように
エラーになってしまいました。
$ git checkout -b topic
$ touch topic_file1
$ git add topic_file1
$ git commit -m "add topic_file1"
$ git push -u original cipot
Enter passphrase for key '/home/hoge/.ssh/id_rsa':
error: src refspec cipot does not match any.
error: failed to push some refs to 'git@github.com:seak0503/test.git'
通常は、ローカルリポジトリをリモートに反映する場合は
git push origin hoge
のようにしていますが、このコマンドは省略形であり
完全系はgit push origin hoge:hoge
になります。
hoge:hoge
の部分はローカルリポジトリのブランチ:リモートリポジトリのブランチ
を示します。
例えば下記のように実施すると上手くいくようです。
$ git push -u original topic:cipot
Enter passphrase for key '/home/hoge/.ssh/id_rsa':
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:seak0503/test.git
* [new branch] topic -> cipot
Branch topic set up to track remote branch cipot from original.
この時点での".git/config"は下記の状態です
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "original"]
url = git@github.com:hoge/test.git
fetch = +refs/heads/*:refs/remotes/original/*
[branch "master"]
remote = original
merge = refs/heads/master
[branch "new_branch"]
remote = original
merge = refs/heads/new_branch
[branch "topic"] <-- これが追加された
remote = original
merge = refs/heads/cipot