ぬうぱんの備忘録

技術系のメモとかいろいろ

作った曲一覧はこちら

gitlabの利用者が覚えておくこといろいろ

事のおこり

 gitlabをユーザーとして使うことになったので、gitの使い方込みでまとめておく。

gitってそもそも?

 分散管理型のバージョン管理システムsubversionなんかの中央一括管理型のバージョン管理システムを少し発展させた感じの使い方。

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クライアント入れてみる感じですかね。