バージョン管理を行うためのソフトウェア. CVSやSVNよりも若いソフトウェアで,集中管理でなく,分散管理なので,オフライン環境でもcommitが可能.
Gitを用いてソフトウェアのバージョン管理を行うことで,Githubという無料のソフトウェア・ホスティングサービスを利用することができ,ソフトウェアの公開や共有が容易に行えるようになる.
Gitの設定1
まず,使用しているコンピュータでいくつかの初期設定をしておく.しなくても良いが毎回同じことを聞かれたりしないように設定しておくと良い.
リポジトリの作成
project
という名前のディレクトリで何らかの作業をしており,その作業用のリポジトリを作成したいとする.
として,そのディレクトリにリポジトリを作成する..git/
というディレクトリが作成される.(ドットで始まる名前なので,ls -a
としないと見えない.)
作業中のファイルをリポジトリに登録する.
こうすることで,file1
,file2
などがリポジトリに登録される準備ができた.
とすると,どのファイルがtrack
(追跡)され,どのファイルがtrack
されないのかが分かる.
実際に登録するには,
とする必要がある.emacs
かvi
が起動して,コメントを求めてくるので,簡潔かつ充分なコメントを書いておく.
としてコメント付きのcommit
も可能.
commit
何か作業ディレクトリ内のtrackされているファイル(hoge
)を変更したら,
で以前のcommit
から変更されたことが確認できる.
hoge
に関する新たな変更をcommit
したいときは,
とすれば,変更がcommit
される.
のように,-a
オプション付きでcommit
すれば,(既にtrack
されているファイルの内で)変更されたファイルが自動的にadd
されてcommit
を行う.
archive
プログラム・パッケージを誰かに渡す,もしくは公開する際には,
のようにして,HEADをproject-name/が先行するtarアーカイブとして生成する.prefixの最後には「/」を付けておかないとディレクトリの中にソースファイルをという意味にならないので注意(すべてのファイル名の前にprefixがついてしまう).
GitHubからgit clone
のようにしてGitHubの公開リポジトリからクローンを作成することができる.
既存のGitリポジトリをGitHubで公開する
GitHubというgitリポジトリをホストするサービスがあるのでそれを利用する場合. GitHubにアカウントを持っていることを仮定している.
GitHub上にリポジトリを作成する
GitHubサイトのどこかにある「Create a repository」というリンクをクリックし,自分のアカウント内にリポジトリを作成する.
README.md
やLICENSE
,.gitignore
などを作成するかチェック欄があるので,自分のローカルリポジトリに既に存在するなら不要だし,なくて追加したいなら作成するようにチェックする.
ローカルのgitリポジトリにremoteを登録
ローカルgitリポジトリにて,
とする.
あとはpushすれば良いのだが,GitHub上でREADME.md
なんかを作成していた場合は,まずはgit fetch
もしくはgit pull
してmergeしてから,
としてローカルのmaster
をリモートのorigin
へpushすれば登録完了.
独自に公開リポジトリを作成する
git-daemon
コマンドを使用するが,/opt/local/bin/
にgit
があるのに,git-daemon
は/opt/local/libexec/git-core/
に存在している.ややこしい.
自分のディレクトリ/Users/username/git/
を公開リポジトリのベースディレクトリに指定して公開するには,
公開リポジトリに(外部から)新しいリポジトリを作成する
- 公開リポジトリが存在するホスト名:host
- リモート端末名:remote
まずは,hostにてリポジトリを作成しなければいけない(と思う)ので,hostにて,作成したいプロジェクト名(project.git
とする)のディレクトリを作成する.そして,そのディレクトリでinit
する.
これでhostでの準備はできたので,remote側で作成したプロジェクトを登録する.
ここでは,このプロジェクトが既に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を付ける
Tag名の変更
deleted file の復元
間違ってファイルを消してしまい,まだcommit
していない場合,当該ファイルのHEAD状態をcheckout
することで復元できる.