git
概要
ここでは, git の速習を覚書として残す.
設定・仮定
- リモートリポジトリをサーバ hogehoge.org に設置する.
- ユーザは fuga.
- リモートサーバ, ローカルともに git 関連のパッケージがインストールされている.
- 以降, 特に断りのない限り, リモートリポジトリを「リモート」, ローカルリポジトリを「ローカル」と表現する.
リモートの設定 (--bare init)
- サーバ hogehoge.org の任意の場所にリポジトリ用のディレクトリ gitrepo (名前は任意) を作成する.
- 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)
- リポジトリ用のディレクトリ test1 とテストファイル test.f を用意する.
- init で git を初期化する.
- リモートの位置を指定する.
$ 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)
リモートからローカルへデータを取得する.
- ローカルの任意の場所にリポジトリ用のディレクトリ test (名前は任意) を作成する.
- 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 を消去してリモートへ反映すると仮定する.
- 変更したファイルは add, リネームしたファイルは mv, 削除したファイルは rm でリポジトリに反映する.
- commit でコミットする.
- 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)
リモートリポジトリへのアクセス手順
バックグラウンドでポート転送
$ ssh f -N -L 50080:target.org:22 inter.org # -> inter.org のパスワードを入力 -> バックグラウンド転送開始
localhost からリモートリポジトリにアクセス (以下は例)
$ git pull origin localhost's password: # -> target.org のパスワード入力
バックグラウンド転送終了
$ kill -9 [pid]
参考文献
- サルでもわかる Git 入門 様
- Git のリポジトリを移動する方法
- git --fast-version-control 様
- subversion リポジトリでも git が使える git-svn
- リモートのブランチを clone する