Git コマンドメモ4 (config, リモートリポジトリ操作など)

リモートリポジトリ

==ちなみに、よく出てくる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)

リモートリポジトリ操作に関して

おもにリモートリポジトリに対して行う操作とその役割を簡単にまとめると、

操作 内容
clone ローカルに何もない状態から、リモートのリポジトリを指定して、丸ごとローカルにリポジトリをコピーする。恐らくリモート操作で最初にやる処理。clone作成後、ローカルにはリモートから丸ごとコピーされた場合、origin/masterというリモートに結びついたブランチが作成される。
fetch リモートのリポジトリと、cloneしたローカルにあるリモート情報に差異が発生した場合、fetchを行うと、リモートの情報を取得してローカルのリモート情報が更新される。ただしこの操作を行っても、ローカルのmasterブランチは何も更新されない。あくまで、ローカルのリモート情報のみ更新する。
merge ブランチ間のマージを行う。リモートのブランチとローカルのブランチもマージ可能。
pull 一言で言うと、fetch + merge. fetch, merge, rebaseさえあれば、pullコマンドはなくても良い。内部でいろいろ自動的にやっているので、pullしたくないケースや、意図しない結果に陥ることが多い。使うな名言している投稿もある。
push ローカルのリポジトリ情報をリモートリポジトリへアップロードする。
  • リモートリポジトリのクローンを作成する

    リモートにあるリポジトリからローカルにクローンを作成する ```git

    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 ```

  • ローカルのリモートリポジトリ情報のみを更新する。

    追跡ブランチにリモートブランチのデータを反映する

> git fetch [リポジトリURLまたはエイリアス名]
  • リモートリポジトリの変更をダウンロードして、さらにローカルブランチへマージする。

    マージ先を省略すると、HEADが対象になる。 コロンで区切られた箇所をrefspecと呼ばれて、基本的にsrc:distという形式を取る。

> git pull [リポジトリURLまたはエイリアス名] [リモートのマージ元]:[ローカルのマージ先]
> git pull [リポジトリURLまたはエイリアス名] [ブランチ名]
  • ローカルリポジトリの変更をアップロードして、リモートリポジトリに反映する。

    下記例だと、ローカルのmybranchをリモートリポジトリoriginmasterブランチにマージすることになる。

$ git push [リポジトリURLまたはエイリアス名] [ローカルのブランチ名]:[リモートのブランチ名]
$ git push origin master:master
$ git push [リポジトリURLまたはエイリアス名] [ブランチ名]
$ git push origin master