Git

分散型リポジトリ管理システムGitを導入した。

Gitは前から気になってたんだけど、以前subversionを使ったことがあり、サーバーークライアント式の管理に慣れていたので、Gitのワーキングリポジトリ(ローカルリポジトリ)の意味が分からず、手を出せずにいた。

使っている友人に話を聞く機会があったので、そのへんのところを尋ねてみると、Gitの方がシンプル。使いやすそう。

そこで、忘れないうちに理解したことを公開する。間違っているところもあると思うので、その場合は指摘してください。

Gitとは

Gitを使うと、subversionなどのサーバー型リポジトリ管理システムと違って、すべての作業履歴をローカルフォルダ内に保存できる。

例えば、フォルダA内にあるファイルやサブフォルダのバージョン管理だけやりたい(別に誰とも共有しないし…)場合は、他にリポジトリを作らなくても、その作業フォルダだけで完結した履歴管理ができるってことになる。

subversionを使ったことある人は、リポジトリ管理システムというよりは、単にバージョン管理ソフトとして考えたほうがGitを理解しやすいと思う。

Gitは、簡単にいうと、作業履歴を保持する機能をフォルダに追加するソフトで、さらにその作業履歴を他のフォルダとも共有できるようにしてくれる。

例えば、あるフォルダ内にあるソースコードのバージョン管理をしたいとする。その時は、まずそのフォルダをワーキングリポジトリ化する。

ワーキングリポジトリの作成

ワーキングリポジトリとは要はプログラムの作業フォルダのことで、内部にソースファイル、実行ファイル、などが存在している。別名ローカルリポジトリとも言う。普通のフォルダとの違いは.gitフォルダを内部に持つことだけだ。ここに、更新履歴やファイル情報が保存されている。

例えば、ソースファイルが内部に入っているprojectAフォルダをgitに管理させたければ、以下のコマンドつかう。

git init /path/to/local/projectA

これで、.gitが内部に生成される。

もし、フォルダ内にあるファイルのうちバージョン管理したくないもの(実行ファイル、アウトプットファイルなど)がある場合は、リポジトリ内に.gitignoreファイルを作成して内部に、管理したくないファイルを書けばよい。例えば

*.o
*.a
*.out
.DS_Store

みたいに書く。もし、
変更履歴に追加するときは git add, git commit コマンドを使うけど、この解説は多くのサイトで行われているから、省く。

Bareリポジトリの作成 (すでにあるworkingリポジトリから作成)

あるワーキングリポジトリの作業履歴を、他のワーキングリポジトリと共有したい場合(例えば、複数人でプログラムを組む場合)があるけど、そのままでは作業情報が並列になっているから管理が難しい。Bareリポジトリを使うとサーバー型管理っぽく手軽に情報を一元管理することが出来る。Bareリポジトリはリモートリポジトリとも言う。

Bareリポジトリは、簡単にいうと、ローカルリポジトリ内にある.gitフォルダ内部情報のみを持つフォルダのことだ。ソースファイルの類は一切持たないが、情報は保存されている。このリポジトリは作業のためでなく、純粋に共有のために使う意味合いが強い。

例えば、ProjectAのBareリポジトリを作りたい場合は、以下のようにする。

git clone --bare ${path-to-working}/projectA ${path-to-bare}/projectA.git

作成された.gitはフォルダだ。Bareリポジトリは別に、物理的に他のサーバー内につくる必要はないことに注意。

ネットワーク越しのサーバーにBareリポジトリを移して、他人と共有したい場合は、scpでBareリポジトリをコピーして、共有設定を追加すればOK。

scp -r ${path-to-bare}/projectA.git uname@rimoteserver.com:${path-to-rimote}/projectA.git
ssh uname@rimoteserver.com
cd ${path-to-rimote}/projectA.git
git init --bare --shared

他の方法:新しく空のbareリポジトリを作る場合は init コマンドを使う。

git init --bare ${path-to-bare}/projectA.git

ワーキングリポジトリとBareリポジトリ間の情報伝達

ワーキングリポジトリ内にいるとする。ワーキングリポジトリからBareリポジトリへ更新情報を送りたい場合は、pushコマンドを使う。commitではない。逆に、Bareリポジトリから作業履歴をダウンロードしたい場合は、pullコマンドを使う。

git push origin master

このコマンドを使うと、現在作業中のブランチの作業履歴がoriginリモートリポジトリのmasterブランチへアップロードされる。

git pull origin master

このコマンドを使うと、originリモートリポジトリのmasterブランチの作業履歴が現在作業中のブランチにマージされる。

異なるローカルリポジトリから同じリモートリポジトリのブランチへ情報がpushされた場合、先にpushしたほうが採用されて、後でpushした方はエラーが出てpushできない。pushするためには、まず更新情報をpullでマージして、そのあとpushする。

ワーキングリポジトリがpull,push時に参照するBareリポジトリの確認

ワーキングリポジトリが参照するBareリポジトリは、ワーキングリポジトリ内で以下のコマンドを実行すると確認できる。

git remote -v

Bareリポジトリを参照先に追加したい場合は、次のコマンドを実行する

git remote add origin uname@server.com:${path-to-repos}/projectA.git

この場合、uname@server.com:${path-to-repos}/projectA.gitがoriginという名前のBareリポジトリとして登録される。

コミット時のコメントを書くエディタの変更


git config --global core.editor vim

作業者の変更

git config --global user.name "YOUR NAME"
git config --global user.email your@email.com

参考:4.2 Git サーバー – サーバー用の Git の取得

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です