リモートリポジトリ
==ちなみに、よく出てくるoriginとmasterという名称==
用語 | 意味・内容 |
---|---|
origin | デフォルトのリポジトリ名。省略すると暗黙的にこの名前のリポジトリが対象となる。 *.gitconfigファイルで、デフォルトの変更も可能 |
master | CVS、SVNの”トランク”に相当する。リポジトリが作成されるとこのブランチも作成される。 |
なので、リモート操作でよくみるorigin/master
という表記は、
「エイリアス名==origin==で登録されている(リモート)リポジトリのブランチ==master==」ということになる。
リモートリポジトリをローカルリポジトリへ追加する
リモートリポジトリへアクセスするためにはURLを指定すればよい。 が、どうしても長くなるので、エイリアス名で指定できるようにローカルリポジトリに 登録することができる。これより、URL部分をエイリアス名に置き換えてコマンドを実行できる。
$ git remote add (エイリアス名) (URL) $ git remote add test git://hoge.com/test.git $ cat .git/config : [remote "origin"] url = https://github.com/hogehoge/sample.git fetch = +refs/heads/*:refs/remotes/origin/* [remote "test"] url = git://hoge.com/test.git fetch = +refs/heads/*:refs/remotes/origin/*
$ git fetch test
remote: Counting objects: 43, done.
remote: Compressing objects: 100% (36/36), done.
remote: Tootal 43 (delta 10), reused 31 (delta 5)
:
リモートリポジトリの一覧を表示
$ git remote -v
リモートリポジトリの詳細確認
リモートリポジトリ名を指定して詳細設定を確認する
$ git remote show origin * remote origin Fetch URL: https://github.com/hogehoge/sample.git Push URL: https://github.com/hogehoge/sample.git HEAD branch: master Remote branches: b01 tracked b02 new (next fetch will store in remotes/origin) master tracked Local branch configured for 'git pull': master merges with remote master Local refs configured for 'git push': b01 pushes to b01 (fast-forwardable) b02 pushes to b02 (local out of date) master pushes to master (up to date)
リモートリポジトリのエイリアス名を変更する
git remote rename (old name) (new name)
リモートリポジトリのエイリアス名を削除
git remote rm (name)
リモートリポジトリ操作に関して
おもにリモートリポジトリに対して行う操作とその役割を簡単にまとめると、
操作 | 内容 |
---|---|
clone | ローカルに何もない状態から、リモートのリポジトリを指定して、丸ごとローカルにリポジトリをコピーする。恐らくリモート操作で最初にやる処理。clone作成後、ローカルにはリモートから丸ごとコピーされた場合、origin/master というリモートに結びついたブランチが作成される。 |
fetch | リモートのリポジトリと、cloneしたローカルにあるリモート情報に差異が発生した場合、fetch を行うと、リモートの情報を取得してローカルのリモート情報が更新される。ただしこの操作を行っても、ローカルのmaster ブランチは何も更新されない。あくまで、ローカルのリモート情報のみ更新する。 |
merge | ブランチ間のマージを行う。リモートのブランチとローカルのブランチもマージ可能。 |
pull | 一言で言うと、fetch + merge . fetch, merge, rebaseさえあれば、pullコマンドはなくても良い。内部でいろいろ自動的にやっているので、pullしたくないケースや、意図しない結果に陥ることが多い。使うな名言している投稿もある。 |
push | ローカルのリポジトリ情報をリモートリポジトリへアップロードする。 |
リモートリポジトリのクローンを作成する
リモートにあるリポジトリからローカルにクローンを作成する
> git clone (URLまたはエイリアス名) (フォルダ名) > git clone ssh://hoge.com/repositories/repo.git sample
> git remote add hoge ssh://hoge.com/repositories/repo.git
> git clone hoge sample
ローカルのリモートリポジトリ情報のみを更新する。
cloneまたは前回のfetch以降にpushされた内容をローカル・リポジトリに反映する。 ワーキングディレクトリのファイルのマージはされない。ワーキングディレクトリのファイルに 反映する場合は、後述する
git merge
を実行する必要がある。> git fetch [リポジトリURLまたはエイリアス名]
リモートリポジトリの変更をダウンロードして、さらにローカルブランチへマージする。
マージ先を省略すると、
HEAD
が対象になる。 コロンで区切られた箇所をrefspec
と呼ばれて、基本的にsrc:dist
という形式を取る。> git pull [リポジトリURLまたはエイリアス名] [リモートのマージ元]:[ローカルのマージ先] > git pull [リポジトリURLまたはエイリアス名] [ブランチ名]
ローカルリポジトリの変更をアップロードして、リモートリポジトリに反映する。
pushできる条件は、そのリポジトリからcloneしており、それ以降誰もpushして ないことが条件。リモートとローカルのリポジトリ内容に違いがある場合は、==pushできない==。 その場合、
git fetch
、git merge
またはgit pull
して、リモートとローカルのリポジトリの 整合性を合わせてから実行する。下記例だと、ローカルのmybranchをリモートリポジトリoriginの masterブランチにマージすることになる。
$ git push [リポジトリURLまたはエイリアス名] [ローカルのブランチ名]:[リモートのブランチ名] $ git push origin master:master $ git push [リポジトリURLまたはエイリアス名] [ブランチ名] $ git push origin master