Posted at

リモートリポジトリの登録とデフォルトリモートブランチの設定

More than 3 years have passed since last update.


はじめに

リモートリポジトリ(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