vaguely

和歌山に戻りました。ふらふらと色々なものに手を出す毎日。

初心者(含む非開発者)向けGitによるバージョン管理資料メモ

はじめに

初心者(含む非開発者)の方に向けてGitを使ったバージョン管理のお話をすることになったので、
その資料を作るためのメモです。

目的としてはGitの使い方を覚える、というよりはZIPファイルや別名保存以外にも、
バージョン管理のためのツールを使う方法もあるんだよ~、ということを緩く紹介する感じで。

OSはWindowsが多いため Git For Windows に付属?している Git GUI を使うことにします(ある種これが僕にとっての試練w)。

準備

まずはインストールから。特に必要なければそのまま指示に従って進めればOKかと。

バージョン管理対象のプロジェクト作成

  1. バージョン管理対象のファイルを任意の場所に置いたフォルダに入れます。
  2. Git GUI を起動します。
  3. Create New Repository を選択して、1.のフォルダを指定します。
  4. 1.のフォルダ内に .git というフォルダが作成されます(表示から隠しファイルを表示する必要あり)。
  5. 4.のフォルダ内にこれから保存していく履歴情報が蓄積されることになります。

ユーザー情報などの登録

  1. Git GUI でバージョン管理対象のプロジェクトフォルダを開いた状態で、 Edit > Options を開きます。
  2. 左が今開いているプロジェクトの設定、右が共通(グローバル)の設定です。
  3. それぞれの User Name 、 Email Address を入力します。
  4. Default File Contents Encoding を(そうなっていなければ) utf-8 にします。
  5. ファイルエクスプローラーでバージョン管理対象のプロジェクトフォルダを開いて、右クリック > Git Bash Here でGit Bashを開き、以下を実行します(ファイル名やdiffの文字化け防止)。
git config --global gui.encoding utf-8

f:id:mslGt:20170830022318j:plain

Commitする

まずはファイルを一つ作成して、バージョン管理してみることにします。

  1. ファイルをプロジェクトフォルダに置きます。
  2. Git GUI で Rescan を押して、1.のファイルが Unstaged Changes に表示されたることを確認します。
  3. Stage Changed を押して、2.のファイルが Staged Changes に移動したことを確認します。
  4. Commit Message に変更内容を入力して、 Commit ボタンを押します。

履歴を見る

では保存した内容を見てみます。

今はmasterブランチなので、 Git GUI のメニューの Repository > Visualize master’s History を開きます。

変更内容や入力したメッセージ、変更した人(自分だけですが)の情報などを見ることができます。

変更のたびにCommitしていくことで、情報が溜まっていくことになります。

バージョン管理しないフォルダ・ファイル

プロジェクトのフォルダにバージョン管理しないフォルダ・ファイルが含まれる場合があります。

例えば以下のフォルダ、ファイルをプロジェクトのフォルダに置いて、
これをバージョン管理対象から外してみます。

  • IgnoreDirectory (フォルダ。中に IgnoreText2.txt というファイルを含む)
  • IgnoreText.txt

バージョン管理対象から外すには、下記のような内容で .gitignore というファイルをプロジェクトフォルダ直下に置きます。

.gitignore

IgnoreDirectory/*
IgnoreText.txt

この状態でCommitすると、 .gitignore のみが追加され、
IgnoreDirectory フォルダ、中の IgnoreText2.txt 、及び IgnoreText.txt は無視されます。

Unityプロジェクトの Temp フォルダ( Unity Editor 実行時に一時的に作成されるフォルダ)などは、
保存したりしようとするとエラーになるため、 .gitignore に含めると良いと思います。

取り消し

例えばCommit Messageの入力ミスなどでCommitを取り消したい場合。

先程と同じく Repository > Visualize master’s History から履歴を表示します。

で、取り消したいCommitを選択した状態で右クリック > Revert this commit で取り消すことができます。

過去のCommitを消すことも可能ですが、例えばテキストファイルを追加してCommit > 内容を変更してCommitした状態で、
前者のCommitを取り消そうとすると競合が発生し、エラーとなります。

最新のCommitから順番に戻すなどの作業が必要となります。

このRevertも履歴には残るのですが、完全にCommitを抹消したい場合は、
戻したいCommitを選択して右クリック > Reset master branch to here を選択します。

この時 Soft 、 Mixed 、 Hard が表示されます。

  • Soft: ファイルの変更内容はそのままで、Commitのみが取り消される
  • Mixed: ファイルの変更内容はそのままだが、Commitが取り消されて Stage Changed の状態も Unstage Changedに戻される
  • Hard: 変更内容ファイルも取り消され、Commit前の状態まで戻される

Resetのあとファイルを任意で変更するなどしてCommitを行うと、
それより先のCommitは削除されます。

Branchを作る

例えば比較的規模の大きい変更を試しに実装してみたい場合。

もちろんプロジェクトをまるごとコピー、という方法もあります。

しかし、 Branch を利用することで、履歴を複数に分割することができるため、
もとのファイルを( master に)残しながら変更後の内容をCommitし、
それをマージする、といったことが可能になります。

また、複数人で開発を行う場合、
それぞれの開発環境にブランチを作成して開発 > master にマージする、といったことが可能になります。

Branchを作る

Git GUI のメニュー > Branch > Create から作成が可能です。

Branchを切り替える

Git GUI のメニュー > Branch > Checkout から切り替えが可能です。

なおデフォルトのBranchは master です。

作成した Branch でファイルを変更してCommit > master にブランチを切り替えると、
master には変更が反映されていないことが確認できます。

f:id:mslGt:20170830022350j:plain

masterにマージする

作成したBranch (ここでは Branch1 とします)を master にマージするには、

  1. Branch1 で変更をCommitする
  2. master に切り替えて、 Git GUI のメニュー > Merge > Local Merge から、 Branch1 を選択する

ただし master と Branch1 の両方で同じファイルを変更していると、
競合が発生してエラーになります。

終わりに

とりあえず触りの部分だけ書いてみましたが、
資料を作成しつつ必要に応じて修正・追加する予定です。。。

参照