Gitの基礎 - Gitの概要

提供:MochiuWiki : SUSE, EC, PCB
2020年10月15日 (木) 05:43時点におけるWiki (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

概要

Gitとは、オープンソースの分散型バージョン管理システムである。(ファイルの変更履歴を管理する)
GPLライセンスの下で公開されていて、自己責任の下で、誰もがGitを使用することができる。

バージョン管理システムというと、CVSやSubversion等が有名だが、Gitは最近注目のバージョン管理システムである。

Gitの産みの親は、Linuxカーネルの産みの親でもあるLinus Torvalds氏である。
Linux kernelは、全世界に多数の開発者がいる大きなプロジェクトであるが、そのLinux kernelのソース管理にGitが使用されている。
また、X.orgやRuby on Rails、Perl、Google Android等もGitを使用しており、
特にオープンソースのプロジェクトのバージョン管理にGitが使用されるケースが増えている。


Gitの特徴

Gitの特徴は、分散型のバージョン管理システムであるということ、
それから何といっても、Linuxカーネルの開発で培われたノウハウが凝縮された高機能なバージョン管理システムであるという点である。

分散型とは、リポジトリが1箇所に集中していないという意味である。
Subversion等は1箇所のリポジトリに開発者全員が変更履歴を記録する方式ということから、リポジトリは1箇所に集中している。

一方、分散型では各開発者が自分専用のローカルリポジトリを持ってそこにコミットする。
そしてコミットした内容を、push / pullという仕組みを使って皆で共有してソフトウェアの開発を進めていく。
リポジトリが1箇所に集中せず、開発者ごとにリポジトリが分散されているから分散型ということである。

分散型のメリットは、リポジトリをWeb上で公開すれば、誰でもそのリポジトリを複製して開発に参加できるという点にある。
そこには、CVSやSubversionのようなコミッターとそれ以外といった区別はない。
誰もがリポジトリを複製して開発に参加でき、その変更が優れていれば、皆がその結果をpullしてくれる。

OSSプロジェクトで、ここ数年で爆発的にGitが使われるようになったのは、そういう理由からである。

なお、分散型のバージョン管理システムには、Gitの他にも、Bazzar、Mercurial、monotone、darcs等がある。
Gitはその中でも大変良く使用されているツールである。


Gitの基礎用語

下表に、Gitを使用する上で必要な用語を示す。

用語 説明
リポジトリ データを保存する場所。
Gitでは、このリポジトリ単位でデータを管理する。
修正履歴も保存されている。
リモートリポジトリ サーバにあるリポジトリ。
サーバに保存され、共有される。
ローカルリポジトリ ローカルに保存されているリポジトリ。
クローン リモートリポジトリを複製すること。
修正履歴なども複製される。
ブランチ 一連の修正を、主流から枝のように分岐させて管理するもの。
ブランチでの修正内容は他のブランチの影響を受けないため、
同じリポジトリで同時に複数の開発を行うことができる。
チェックアウト 他のブランチへ移動し、作業ディレクトリを任意のコミット状態にすること。
コミット 修正内容をローカルリポジトリに反映すること。
プッシュ ローカルリポジトリの修正内容をリモートリポジトリに反映すること。
プル リモートリポジトリの修正内容をローカルリポジトリに反映すること。
マージ 異なるブランチの修正内容を反映すること。
マージ先とマージ元の両方に変更履歴が残る。
コンフリクト マージの際に、リモートとローカルで同じファイルの同じ箇所に対して修正がされており、自動でマージできないこと。
手動で、両方の修正を合わせた内容に編集する必要がある。



Gitのインストール

Gitを使用するためには、ローカル環境でのGitの構築が必要である。

まず、Gitをローカル環境で使用できるように、Gitをインストールする。

  • Windows
    Git for WindowsからGit for Windowsをダウンロードして、インストールする。
  • Linux
    ほとんどのLinuxでは、標準でGitがインストールされている。
    もしインストールされていなかったり、より新しいバージョンのGitを利用する場合は、
    こちらのページを参照してインストールする。


次に、Gitコマンドを操作するコマンドライン環境を準備する。

  • Windows
    Gitコマンド付属のGit Bashを起動後、以下のコマンドを実行して、Gitのバージョンが表示されることを確認する。
    git --version
  • Linux
    以下のコマンドを実行して、Gitのバージョンが表示されることを確認する。
    git --version



Gitの設定

ユーザ名とメールアドレスを登録する。

git config --global user.name <ユーザ名>
git config --global user.email <メールアドレス>


以下のコマンドを実行することで、設定を確認できる。

git config --list

# 出力
user.name=<ユーザ名>
user.email=<メールアドレス>
...



SSH接続

例えば、以下の状況で運用しているGitのリモートリポジトリに接続する。

  • リモートリポジトリがあるサーバ
    repository.example.jp (192.168.1.10)
  • リモートリポジトリのディレクトリ
    /home/ユーザ名/repository/repo.git
  • ユーザ名
    hoge
  • 接続方法
    SSH
  • ポート番号
    22


この時、以下のコマンドを実行することで、リモートリポジトリにアクセスできる。

git clone ssh://hoge@repository.example.jp:22/home/ユーザ名/repository/repo.git


ここで、SSHログイン時にパスワード認証ではなく鍵認証している場合、
秘密鍵のファイル名が標準のid_rsaファイルであるならば、上記のコマンドでアクセスできる。

しかし、運用上の都合で秘密鍵がid_rsaファイル以外にも複数存在している時がある。
そこで、秘密鍵が複数存在している場合は、サーバごとの秘密鍵の名前を示すための設定ファイルを作成する。

以下の内容で、設定ファイルである~/.ssh/configファイルを作成する。
このファイルでは、複数のサーバの設定が記載できる。

また、~/.ssh/configの設定は、Gitに限らず、全てのSSH接続で参照される。

# ~/.ssh/configファイル

Host repo.remote
    HostName repository.example.jp
    User hoge
    IdentityFile ~/.ssh/id_rsa.repo.remote
    Port 22

Host repo.local
    HostName 192.168.1.100
    User huga
    IdentityFile ~/.ssh/id_rsa.repo.local
    Port 22


以下に、設定項目の説明を記載する。

  • Host
    任意の名前(エイリアスとして使用する)
  • HostName
    接続するサーバのIPアドレスやFQDN
  • User
    サーバのユーザ名
  • IdentityFile
    秘密鍵ファイルのフルパス
  • Port
    SSHのポート番号


~/.ssh/configファイルの作成後は、アクセス権限を変更する。

chmod 600 ~/.ssh/config
chmod 700 ~/.ssh


~/.ssh/configファイルの作成後は、以下のコマンドで接続できる。

git clone ssh://repo.remote/home/ユーザ名/repository/repo.git


単純にサーバへSSH接続するだけなら、以下のようにコマンドを実行する。

# repository.example.jpへssh接続
ssh repo.remote

# 192.168.1.100へssh接続
ssh repo.local