事のおこり
gitlabをユーザーとして使うことになったので、gitの使い方込みでまとめておく。
gitってそもそも?
分散管理型のバージョン管理システム。subversionなんかの中央一括管理型のバージョン管理システムを少し発展させた感じの使い方。
- リポジトリは全体で一つではなく一人一人が持つ
- ソースコード編集したら自分の持ってるリポジトリにコミットする
- 自分の変更を他人(もしくは自分)に適用したくなったら、大元のリポジトリにpush
- 自分のリポジトリを最新版にしたくなったら大本のリポジトリからpull
subversionのコミットと更新が細かいステップに別れた感じでしょうか。
わかりやすい説明がされているので次のページなんかをチェック。
(http://blog.asial.co.jp/894)
で、gitlabって?
gitでsubversionみたいな事しようとすると共有用の中央リポジトリが必要になるが、その中央リポジトリを管理するためのシステム。
オープンな環境ならGitHubがあるけどクローズドな環境で使いたいという時に。
今回の環境とかとか最初に読んでほしいこと
「gitlab導入したから使ってねー」って言われて便利そうだけど使い方わからねぇ! みたいな人を対象にしてます。
OSはUbuntuを想定する。winの方は別件で。
gitlabプロジェクト名はexample
gitlabサーバの名前はgitlab-server
各個人のgit上でのリモートリポジトリの名前はorigin
まずはgitlabにユーザー登録とかとか
管理者さんにアカウント作ってもらってるものとして、とりあえずはログイン。
ログインしたらRSA公開鍵をgitlabに登録しましょう。
ssh-keygen -t rsa
"~/.ssh/id_rsa.pub"に鍵が生成されるので、公開鍵の中身をまるっとすべてSSH Keysに登録すればとりあえずOK。
ついでに"~/.ssh/config"に次の設定を書きたしておく。xxx.xxx.xxx.xxxのところにはGitLabサーバーのIPアドレス入れてね。DNSで解決できるならホスト名でも。
Host gitlab-server HostName xxx.xxx.xxx.xxx IdentifyFile ~/.ssh/id_rsa
(http://d.hatena.ne.jp/eitya/20110622/1308675699)
※何故か公開鍵になってたので修正
あと、configは書かなくてもデフォルトでid_rsaを秘密鍵として使うみたいなので、秘密鍵がひとつだけ、って人はこれ書かなくてもいいみたいです。
手元にあるファイル郡からリポジトリを作成
リポジトリ作りたいディレクトリに移動して"git init"
"git add"でリポジトリに含めたいファイルを追加。いっぱいファイルあるなら"*.cc"みたいなワイルドカード使うと便利。
"git commit"でリポジトリに一度コミット。
cd <プロジェクトのディレクトリ> git init touch README git add README git commit
プロジェクトおったてて手元のリポジトリをgitlabに登録
gitlabの管理画面の方でgitlabプロジェクトを新しく作る。ここでは名前をexampleってことで。
作ったら出てくる画面に従ってリモートリポジトリの登録とpush。リモートリポジトリ名はoriginで。
git remote add origin git@gitlab-server:example.git push -u origin master
pushの時にパスワード要求されると思うので、公開鍵作った時に打ったパスワードを入力。
あと、オプションの"-u"を付けるとデフォルトでpush/pullされる先がoriginリモートリポジトリのmasterブランチになるそうです。
(http://usualoma.hatenablog.com/entry/20110214/1297644592)
もしoriginの登録間違えたら
git rm origin
で一度登録を消す。
リポジトリをclone
リポジトリを持ってきたいディレクトリに移動して次のコマンド
git clone git@gitlab-server:example.git
gitlabプロジェクト名はgitlabの管理ページの"git clone"のところに表示されているものと同一である必要があり、大文字小文字の違いですら弾かれるので注意。恥ずかしながら、僕はここでハマりました。
ちなみにコマンドにこだわらなくてもgitlabの管理ページからダウンロードしてくるという手もあります。
pullとpush
さて、ここまで終わればあとは各環境でpullして編集してcommitしてpushする一連の作業に入れるわけです。
ただこれ基本難しいことはなくて、リポジトリのディレクトリに移動して以下の3つのコマンドでOK。
git pull git commit -a git push
リモートリポジトリの登録の際の"-u"がイカしてますね。cloneで引っ張ってきた場合もpushだけでいいみたいです。
コミットのオプション"-a"は変更のあったファイルを自動検出してコミットしてくれる。でも新規作成されたファイルは検出しないらしい。はて? 新しくファイル追加したければ、リポジトリ作った時みたいに"git add xxx.xxx"と"git commit"を使えってことですかね。
(http://sourceforge.jp/magazine/09/03/16/0831212/3)
どこのリポジトリからどのブランチを・・・とか指定する場合はいろいろありますがここでは割愛。
リモートリポジトリの管理
gitlab上のリポジトリはユーザーからするとリモートリポジトリという事になるが、各ユーザー内でのリモートリポジトリの管理について補足。
まず、各個人のgit上でリモートリポジトリに名前を付けて登録できる。さっきの例でいう
git remote add origin git@gitlab-server:example.git
がその登録である。
意味としては
originという名前のリモートリポジトリを追加する。場所はgitlab-server上のexample.git。
と言ったところか。で、このリモートリポジトリを登録することで、この名前を使ってpushとかpullができる。今回の例では指定してませんが
git push origin git push origin master git pull origin git pull origin master
ていう書き方ができますという話。
もし、リモートリポジトリの登録を消したい場合は
git remote rm origin
みたいな感じでOK
(http://blog.bornneet.com/Entry/311/)
まとめ
使えるようになるまで長かった。ここまでだとsubversionと比べて何がいいのか全くわからない。
次はwindowsにgitクライアント入れてみる感じですかね。