バージョン管理を行うためのソフトウェア. CVSやSVNよりも若いソフトウェアで,集中管理でなく,分散管理なので,オフライン環境でもcommitが可能.
Gitを用いてソフトウェアのバージョン管理を行うことで,Githubという無料のソフトウェア・ホスティングサービスを利用することができ,ソフトウェアの公開や共有が容易に行えるようになる.
Gitの設定1
まず,使用しているコンピュータでいくつかの初期設定をしておく.しなくても良いが毎回同じことを聞かれたりしないように設定しておくと良い.
$ git config --global user.name "Your NAME"
$ git config --global user.email your_name@example.comリポジトリの作成
projectという名前のディレクトリで何らかの作業をしており,その作業用のリポジトリを作成したいとする.
$ git initとして,そのディレクトリにリポジトリを作成する..git/というディレクトリが作成される.(ドットで始まる名前なので,ls -aとしないと見えない.)
作業中のファイルをリポジトリに登録する.
$ git add file1 file2 ...こうすることで,file1,file2などがリポジトリに登録される準備ができた.
$ git statusとすると,どのファイルがtrack(追跡)され,どのファイルがtrackされないのかが分かる.
実際に登録するには,
$ git commitとする必要がある.emacsかviが起動して,コメントを求めてくるので,簡潔かつ充分なコメントを書いておく.
$ git commit -m 'Some comments.'としてコメント付きのcommitも可能.
commit
何か作業ディレクトリ内のtrackされているファイル(hoge)を変更したら,
$ git statusで以前のcommitから変更されたことが確認できる.
hogeに関する新たな変更をcommitしたいときは,
$ git add hoge
$ git commit -m 'Changed hoge.'とすれば,変更がcommitされる.
$ git commit -am 'Changed some...'のように,-aオプション付きでcommitすれば,(既にtrackされているファイルの内で)変更されたファイルが自動的にaddされてcommitを行う.
archive
プログラム・パッケージを誰かに渡す,もしくは公開する際には,
$ git archive --format=tar --prefix=project-name/ HEAD | gzip > project-name.tgzのようにして,HEADをproject-name/が先行するtarアーカイブとして生成する.prefixの最後には「/」を付けておかないとディレクトリの中にソースファイルをという意味にならないので注意(すべてのファイル名の前にprefixがついてしまう).
GitHubからgit clone
$ git clone ssh://github.com/[account-name]/[project-name].git ./[project-name]のようにしてGitHubの公開リポジトリからクローンを作成することができる.
既存のGitリポジトリをGitHubで公開する
GitHubというgitリポジトリをホストするサービスがあるのでそれを利用する場合. GitHubにアカウントを持っていることを仮定している.
GitHub上にリポジトリを作成する
GitHubサイトのどこかにある「Create a repository」というリンクをクリックし,自分のアカウント内にリポジトリを作成する.
README.mdやLICENSE,.gitignoreなどを作成するかチェック欄があるので,自分のローカルリポジトリに既に存在するなら不要だし,なくて追加したいなら作成するようにチェックする.
ローカルのgitリポジトリにremoteを登録
ローカルgitリポジトリにて,
$ git remote add origin git@github.com:[gitユーザ名]/[プロジェクト名].gitとする.
あとはpushすれば良いのだが,GitHub上でREADME.mdなんかを作成していた場合は,まずはgit fetchもしくはgit pullしてmergeしてから,
$ git push -u origin masterとしてローカルのmasterをリモートのoriginへpushすれば登録完了.
独自に公開リポジトリを作成する
git-daemonコマンドを使用するが,/opt/local/bin/にgitがあるのに,git-daemonは/opt/local/libexec/git-core/に存在している.ややこしい.
自分のディレクトリ/Users/username/git/を公開リポジトリのベースディレクトリに指定して公開するには,
$ sudo /opt/local/libexec/git-core/git-daemon --export-all --base-path=/User/username/git公開リポジトリに(外部から)新しいリポジトリを作成する
- 公開リポジトリが存在するホスト名:host
- リモート端末名:remote
まずは,hostにてリポジトリを作成しなければいけない(と思う)ので,hostにて,作成したいプロジェクト名(project.gitとする)のディレクトリを作成する.そして,そのディレクトリでinitする.
[host] $ mkdir /Users/username/git/project.git
[host] $ cd /Users/username/git/project.git
[host] $ git --bare initこれでhostでの準備はできたので,remote側で作成したプロジェクトを登録する.
[remote] $ cd /somewhere/project
[remote] $ git commit -m "Comment something."
[remote] $ git remote add origin ssh://username@host/~/git/project.gitここでは,このプロジェクトが既にgitを使用していることを仮定している.git remote add originコマンドによって,/somewhere/project/.git/configファイルに,
[remote "origin"]
url = ssh://username@host/~/git/project.git
fetch = +refs/heads/*:refs/remotes/origin/*
という行が追加されたと思うので,これで準備完了.
[remote] $ git push origin master
とすることで,現在のmasterがoriginにコピーされる(コマンドはoriginをmasterにコピーしている様に感じるが...).
Tag
Tagを付ける
$ git tag -a name -m 'comment about the tag.'Tag名の変更
$ git tag new-tag old-tag <--- old-tagと同じコミットにnew-tagを付ける
$ git tag -d old-tag <--- old-tagを消す
$ git push origin :refs/tags/old-tag <--- old-tagを消したことをリモートリポジトリに伝える
$ git push --tags origin <--- 追加したtagをpushするdeleted file の復元
間違ってファイルを消してしまい,まだcommitしていない場合,当該ファイルのHEAD状態をcheckoutすることで復元できる.
$ git checkout HEAD deleted-file-name