gitを始める

gitを始めたい。gitのやりかたをまとめておきたい。

 

 

gitをやりたいと思った理由

・仕事で使うから慣れておきたい。

・さしあたっては、研究のために書いたコードを整理したい。

・さしあたっては、研究のために書いたコードのマニュアルを作成したい。

・(ブログを書く理由)自分が学んだことをブログの記事に落とし込むことに慣れたい。

・(ブログを書く理由)後の自分のためにgitのやり方をメモっておきたい。

 

参考にする本

薦められた本 三宅英明、大角祐介「新しいLinuxの教科書」

http://amzn.asia/c2JBBJ3

全てを読んだ訳ではないが、Linux全般、僕のような初心者にも非常に分かりやすいと思う。

gitとは何か

Gitは現在広く使われているバージョン管理システムで、Linuxカーネルをはじめとしてさまざまなプロジェクトで利用されています。 

バージョン管理システムとは

バージョン管理システムは、ファイルのコピーを手作業で取らずに済むように、ファイルの変更履歴を保存し管理するためのツールです。これは主に、次の2つの目的のために使用します。

・ファイルに対して「いつ、誰が、どういう目的で、どういう変更を加えたのか」を記録し、閲覧できるようにする

・必要に応じてファイルを過去の状態に巻き戻す

(いずれも「新しいLinuxの教科書」http://amzn.asia/c2JBBJ3 pp.359より)

 

大まかな流れ

細かいコマンドとかは本を読めばよい(ブログに写経する必要もない)。大まかな流れを掴み、後の自分のメモにしたい。

リポジトリを作成する

.gitディレクトリを作る→Gitのリポジトリが出来る。リポジトリとは、Gitがファイルの履歴を保存している場所のこと。このリポジトリとしたディレクトリ(言い方あってる?)に、ファイル変更履歴が記録されていく。

通常我々が編集するファイルはワークツリーという場所に収められていて、変更のたびに、リポジトリに履歴が(特別な形式で)記録されていく。

リポジトリにファイルを追加する(履歴を読み込ませる)

ワークツリーにある(?)ファイルをバージョン管理するには、(git addして、)リポジトリに履歴として追加するよう指定する必要がある。

*1

どのファイルを履歴管理するかを指定した上で、(git commitコマンドを実行して、)実際にリポジトリにファイルの変更履歴を追加する。(変更したところ、変更した理由とかをコメントしておく)

*2

*3

(他のファイルのバージョン管理をしたい場合・二度目以降もう一度あるファイルに対してバージョン管理したい場合にはgit addし直す?)

差分取ったり、ファイルの状況を調べる

git status: 現在のワークツリーの状態を表示する

git diff:差分を表示する

git log: 変更の履歴を確認する

誤りから復旧する

もちろん、誤ったコミットをしてしまったときに過去の状態に巻き戻すことも出来る。

 

ブランチを使う

コミットの履歴を枝分かれさせることも出来る(ブランチを作る)。もともとのブランチはmaster。mergeとかする。

 

リポジトリのバックアップを作れる

2人以上で作業できる

個人のリポジトリから、共有リポジトリにpush とか pullとか。

 

まとめ

gitはファイルのバージョン管理が出来るすごいやつ。

ワークツリーで作業して、インデックスにaddしておいて、まとめてリポジトリにcommitする。

差分取ったり、ブランチ作ったり、色々できる。

別のリポジトリを同期させたり、個人のリポジトリから、共有リポジトリに同期させて複数人で共同で作業することもできる。

(後半は雑になった。とりあえず一人で作業するので、最初の本当に基本的なところが分かればよかった。)

 

 あらためて、

三宅英明、大角祐介「新しいLinuxの教科書」

http://amzn.asia/c2JBBJ3

を参考文献として挙げておきたい。お世話になってます。

*1:*git addは、ワークツリーにあるファイルを、インデックスと呼ばれる領域に登録するコマンド。逆に言えば、git addしなければ、ワークツリーにあるファイル(の変更)はインデックスには反映されない。

*2:**git commitは、インデックスに登録されている内容をリポジトリに登録するためのコマンド。

*3:***ワークツリーとインデックスの領域が分かれている理由:コミットの単位を自由に操作できるようにするため。1つのコミットは、1つの問題に対応する修正であるべき。1つの問題が終わったらまとめて1つのコミット、別のやつができたらもう1コミットとかにするのかな。