Skip to content
pastak edited this page Apr 12, 2014 · 4 revisions

つんくで覚えるGit入門

[email protected]

はじめに

  • この資料の内容はフィクションであり、実際の人物、団体、事象などとは無関係です。
    • なので、実際の出来事と時系列が前後していたり、そもそも虚構だったりすることも含まれています。
    • Gitに関する説明は架空のものではありません。
  • pastakはハロプロヲタではない
  • 一応、それっぽいレポジトリをガリガリと作っておいたので見たい人はどうぞ pastak/hello_pro
    • ブランチとかは切ってないので、以下の話とは一致しないかもしれない

ハロープロジェクト設立

  • つんく「そうや、アイドルグループ作ろ。」
  • やすし「君もアイドルグループ作るんか。ゆくゆくは系列化もするやろし、それやったら Gitを使うとええで」
  • つ「ほんまですか?」
  • カタカタ
  • つ「Macやったら、Git初めから入ってるんかぁ」
  • や「せやで。ほな、まず、 適当なフォルダ作ってgit initって打ってみ」
  • つ「ポチポチっとな」
$ mkdir hello_project
$ cd hello_project
$ git init
Initialized empty Git repository in /Users/tsunku/workspace/hello_project/.git/
  • つ「お、なんか出ましたわ」
  • や「めでたい。それで今後はGitで管理できるで」

Gitって?

  • つ「ところで、やすしさん、Gitってなんなんですか」
  • や「Gitはバージョン管理システムの1つなんや」
  • や「バージョン管理システムっていうのは、例えば今までに『あー、このファイル、一昨日の時の状態の方が良かったから戻したい!!』ってことあるやろ」
  • つ「あー、たまにありますね」
  • や「そういう時って、まぁ最近はMacやとTimeCapsuleとかもあるけど、こういうことしてる人も多いんちゃう?」
    • example_old.txt
    • example_20140410.txt
    • backup/example.txt
  • や「でも、これやと、いつのどのファイルに戻せばいいかとか分かりづらいやろ」
  • つ「たしかに」
  • や「あと、メンバーで共有するときとかTimeMachineやと全員がMacやないとあかんやん。」
  • や「Gitはこういう悩みを全部解決してくれるねん。いつ、誰が、どういう意図で、何を変更したかをGitは記録しておいてくれる。まさにそのプロジェクトやファイルの歴史やな。あと、GitはWindowsやMac、あとLinuxなどあらゆるOSで動作するから共有も簡単に出来るんやで。」
  • つ「へぇ、なんかめっちゃ便利そうですねぇ」

Gitにファイルを追加する

  • や「じゃあ、今度はメンバーを追加していこか。初期メンバーを表現するファイルをディレクトリ内に作ろか」
  • つ「ぽちぽちぽち〜」
    • touch 中澤裕子.txt 石黒彩.txt 飯田圭織.txt 安倍なつみ.txt 福田明日香.txt
  • つ「できました〜」
  • や「おっしゃ、じゃあまずはgit add touch 中澤裕子.txt 石黒彩.txt 飯田圭織.txt 安倍なつみ.txt 福田明日香.txt`で変更したファイルをGitに伝える。」
  • や「そして、git commit -m "初期メンバーを追加"でGitに変更を記録させるんや。」
  • つ「ほー。ぽちぽちぽちっと」
  • や「ここで-mのあとに書いた文字列はコミットメッセージって言って、歴史と共に記録されるから内容が一目で見て分かる簡潔なのをつけるとええで」
  • や「できたら、git logでGitの記録を見てみよか。さっきの初期メンバーを追加したことがちゃんと記録されてるやろ」
  • つ「git logっと」
commit 3a11f81ff9ba16c77e0833fe5bf94fbf423d376e
Author: tsunku <[email protected]>
Date:   Sat Apr 12 01:56:27 2014 +0900

    初期メンバーを追加

変更をさらに追加する

  • や「まぁ、せっかくやしそれぞれのファイルにプロフィールとかリリースタイトルとか入れとこか」

  • つ「1枚目は『愛の種』なんで、これをそれぞれのファイル内に書き込んでおきますね」

  • や「おし、 じゃあ書けたら、今度はgit add .で変更したファイルをGitに知らせよか。」

  • つ「お、このgit addのあとの.ってなんですか?」

  • や「この.今いるディレクトリ以下のファイル全てを指してるんや。この場合では、『今いるディレクトリ以下のファイルを全て変更対象として追加する』ってことやな。」

  • つ「便利ですね」

  • や「今はディレクトリにそれしかないから良いけど、意図しないファイルを監視対象にしてしまうかもしれないから使うときは注意やで」

  • つ「なるほど」

  • や「ここで一旦git statusを実行してみよか」

  • つ「ぽちっと」

On branch master Changes to be committed: (use "git reset HEAD ..." to unstage)

    modified:   中澤裕子.txt
    modified:   石黒彩.txt
    modified:   飯田圭織.txt
  ~~~~~~~
  ~~~~~~~
つ「なんかいっぱい出てきました」
や「じゃあ、これの意味について説明するわ」

## Gitの概念について(1)

- や「ところでGitには3つの領域があるねん」
- つ「というと?」
- や「**作業ディレクトリ**(作業フォルダ)、**インデックス**、**リポジトリ**の3つや」
- や「作業ディレクトリはファイルの保存場所のことで、まぁいつも使ってるフォルダと同じやな」
- や「インデックスは`git add`したときに変更されたファイルの情報を一時的に保存しとく場所や」
- や「さっきの`git status`で`Changes to be committed:`の後に続く部分がこのインデックスの中に入ってるファイル名が並んでるんや。」
- や「で、3つ目のリポジトリはGitが変更の歴史を蓄えてる場所のことや。`git commit`をするとインデックスの中身がリポジトリに書き込まれるんやで」
- や「ここでじゃあ、`touch hoge.txt`でファイルを作ってからもう1回`git status`してみよか」
- つ「はい〜」

On branch master Changes to be committed: (use "git reset HEAD ..." to unstage)

  modified:   中澤裕子.txt
  modified:   石黒彩.txt
  modified:   飯田圭織.txt

Untracked files: (use "git add ..." to include in what will be committed)

  hoge.txt
- や「`hoge.txt`はまだ`git add`されてないから、Gitの監視対象外であることが示されてるわけなんやけど、今回は`hoge.txt`は不要やからこの状態でコミットしよか」
- や「あとはさっきと同じで`git commit -m "『愛の種』リリース"`でOKや」
- や「Gitで歴史を記録するのは`git add`で変更したファイルを指定して、`git commit`で歴史を記録する。この2つの繰り返しだけなんや。これでいつでも過去に戻せるようになるんやで。まぁ当然、歴史に残ってないと戻せへんからこの2つのコマンドは忘れずにな」
- や「そのときにはどの変更点がさっきの3つのどこに含まれてるかってことを意識しておくと変な歴史を増やしてしまったりするのを防げると思うで」
- つ「これだけでちゃんと歴史が記録できるなら楽っすね」
- や「まぁGitはこれだけじゃなくて、歴史を分岐させたりとか色んなことが出来るんやけど、まぁそれは追々説明するわ」

## 歴史を分岐させる

-