git

概要

ここでは, git の速習を覚書として残す.

設定・仮定

  • リモートリポジトリをサーバ hogehoge.org に設置する.
  • ユーザは fuga.
  • リモートサーバ, ローカルともに git 関連のパッケージがインストールされている.
  • 以降, 特に断りのない限り, リモートリポジトリを「リモート」, ローカルリポジトリを「ローカル」と表現する.

リモートの設定 (--bare init)

  1. サーバ hogehoge.org の任意の場所にリポジトリ用のディレクトリ gitrepo (名前は任意) を作成する.
  2. gitrepo 内でリポジトリの初期化を行う.
$ mkdir gitrepo
$ cd gitrepo
$ git --bare init  # リポジトリの初期化
Initialized empty Git repository in /home/fuga/gitrepo/
$ ls
branches  config  description  HEAD  hooks  info  objects  refs

ローカルの設定 (init, remote add)

  1. リポジトリ用のディレクトリ test1 とテストファイル test.f を用意する.
  2. init で git を初期化する.
  3. リモートの位置を指定する.
$ mkdir test1
$ touch test.f
$ cd test1
$ git init   # リポジトリの初期化
Initialized empty Git repository in /home/fuga/test1/.git
$ ls -a
. .. .git test.f
$ git remote add origin fuga@hogehoge.org:/home/fuga/gitrepo  # リモート先の指定
$ git remote -v    # 設定の確認
origin fuga@hogehoge.org:/home/fuga/gitrepo (fetch)
origin fuga@hogehoge.org:/home/fuga/gitrepo (push)

リモートの移動

取得するリモート先が /home/fuga/gitrepo から /home/fuga/modif に変わった場合.

$ git remote -v
origin fuga@hogehoge.org:/home/fuga/gitrepo (fetch)
origin fuga@hogehoge.org:/home/fuga/gitrepo (push)
$ git remote set-url origin fuga@hogehoge.org:/home/fuga/modif
origin fuga@hogehoge.org:/home/fuga/modif (fetch)
origin fuga@hogehoge.org:/home/fuga/modif (push)

ポート番号の指定

取得するリモート先のポート番号を指定する.

デフォルトは ssh で設定されているポートへアクセスしようとするが, ローカルとリモートで ssh のポート番号が異なる場合, 以下のようにして, リモート先のリポジトリを指定する.

以下では, ポート番号として 22 番を指定する場合.

  • clone の場合
$ git clone ssh:fuga@hogehoge.org:22/home/fuga/gitrepo
  • pull, push の場合
$ git push(pull) ssh:fuga@hogehoge.org:22/home/fuga/gitrepo master

基本的に, origin では指定できず, 丁寧にすべて記載しなければならない.

リモートからの取得 (clone)

リモートからローカルへデータを取得する.

  1. ローカルの任意の場所にリポジトリ用のディレクトリ test (名前は任意) を作成する.
  2. clone によってリモートからリポジトリを取得する.
$ mkdir test
$ cd test
$ git clone fuga@hogehoge.org:/home/fuga/gitrepo   # リモートからのコピー
$ ls
gitrepo

リモートへの反映 (add, commit, push)

ローカルでの変更をリモートに反映する. ここでは, test1.f を修正, test2.f を testt.f にリネーム, test3.f を消去してリモートへ反映すると仮定する.

  1. 変更したファイルは add, リネームしたファイルは mv, 削除したファイルは rm でリポジトリに反映する.
  2. commit でコミットする.
  3. push でリモートに反映する.
$ git add test1.f
$ git mv test2.f testt.f
$ git rm test3.f
# 以上が (1) に対応.
$ git commit    # これだけだと, エディタを起動して本格的な?コミットメールが作れる.
or
$ git commit -m 'ここにコミット内容等を書く'
$ git push origin master   # 今いるブランチが master ブランチだとする.
.... 以下, コミット内容が表示される ....

ブランチを切る (branch)

デフォルトでは, master ブランチのみ存在しているので, ここでは test という名前の別ブランチを作成する.

$ git branch   # master ブランチのみ.
* master
$ git branch test   # test という新ブランチを作成する.
$ git branch    # test というブランチができたが, ユーザはまだ master ブランチにいる.
* master
  test

ブランチを切り替える (checkout)

上で作成した test ブランチに移動する.

$ git branch
* master
  test
$ git checkout test
$ git branch
  master
* test

アスタリスクが今いるブランチを表している.

リモートリポジトリの任意ブランチを clone する

git clone はデフォルトではリモートリポジトリの master ブランチを clone する. リモートに複数ブランチが存在する場合は以下のコマンドで適宜 clone できる.

$ git branch -r      # リモートリポジトリのブランチを全て表示する.
origin/master
origin/hero
...

hero ブランチを clone する場合は, 以下.

$ git checkout -b hero origin/hero   # 引数は "hero" = ローカルブランチ名, "origin/hero" = リモートブランチ名

コミット履歴の閲覧

GUI ソフトウェア gitk を用いればよい.

$ gitk

git + svn(リモートが subversion ベースの場合)

前準備

$ sudo apt-get install git-svn

clone

リモートのリポジトリが /home/fuga/test/svnroot/repo1 の場合.

$ git svn clone svn+ssh://[ssh のドメイン名]/home/fuga/test/svnroot/repo1 .

リモートの update をローカルに反映

$ git svn rebase

ローカルにコミット

$ git commit

リモートにコミット

$ git svn dcommit

このコマンドは git でいう git commit + git push に相当する.

ssh ポート転送を利用する

環境

  • ローカル (localhost) から踏み台サーバ (inter.org) を経由してリモートリポジトリサーバ (target.org) にアクセスする (下図):

    localhost(50080) <==> inter.org <==> target.org(22)  # () 内はポート番号
    localhost <=x=> target.org(22)  # localhost と target.org は直接アクセスできない.

設定

リモートリポジトリを設定あるいは変更 (以下は変更する場合)

$ git remote -v
origin	user@target.org:/[リモートリポジトリ path] (fetch)
origin	user@target.org:/[リモートリポジトリ path] (push)
$ git remote set-url origin ssh://user@localhost:50080/[リモートリポジトリ path]
$ git remote -v
origin	ssh://user@localhost:50080/[リモートリポジトリ path] (fetch)
origin	ssh://user@localhost:50080/[リモートリポジトリ path] (push)

リモートリポジトリへのアクセス手順

  1. バックグラウンドでポート転送

    $ ssh f -N -L 50080:target.org:22 inter.org
    # -> inter.org のパスワードを入力 -> バックグラウンド転送開始
  2. localhost からリモートリポジトリにアクセス (以下は例)

    $ git pull origin 
    localhost's password:  # -> target.org のパスワード入力
  3. バックグラウンド転送終了

    $ kill -9 [pid]

参考文献


1 つ上に戻る

メインページに戻る