エンジニアの人たちからすれば今更感がすごいかもしれないけど、今までちゃんとしたバージョン管理というものをしたことがなかったので、ここらでちゃんとgitの勉強をしておくおくことにする。
ちなみに自分の今までのバージョン管理方法は、「ファイル名_YYYYMMDD」みたいなやつ。
これでも履歴を残すことはできるが、いつ、どんな変更をしたのかといったことが把握しにくいし、ファイルが量産されてしまうことになるというデメリットがある。それに格好悪い。
ということで、gitを使ってその辺を改善していこうと思う。
gitのインストールと初期設定
macにgitをインストールする
homebrewを使ってgitをインストールする
#インストール
$brew install git
#gitのバージョン確認
$git --version
これだけ。簡単。
gitの初期設定
gitを使い始める前に簡単な設定をしておく。
#名前の登録
$git config --global user.name 'ユーザー名'
#メールアドレスの登録
$git config --global user.email 'emailアドレス'
#ターミナルで色付きで表示する
$git config --global color.ui auto
色の設定は細かくできるようだが、とりあえずは自動に設定する。
このコマンドを実行するとホームディレクトリに、.gitconfig というファイルが作られる。これがgitの設定管理ファイルとなる。
gitのバージョン管理の仕組み
gitでバージョン管理を始める前に、gitの基本的な仕組みについて簡単に把握しておく。
リポジトリ
リポジトリとは、ファイルやディレクトリの履歴を記録するもの。
リポジトリに記録されたファイルなどは、直接編集などはすることはできないので、コマンドを使って操作する。
コミット
ファイルの変更履歴をリポジトリに追加すること。
ワークツリー
ワークツリーとは、gitを使うための作業場所のこと。バージョン管理をするファイルを置いておく場所になる。インデックス
リポジトリとワークツリーの間にある領域。インデックスがあることで、ワークツリー内の必要な変更だけをコミットしたり、作業が終わったファイルだけを先にインデックスに登録しておくといった使い方ができ、柔軟なコミットが可能になる。実際にバージョン管理をしてみる
今回は、ドットファイルズと言われている、各種の設定ファイルのバージョン管理を行う。対象のファイルは、.bash_profile、.bashrc、.vimrcにする。バージョン管理用のディレクトリの作成
まずはホームディレクトリにdotifilesというディレクトリを作る。
ディレクトリの作成は、
ディレクトリの作成は、
mkdir ディレクトリ名
ドットファイルズはdotfilesというディレクトリで管理するのが一般的とのこと。
dotfilesディレクトリを作成したら、バージョン管理するファイルをdotfilesディレクトリに移動する。
ファイルの移動は、
ファイルを移動したら、ホームディレクトリに移動したファイルのシンボリックリンクを作成しておく。
シンボリックリンクの作成は、
dotfilesディレクトリを作成したら、バージョン管理するファイルをdotfilesディレクトリに移動する。
ファイルの移動は、
mv ファイル名 移動先ディレクトリ複数ファイルの移動は、
mv ファイル1 ファイル2 ファイル3 … 移動先ディレクトリ
ファイルを移動したら、ホームディレクトリに移動したファイルのシンボリックリンクを作成しておく。
シンボリックリンクの作成は、
ln -s 元ファイル シンボリックリンク
#dotfilesというディレクトリを作る
$mkdir dotfiles
#作成したディレクトリにバージョン管理したいファイルを移動する
$mv .bash_profile .bashrc .vimrc dotfiles/
#シンボリックリンクの作成
$ln -s ~/dotfiles/.bash_profile ~/.bash_profile
$ln -s ~/dotfiles/.bashrc ~/.bashrc
$ln -s ~/dotfiles/.vimrc ~/.vimrc
リポジトリの作成
リポジトリを作成するために、作業ディレクトリに移動する。
ディレクトリの移動は、
cd 移動先ディレクトリ
作業ディレクトリに移動したら、gitコマンドを使ってディレクトリの初期化をする。
#ディレクリの移動
$cd ~/dotfiles
$git init
git init を実行するとdotfiles内に .git というディレクトリが作られる。
この .git がリポジトリで、ここに履歴が保存されていくことになる。
また、dotfilesディレクトリがワークツリーになるため、ここが作業を行う領域となる。
この .git がリポジトリで、ここに履歴が保存されていくことになる。
また、dotfilesディレクトリがワークツリーになるため、ここが作業を行う領域となる。
インデックスに登録
コミットをする前に、まずはインデックスに登録する必要がある。
インデックスの登録は、
今回は全てのファイルをインデックスに登録する。
インデックスの登録は、
git add ファイル名変更したファイルを全てインデックスに登録するには、-A オプションを付ける。
git add -Aコミットしたことがるファイルだけをインデックスに登録するには、-u オプションを付ける。
git add -u
今回は全てのファイルをインデックスに登録する。
#インデックスに登録
$git add -A
コミット
インデックスに登録したファイルをコミットするには、
コミットの時にメッセージを指定するには、-m オプションを付ける。
1行目に変更の概要を入力し、2行目は空行、3行目に詳細を記載するのが一般的。
例えば、git add をしてインデックスに登録した後に、ワークツリーのファイルを編集すると、ワークツリーとインデックスの間に差が生じる。
gitには、それらの差を確認するコマンドが用意されている。
git diff にオプションを付けることで、他の領域の差を確認できる。
差分の確認方法を図にすると、下のようになる。
git commit
コミットの時にメッセージを指定するには、-m オプションを付ける。
git commit -m "メッセージ"
#インデックスに登録
$git commit -m 'first commit'
-m オプションを付けないでコミットすると、メッセージ入力のためにvimが起動する。1行目に変更の概要を入力し、2行目は空行、3行目に詳細を記載するのが一般的。
変更の確認
変更したファイル
最後のコミット以降に変更したファイルを確認するには、
git status
履歴の確認
変更の履歴を確認するには、git loggit log に -m オプションを付けるとコミットごとの差分も表示される。
変更の差の確認
gitには、ワークツリー、インデックス、リポジトリという3つの領域があるので、それぞれの領域に変更の差が生じることになる。例えば、git add をしてインデックスに登録した後に、ワークツリーのファイルを編集すると、ワークツリーとインデックスの間に差が生じる。
gitには、それらの差を確認するコマンドが用意されている。
ワークツリーとインデックスの差
git diffgit diff は、差を確認する基本となるコマンド。
git diff にオプションを付けることで、他の領域の差を確認できる。
インデックスとリポジトリの差
インデックスとリポジトリの差を確認するには、git diff に --cached オプションを付ける。git diff --cached
ワークツリーとリポジトリの差
ワークツリーとリポジトリの差を確認するには、git diff コマンドに HEAD オプションを付ける。git diff HEAD
差分の確認方法を図にすると、下のようになる。
ファイルの復旧
ワークツリーを元に戻す
ワークツリーを最後にコミットした状態に戻すには、git checkout HEAD を使う。
ワークツリー全体を戻すには、ディレクトリの一番上に移動して以下のコマンド
git checkout HEAD .個別のファイルを元に戻すには、
git checkout HEAD ファイル名
コミットを取り消す
間違った変更をコミットしてしまった場合は、コミットを取り消す必要がある。
コミットを取り消すには、
git revert コミットIDコミットIDというのは、コミットごとに付けれらている40文字の文字列のこと。
IDを指定する時は、40文字全てを指定する必要はなく、最初の7文字を指定すればいい。
git log --oneline でコミットの内容を1行で表示できるので、コミットIDの最初の7文字を調べることができる。また、オプションで数字をつけると、直近から指定した数字分のコミットを表示することができる。
git commit --oneline -5
とりあえずは、こんな感じでgitを使ってバージョン管理ができるようになった。
gitにはもっと便利な機能がたくさんあるので、徐々に使っていこうと思う。
0 件のコメント :
コメントを投稿