ジャンル:
関連キーワード: DTPWebスクリプト

Gitの社内研修やってみた – 資料公開 – その1

投稿日:

■はじめに(お急ぎなら飛ばしてね)

バージョン管理システムのスタンダードである「Git」。みなさんは使っていますか?
ソフト開発やWebサイトの管理に使うものというイメージがありますが、最近ではコードには触れないデザイナーさんでもGitを使ってデザインデータのバージョン管理をしているという声を聞くようになりました。
デザイン現場での共有漏れ、上書き事件などのリスクを、上手にGitを活用して回避されているんですね。

とはいえ、なかなかとっつきにくいGit。
弊社では、Webサイトやスクリプト開発に携わるメンバーの一部が使用していましたが、拠点間の連携作業が増えたり、テレワークが取り入れられたりで最近ではGitを活用する機会がグッと増えました。
この機会に、コードを触るメンバーは全員Gitを習得しようということになり、Git社内研修をやってみました。

■公開資料の説明

今回、社内研修の対象となったのは、Webサイトやスクリプト開発で普段からコードに触れているメンバーでしたので、Gitとは何ぞや?といった初歩的な説明はすっ飛ばして、いきなり用語の解説からスタートしました。

Gitの概念を「領域とコマンド」「ブランチモデルと識別子」の2つに分けて、それぞれの用語を概念図で説明しました。
この記事で公開するのは、「領域とコマンド」の説明で使った用語説明と概念図のみです。
また、アトラシアンのBitbucketとSourcetreeを使用する前提での内容となっています。

ですので、説明としては不足していたり、あくまで正確性よりも概念を示すだけの部分があると思いますが、これからGitの社内研修をするにあたって何か資料の参考になるものをお探しの方に役立てていただければと、以下に公開します。
それでは、どうぞ! ↓

●全体像

以下の図が全体像になります。それぞれの説明は次項から始まります。
それぞれの説明がどの部分で、前後とのつながりがどうなっているのかを、この全体像で確認してください。

☆領域とコマンド

●用語と概念図

▼リポジトリ

貯蔵庫。データなどを保存しておく場所です。
リポジトリの中は、ざっくり分けると「作業」ファイルと「.git」というディレクトリがあります。
作業ファイルは、ユーザーが直接編集するデータで、呼び出したバージョンのものが用意されます。
.gitディレクトリがリポジトリの本体で、バージョンを管理記録するデータベースが入っており、編集したいバージョンのデータを作業ディレクトリに用意する時に参照されます。

▼コミット

追加・変更したファイルをGitに記録すること。要はバージョンを作ることです。
より正確には、作業ディレクトリで作業していた編集処理(予約)を、Gitというシステム内で実行して正式に責任ある形で保存するといった概念です。
メッセージを入力することが必須となっており、一般的には編集内容を入力します。また、タグとして任意の名前をコミットにつけて目印とすることもできます。
コミットすると、前回コミットした時の状態と差異のあるファイルがスナップショット(丸ごと保存)されます。
このデータも、コミット(またはリビジョン)と呼びます。

▼リモートリポジトリ

複数人・複数環境で共有するためのリポジトリで、専用のサーバに置きます。
GitHubやBitBucketなどのクラウドサービスを利用するのが一般的です。
誰でもアクセスできる「パブリックリポジトリ」と、登録ユーザーのみアクセスできる「プライベートリポジトリ」があります。

▼ローカルリポジトリ

ユーザー1人ひとりが利用する、自身のPC上に置くリポジトリです。

▼分散型バージョン管理システム

リポジトリを、リモートとローカルに分ける(分散する)ことで、同じデータを共有しつつ複数人で編集作業することができます。
編集作業は、自身のPC上(ローカルリポジトリ)で行います。
自分のローカルリポジトリで作業した内容は、リモートリポジトリにアップロードして公開します。
リモートリポジトリを通じて、他のユーザーの編集作業した内容を取得できます。

▼クローン

リモートリポジトリのコピーをローカルに丸ごと取得します。
自身のPC上に、ローカルリポジトリが作成されます。
もちろん.gitの情報も取得されるので、更新履歴の参照やコミットも可能です。

★作業概略(スタート時)

▼フェッチ

リモートリポジトリにある更新内容を、ローカルリポジトリに取得する機能です。
取得した更新履歴がローカルリポジトリ内と異なる場合は、ひとまず別のリモートバージョン(別案)として保存されます。

▼マージ

「結合する」とか「統合する」という意味。複数に分岐させた物をつなぎ合流させます。
差異のある2つのコミット(別バージョン)を、どちらかをマスターとして合流し新たにコミットします。

▼ワークツリー(ワークスペース)

自身のPC上で、実際に作業を行うディレクトリのこと。ここで編集作業が行えます。
gitによって管理されており、選んだコミットによって内容が変化します。

▼チェックアウト

リポジトリで選択中のコミットを、ワークツリーに展開します。
チェックアウト時に任意のコミットを選択しておくことで、
好きなバージョンのデータを編集できます。

※チェックアウトすると、コミット内に圧縮されているスナップショットからデータが展開されるので、過去に遡ったデータであっても、ファイルの更新日時が新しくなります。タイムスタンプで管理できない点に留意。

▼プル

リモートリポジトリにある更新内容をローカルリポジトリに取得し、元からローカルにあるコミットとマージする機能です。
つまり、フェッチとマージがセットになった機能です。
新規プロジェクトに参加する場合など、ローカルリポジトリでの作業履歴が必要無い時に使います。

▼フォーク

リモートリポジトリを、サーバー内(リモート内)で丸ごとコピーします。
プロジェクト自体を別進行に分ける場合などに使います。
コピーしたリモートリポジトリは、オリジナルのリモートリポジトリに対して、プルリクエストという反映依頼を出すことで連動できます。

▼インデックス(ステージングエリア)

ワークツリーで編集したデータをリポジトリに登録する時に、一時的にコミットする準備をする場所です。
インデックスを間に挟むことで、ワークツリー内の必要ないファイルを含めずに編集ファイルの一部だけをインデックスに登録してコミットできます。

▼ステージング

ステージとかインデックスとも呼ばれます。
リポジトリにコミットするファイルを、インデックスに登録する作業のことです。
更新したいファイルを任意に選んで登録できます。

どうしてインデックスが必要なのでしょうか?
ワークツリーから直接リポジトリにコミットしない理由
・大量の更新ファイルがある場合、必要なファイルのみを少しずつ整理確認しながら
 ストックしていける。
・ミスしているファイルや、保留しておきたい更新ファイルを選り分けて段階を踏める。

★コミットする更新ファイルを選択してください

★まとめて編集したけど、一部がボツになるかも……?

▼プッシュ

ローカルリポジトリの更新履歴を、リモートリポジトリにアップロードして公開(共有)する。
基本的には、ローカルリポジトリに存在しない更新履歴があるとプッシュできない。
フェッチして最新履歴とマージしてからプッシュする。

●作業概略

Gitの社内研修やってみた – 資料公開 –
【その1】●領域とコマンド
【その2】●ブランチモデルと識別子

△ Gitの社内研修やってみた – 資料公開 – その1 – クリエイティブスポット

TOP