MacOS XにおけるGit入門
- はじめに
- バージョン管理システム
- 集中と分散
- 分散型バージョン管理ソフトウェアGit
- ブランチ管理
- Gitの良く使われるコマンドとリポジトリ、インデックス、作業ツリーの関係
- MacOS XでのGit環境の整え方
- エディタviの練習
- Gitコマンドの練習
- GUIなGitフロントエンド
- 戻る
はじめに_
このページには埼玉大学情報システム工学科で開講しているenPiT2での作業を前提として構築されている部分があります。適宜、自分の環境に読み替えてください。
バージョン管理システム_
バージョン管理システム(Version Control System, VCS)とは、コンピュータ上で作成、編集されるファイルの変更履歴を管理するためのソフトウェアのこと。
VCSは以下のような状況を解決するために使用される。
- 間違ってファイルを消してしまった
- 変更を保存した後に、変更前の方が良いことに気付いた
- 複数人でファイルを編集しているとき、どの変更を誰が行ったのかわからない
代表的なVCSには以下のようなものがある。
- 集中管理:RCS、CVS、Subversion
- 分散管理:Git、Mercurial
集中と分散_
VCSでは、変更履歴(リビジョン、Revision。ファイルの編集前と編集後の差分、編集日時、編集者、および、編集に対する編集者のコメント)をリポジトリと呼ばれるデータベースに格納して保管している。

現在のVCSはリポジトリの管理方法から集中型と分散型の2つの種類に分類できる。
集中型VCSでは、1つのリポジトリを1箇所で管理する。作業ディレクトリのファイル/ディレクトリの変更履歴をリポジトリに保存するのが「コミット (commit)」と呼ばれる操作である。リポジトリから(変更履歴を反映させた)ファイルやディレクトリを取り出すのが「チェックアウト (checkout)」と呼ばれる操作である。

一方、分散型VCSは、複数のリポジトリを複数の箇所で分散的に管理する。分散VCSではリポジトリ間で格納している変更履歴の同期をとることができる。ローカルリポジトリの変更履歴をリモートリポジトリ(別の場所にあるリポジトリ)へ送るのが「プッシュ (push)」という操作であり、その逆が「プル (pull)」という操作である。リモートリポジトリをローカルにコピーするのが「クローン (clone)」という操作である。

分散型バージョン管理ソフトウェアGit_
Gitは分散VCSの一種である。Gitは、Linux kernelのソースコード管理のために提案・開発されているバージョン管理システムであり、ここ2~3年ではもっともよく利用されている分散VCSである。
リポジトリ間の通信方式として以下のものを用意している。
- ファイルシステム(同一計算機上の場合)
- SSH (Secure Shell)
- Git専用プロトコル(認証機能なし)
- HTTP/HTTPS(WebDAV)(pushするためにはWebDAVが必要)
ネットワークに接続できないときでも、リポジトリに変更履歴を保存できるという利点の他に、集中VCSでは大変な作業であったブランチ管理を簡単に行えるという利点がある。
ブランチ管理_
変更履歴の分岐のことを「ブランチ (branch)」という。Gitにおいてはブランチはブランチを管理する操作名でもある。

ブランチを1つにまとめる操作を「マージ(merge)」という。ブランチ間で変更履歴に矛盾がない場合は、マージは問題なく成功するが、矛盾がある場合(同じ部分に異なる変更がほどこされている場合)は、「衝突 (conflict)」が発生したとみなされ、編集者による衝突の解決が必要となる。

Gitの良く使われるコマンドとリポジトリ、インデックス、作業ツリーの関係_

MacOS XでのGit環境の整え方_
前提条件_
HomebrewというMacOS X上のCUI環境を整えるためのパッケージ管理システムを使って揃える。Homebrewをインストールするためには事前にXcodeをインストールしている必要がある(enPiTの夏期集中講義を受講している方はインストール済みのはず)。
ターミナルの起動_
まず、ターミナルを起動する。
- Finder(デスクトップ下に並んでいるアイコンの一番左のアイコン)をクリックし起動する
- 「アプリケーション」を選択する
- 右上の検索欄で「ターミナル」と入力し、検索する
- ラウンチャー(デスクトップ下のアイコンが並んでいる部分)からターミナルを簡単に起動できるようにするため、ターミナルのアイコンをデスクトップ下のラウンチャーにドラッグする(ターミナルのアイコンを選択した状態でラウンチャーまでターミナルのアイコンを移動させる)
Homebrewのインストール_
ターミナルでHome-brewのWebサイトのインストールの項に記載されているコマンドを実行し、Homebrewをインストールする。
% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
以下のコマンドをターミナルで実行し、インストールできているかどうかを確認する。
% brew help
gitのインストール_
gitがインストール済みか確認する。whichコマンドでインストールディレクトリが表示されている場合はインストール済みである。
% which git /usr/bin/git % git --version git version 2.24.2 (Apple Git-127)
インストールされていない場合はインストールする。
% brew install git % which git % git --version
エディタviの練習_
Mac OS Xの端末上における標準エディタはviである。ほとんどのUnix系システムでデフォルトで用意されているエディタであるviの基本的な使いかたを紹介する。なお、日本語入力の方法については今回は割愛する。
まずは、viが存在するかをチェックする。
% which vi /usr/bin/vi
viを起動する。
% vi
viは編集モードと入力モードの2つのモードがある。Escキーを押すと編集モードになり、編集モードで「i」や「a」を押すと入力モードに入る。 とりあえず、文章を書いてみる。「i」を押して以下のように文章を打つ。
Hello World!
文章を打ち終ったらEscキーを押して、編集モードにする。ファイルに名前をつけて保存する。編集モードで「:w ファイル名」と入力する。
:w hello.txt
保存せず、終了する。
:q!
viでファイルを開く。
% vi hello.txt
入力モードから編集モードへの切り替え
- ESCキー
編集モードにおける主なコマンド
- i: 挿入。カーソル位置から入力する
- a: 追加。カーソル位置の一文字次から入力する
- o(スモールオー): 次の行から入力を始める
- O(ラージオー):ひとつ前の行から入力を始める(行を新規に挿入する)
- x: カーソルがある文字を削除。emacsで言うC-dと同じ働き。
- dd: 一行削除(バッファ上には保存)。emacsで言うC-kと同じ働き。
- h, j, k, l:それぞれ、左、下、上、右へ移動
- 0(ゼロ):行の先頭へ移動
- $:行の末尾へ移動
- H:ターミナルに表示されている一番最初の行へ移動
- L:ターミナルに表示されている最終行へ移動
- y: カーソルのある行をコピー(バッファ上へ保存)
- p: バッファ上の行を挿入
- J:カーソルがある行と次の行を連結
- u:アンドゥ(操作の取消し)
- .(ピリオド):ひとつ前の操作を繰り返し実行
- :wq:上書きして終了
- :q!:保存せず終了
- 参考:
Gitコマンドの練習_
以下のページに従って練習する。なお、リンク先は Ubuntu 18.04 LTSを想定しているため、Mac OSとホームディレクトリの絶対パス(ルートディレクトリからみたホームディレクトリの位置)が異なっている場合があるのでpwdコマンドなどでパスを確認し、適宜読み替えること。