このヘージと関連するページ一覧

  • 一人でイチから始めるGIT 導入編
  • 一人でイチから始めるGIT gitignore
  • 一人でイチから始めるGIT push
  • 一人でイチから始めるGIT merge
  • 一人でイチから始めるGIT conflict

  • このページの最終更新日 2020/10/25

    一人でイチから始めるGIT 導入編

     趣味や勉強でプログラムを作っている分にはそれほどプログラムのバージョン管理について意識することはないかもしれません。しかし、業務でプログラムを書いているとバージョン管理を適切に行うことが必須になってきます。バージョン管理ツールを何も使わないでソースコードを管理する場合には、ソフトウェアをリリースした時点でのソースコード一式を格納するフォルダに日付などをつけて残しておき、ソフトウェアをバージョンアップする際はソースコード一式を格納したフォルダをコピーして修正していくことを繰り返す方法でしょうか。1人で1月程度で終わるような小規模なソフトウェアを作っている段階であればこの方法でなんとかなるかもしれません。
     しかしながら、こういうやり方では多人数でソフトウェアを作っていけば開発は困難になりがちですし、一人の規模のソフトウェア開発でもユーザーからの機能追加の要望が重なり、ソフトウェアの規模が膨らむとソースコードの管理を行うことに時間が割かれるようになります。いつ、どのような理由で、どこが修正されたかも良く解らないソースコードが出来上がれば、客先に配布したソフトウェアのバージョンや日時とソースコードの対応も良く解らなくなってきます。そしてこのような状況に陥ればトラブルも発生しやすくなってきます。

     そのため一人の開発であってもソースコードの適切な管理を行うことはとても大切です。バージョン管理ツールとしてはSubversionやGITが有名ですが、ここではGITについて説明していくことにします。GITの教科書やWebページなどは沢山ありますので、探せばすぐに情報は得られると思います。しかしそのような情報はコマンドの説明などの索引的なものが多く、全くの初心者が「手を動かしてトレーニングする」という観点から書かれているものは少ないように感じます。そこで本ページでは、プログラムを書くのもバージョン管理もそれほど長けていない新入社員が、自分の指でGITを動かして体で覚えていくことを目的とした資料を残していこうと思います。
     実行環境はWindows7もしくはWindows10とし、Git for Windowsを使用するものとします。Gitのバージョンは執筆時点(2018/06/29)では2.18.0です。

    1、Commitを実行できるようになるまで

     まずはGit for windowsをインストールしましょう。「https://gitforwindows.org/」からダウンロードしてインストールします。

    Git for Windowsのダウンロード画面

    - pic.1 -

     インストール時に設定を色々聞かれますが、ひとまずデフォルトのままインストールすればオーケーです。インストールの後、Desktop画面に「git_test」フォルダを作成し、このフォルダ内をクリックします。するど、pic.2のように「Git GUI Here」「Git Bash Here」という項目が追加されたメニューが表示されます。

    WindowsでGit Bashを開く

    - pic.2 -

     ここでは「Git Bash Here」をクリックします。すると pic.3のようなコマンドラインインターフェースが起動されます。

    Gitのコマンドライン

    - pic.3 -

     インターフェースのデフォルト設定では文字が小さくて見えづらい場合があるため、インターフェースの左上のアイコンをクリックし、「Options」欄から文字フォントなどの設定を行って「Save」ボタンをクリックしておきます。

    Git for Windowsのオプション設定

    - pic.4 -

     では早速コマンドラインインターフェースにコマンドを入力してGITを動かしていきます。まず最初に「リポジトリ」というファイルを管理するためのフォルダを作成する必要があります。このリポジトリはGIT自身がファイルを管理するためのものであって、ユーザーが直接このリポジトリ内部のファイルをいじくってはいけません。pic.5のように「git init」とコマンドを打ち込みEnterキーを押すと「.git」フォルダが作成されます。このフォルダは隠しフォルダになっているため、OSの設定で隠しファイル・隠しフォルダを表示する設定にしておいて下さい。

    ローカルリポジトリの作成

    - pic.5 -

     次にテキストファイルを1つ用意してGITで管理していきましょう。では適当にテキストファイルを用意して下さい…と言いたいところですが、使っているテキストエディタは人によって違いメモ帳だったりサクラエディタだったりしますし、文字コードもShift_JISで日本語特有文字を書かれると問題があったりするので、聞き慣れない人もいるかもしれませんが「vi」を使ってテキストファイルを作成することにします。Linuxを使ったことがある人であれば「vi」は触ったことがあるでしょう。
     まず pic.6 のように vi f1.txt とコマンドを書きます。「f1.txt」というのは今から作成しようとするファイルの名前です。

    viでファイルを作成する

    - pic.6 -

     Enterキーを押すとGITのコマンドが非表示になり、コマンドラインインターフェースの上側には何も表記されていない状態になります。この状態はviエディタが呼び出された状態になっています。vi の仕様上このまま文字を入力することは出来ません。文字を入力するためには1回「I」キーを叩くことで viを編集モードにする必要があります。「I」キーを押した後、pic.7のように「line 1」と書き込みます。

    viでファイルを編集する

    - pic.7 -

     では文字列を入力したらf1.txtファイル保存します。現在viは編集モードになっていますが保存するためには編集モードを終了する必要があります。編集モードを終了するためには「Esc」キーを押します。「Esc」を押した後、「:wq」とキーを順番に押して下さい。pic.8の赤枠のように表示されていれば大丈夫です。

    viでファイルを保存する

    - pic.8 -

     「:wq」を入力した後にEnterキーを押すとファイルが保存され pic.9 のように元のGITのインターフェース画面に戻ります。またgit_testフォルダ内部に、「f1.txt」ファイルが作成されていることも確認します。

    viでファイルが適切に保存されたことの確認

    - pic.9 -

     次にf1.txtファイルをGITのリポジトリで管理します。まずコマンドで「git add "f1.txt"」と打ってEnterキーをクリックします。この段階ではまだこのファイルをリポジトリで管理しましょうと言っているだけで、実際にはまだ管理されていません。ファイルの追加や変更を実際にリポジトリへ反映されるためには commit コマンドを使用します。
     では- pic.10 -のように「git commit -m "f1.txtファイルの登録"」とコマンドを打ちEnterを押します。ダブルクォーテーションで囲んだ箇所は、プログラムの開発者が更新の内容を把握するためのものであり、内容が把握出来ればどのように記載しても問題ありません。
     さて上記の通り実行しても何やらエラーメッセージが表示され上手くいかないようです。上手くいかなくてもGITがどうすれば良いのか指示を出してくれますので、GITに表示された文面を良く読みましょう。

    コミット時にGitで表示されるエラーメッセージ

    - pic.10 -

     どうやらアカウント情報が入力されていないことが問題のようです。pic.11 のように「git config --global user.email "my@example.com"」「git config --global user.name "My Name"」と入力します。ダブルクォーテーションで囲まれた箇所は各自のものを入力して下さい。ひとまず練習用ですし後から変更も可能ですのでとりあえず適当に入力しても構いません。メールも実在のものでなくても練習中は問題ありません。

    Gitのグローバル設定を変更する

    - pic.11 -

     さて上手くいったようです。最後に「git log --oneline」+Enterと打ってコミットの内容を確認します。pic.12のように「7桁表示のハッシュ値 (HEAD -> master) f1.txtファイルの登録」と表示されていればオッケーです。

    Gitのコミット一覧を表示する

    - pic.12 -

    2、Commit間の差分を表示する

     コミットが出来るようになったら、次はコミット間の差分を表示する方法を学習しましょう。実際のコード管理でも、纏まったプログラムの修正毎にコミットを残しておきコミット間の差分を取ることで、どこをどう編集したかを容易に追跡出来るようにしておきます。第1節では「line 1」とだけ書かれたファイルを用意しましたが、これに引き続き pic.13のようにviを起動して「line 2」という一行を追加します。

    テキストファイルに2行目を追加

    - pic.13 -

     続いて pic.14のように「git add f1.txt」「git commit -m "line 2追加"」とコマンドを打ってコミットを行います。ところで話は少しそれますが、「warning: LF will be replaced by CRLF in f1.txt」というワーニングメッセージが表示されていますね。
     これはGitのリポジトリには改行コードを統一する仕組みが備わっていることに起因します。Windowsでは通常改行コードCRLF[\r\n]ですが、viで編集した際には改行コードはLF[\n]となっています。Windowsに付属しているメモ帳ではCRLFしか正しく改行表示されませんので、ここで作成したf1.txtファイルをメモ帳で開くと改行がされていないように表示されるはずです。
     まぁこの辺りで何か問題があるのかとか対処法などはおいおい説明するとして、このワーニングメッセージは無視して練習を進めていくことにします。

    改行コードに関するwarningメッセージ

    - pic.14 -

     コミットが完了して pic.14のように表示されたら、先ほどと同様の方法で今度はf1.txtファイルに「line 3」と追記してコミットします。最後に「git log --oneline」とコマンドを打ってpic.15のように表示されればオッケーです。ハッシュ値は違っていて問題ありません。

    テキストファイルに3行目を追加

    - pic.15 -

     ではコミット間の差分を表示してみましょう。説明は後にして「git diff HEAD~2 HEAD f1.txt」とコマンドを打ちます。すると、pic.16のように表示されるでしょう。
     git diff は差分を表示するコマンドです。その後に続く HEAD~2 HEADはどのコミット間の差分を取るかを表しています。HEADとは一番最後に行ったコミットを表し、この場合は「line 3」を追加したときのコミットです。HEAD~2とは一番最後から2つ前のコミットを表しており、この場合は「line 1」と書かれたファイルを登録したときのコミットです。
     このようにコマンドを打つと、2つ前のコミットから最後のコミットの間でどのように変更されたかが表示されます。「line 2」と「line 3」を追加しましたから pic.16のように追加された行の頭に「+」マークが付き、緑色で表示されます。

    Gitの差分表示(HEAD~2とHEAD)

    - pic.16 -

    HEAD~1とHEADの間のコミットも確認してみましょう。また、HEAD~1やHEADの箇所をハッシュ値にして「git diff 00275b7 752b252 f1.txt」と打ってコミット間の差分を表示することも出来ます。

    Gitの差分表示(HEAD~1とHEAD)

    - pic.17 -

    3、日本語の表示の注意点

     我々日本人がgitを使用する場合に当然日本語文字も扱うこともある訳ですが、gitで管理するファイル名が日本語であったり、ファイルの中身が日本語である場合に注意すべき点がありますのでこの節ではその注意点について述べておきます。
     まず、viで「日本語のファイル.txt」という日本語のファイル名のファイルを作成し、ファイル内には「あいうえお」と記入してコミットします。次にファイルに「かきくけこ」と別行に追記してコミットします。具体的なコマンド手順は、

    1、「vi 日本語ファイル.txt」とコマンドを打ってviを開く。
    2、viで「あいうえお」と書かれたファイルを作成して保存する。
    3、「git add 日本語ファイル.txt」と打ってファイルをgitに登録する。
    4、「git commit -m "日本語ファイルの登録"」とコマンドを打ちコミット。
    5、「vi 日本語ファイル.txt」とコマンドを打って日本語ファイル.txtファイルを再編集する。
    6、viで「かきくけこ」を「あいうえお」の次の行に書き込みファイルを保存する。
    7、「git add 日本語ファイル.txt」と打って編集したファイルを再登録する。
    8、「「かきくけこ」と追加」とコマンドを打ちコミット。

    ここで「git log --oneline」と打って、pic.18のようになっているものとします。

    Gitで日本語ファイル名のファイルを管理する

    - pic.18 -

     さて、では第2節と同様に「あいうえお」と書いた状態と、「かきくけこ」と書いた状態で差分を取りましょう。コマンドは「git diff HEAD~1 HEAD 日本語ファイル.txt」とします。すると pic.19のように何だか良く解らない数字が羅列された状態になってしまっています。しかし「かきくけこ」と追記したことの差分は適切に表示されており、ファイルの中身の管理自体は出来ているようです。
     さらに「git ls-files」とコマンドを打ちましょう。git ls-filesコマンドはgitで管理しているファイルの一覧を表示してくれます。すると第1節で作成した「f1.txt」ファイルと、良く解らない数字の羅列に「.txt」拡張子がくっついたファイルが表示されています。この良く解らない数字の羅列のファイルが、この第3節で作成した「日本語ファイル.txt」ファイルです。

    Gitの設定が適切になされていないと、日本語のファイル名が文字化けする

    - pic.19 -

     この文字化けを回避するには「git config --global core.quotepath false」というコマンドを打ちます。その後、先ほどと同様にdiffコマンド、ls-filesコマンドを叩いてみましょう。

    Gitの設定を正しく行うことで、日本語のファイル名が問題なく表示される

    - pic.20 -

     適切に日本語のファイル名が表示されました。ファイルの中身の日本語のdiffはデフォルトの状態で問題なく表示されているように見えますが、注意しなければならないのが文字コードです。Git for Windowsをインストール後、特別な設定をせず本ページのとおり作業した場合にviで編集すると「UTF-8」文字コードで保存されます。しかし、Windowsの付属の「メモ帳」でデフォルトのまま保存すると「Shift_JIS」文字コードで保存されます。
     Shift_JISで書かれたテキストファイルをgitで差分表示する場合は別途設定する必要が出てきます。しかし原則的に弊社でgitで管理するようなテキストファイルは「UTF-8」文字コードで管理しているため、Shift_JISの場合の設定については触れないことにします。「Visual Studio」「Visual Studio Code」「Android Studio」などのプログラムの開発環境でコードを書くと、特別な設定をしていなければ「UTF-8」文字コードで保存されます。またWebサーバーに挙げているhtmlも「UTF-8」としています。ただ、Windowsで動作する解析系のソフトウェアは大抵Shift_JIS文字コードでファイルを書き出しているようです。

     Gitの管理に限らず、UTF-8とShift_JISなどの文字コードの違いや、CRLFとLFなどの改行コードの違いは、理解していないとトラブルの元凶になります。高機能のテキストエディタでは基本的に文字コードや改行コードの違いがきちんと視認出来るものになっていますので、普段から注意して見る癖をつけておくことも大切です。
     pic.21にフリーのテキストエディタであるサクラエディタの表示を示しておきます。

    サクラエディタでは改行コードの違いが視認出来る

    - pic.21 -


    → 一人でイチから始めるGIT gitignoreへ続きます。