LoginSignup
0
0

Gitのチュートリアル 演習 1

Posted at

リポジトリ作成から基本的なコミットの方法

gitをコマンドラインで利用するチュートリアル的な演習の第1部です。1

この文書ではgit initgit statusgit addなどを使った単純なコミットまでの演習、ファイルの状態やワークフローについての解説などを取り扱っています。

この文書ではgitをコマンドラインで利用するための環境構築については触れていません。(ご参考までに私の環境構築ログ)

参考サイト

[演習1] ユーザ識別情報を登録する

gitを使い始める際に一番最初に行う設定です。
commitなどを行ったときにAuthorとして記録される情報を登録します。

command
~$ git config --global user.name "KaoriTakinami"
~$ git config --global user.email "61788460+KaoriKoba@users.noreply.github.com"

githubを利用されている方へのTips

もし、将来的にローカルリポジトリを github へ移行したい場合は、ここで指定するメールアドレスをgithubで用意されている公開用のメールアドレスにする事をお勧めします。

プライベートなアドレスを指定した場合、githubへの remote pushの際に "プライベートなメールアドレスが公開されてしまう" という旨の警告が出されエラーとなります。

プライベートなメールアドレスを利用してコミットなどのlogを残したリポジトリをgithubへpushする場合はgithub側のメール設定で

Block command line pushes that expose my email

をオフにする必要があります。

※ チュートリアル演習1~4にはローカルリポジトリからgithubへpushする内容は含みませんので、演習を行うだけであればどのようなアドレスを設定しても問題はありません。

[演習2] リポジトリを作ろう

まず、プロジェクトのフォルダを作成し、その中にgitのローカルリポジトリを作成します。

[演習2-1] 演習用の準備・プロジェクト用ディレクトリの作成 2

command コードブロック内に表示しているコマンドプロンプトは
カレントディレクトリ$
です。

演習用のディレクトリを用意します。mkdir git_prac
そのディレクトリの中にプロジェクト用のディレクトリを用意します。mkdir proj
さらにその下に今回のチュートリアル用のディレクトリを作成します。mkdir tutorial3

command
~$ mkdir git_prac
~$ cd git_prac
~/git_prac$ mkdir proj
~/git_prac$ cd proj
~/git_prac/proj$ mkdir tutorial
~/git_prac/proj$ cd tutorial

[演習2-2] リポジトリを作成する

作成したtutorialディレクトリ内でgit initをすることで、カレントディレクトリ内のファイルがgitの管理下におかれる準備ができます。
具体的にはカレントディレクトリ内に .git という名のサブディレクトリが作成されます。

command
~/git_prac/proj/tutorial$ git init
Initialized empty Git repository in /home/user/git_practice/project/.git/

この時点でカレントディレクトリ内にファイルがあってもリポジトリに登録(コミットやステージングなど)されたりはしません。

[演習3] 状態について知ろう

リポジトリにファイルを登録する前にgitの世界での管理のための、ファイルの状態と、3つの状態(ワークフロー)と、その状態を確認するコマンドgit statusを紹介します。

この項目は長く難解な説明になっています。

git statusで表示される内容を理解するには必要な情報ですが、この項目を飛ばして [演習3-2] リポジトリの状態を確認しよう 以降を進め、適宜この項目を参照していただいても構いません。

[演習3-1] gitの管理下でのファイルの状態とgitのワークフローについて

ファイルの状態や、編集から履歴登録までのワークフローなどを解説します。

gitのファイルの状態

参考
2.2 Git Basics - Recording Changes to the Repository (日本語訳)
この項目の日本語訳は少し難解なのでよくわからない場合は原文を参照したほうが理解しやすいかもしれません。

難解かもしれない部分 1.3 使い始める - Gitの基本の`三つの状態`の項
Gitは、ファイルが帰属する、`コミット済、修正済、ステージ済`の、三つの主要な状態を持ちます。
この訳は挿絵と語順があっていないので理解の妨げとなるかもしれません。原文もご覧ください。
Git has three main states that your files can reside in: `modified, staged, and committed`:

上記参考文献の要約

リポジトリを作成したりチェックアウトしたディレクトリ内のファイルは2つのどちらかになっている。

  • tracked (追跡されている)
  • untracked (追跡されてない)

tracked (追跡されている) ファイルがリポジトリで履歴管理対象のファイル。

tracked(追跡されている) ファイルは以下の状態になる。

  • unmodified (変更されていない)
  • modified (変更されている)
  • staged (ステージされている)
    ファイルの状態遷移図

gitで履歴管理を始める時は untracked のファイルを tracked にする事から始まります。

管理されていないファイルをリポジトリに登録する

  1. まず、untracked (追跡されてない) ファイルをgit addして staged (ステージされている) にします。4
  2. コミットgit commitする。コミットすることでそのファイルの変更履歴がリポジトリに記録されます。

untracked のファイルを tracked にできたら、その後のファイルの状態は大抵以下のような流れなります。上記の図を参照しながらご確認ください。

管理されているファイルを更新したときのファイルの状態変化

  1. unmodified (変更されていない=リポジトリに登録されている内容と一致している)
  2. 編集すると modified (変更されている) の状態になります。
  3. git add を行い staged (ステージされている) の状態へ4
  4. コミットgit commitして変更履歴を記録します。
  5. コミットを終えたファイルは unmodified になり1の状態へ戻ります。

リポジトリにコミットするまでのワークフロー(各段階の呼称)

上記参考文献の要約

gitには主に3つの状態がある

  • modified (修正済) -- ファイルを変更したが、まだデータベースにコミットしていない状態
  • staged (ステージ済) -- 変更されたファイルの現在のバージョンを次のコミットのスナップショットに含めることをマークした状態(インデックス)
  • committed (コミット済) -- データが安全にローカルデータベースに保存された状態

この状態はgitの3つのセクションになる

  • working tree (ワーキングツリー) -- プロジェクトがチェックアウトされた状態
  • staging area (ステージングエリア) -- Gitディレクトリに含まれるファイルで、次のコミットに含まれる情報を格納
  • Git directory (Gitディレクトリ) -- プロジェクトのメタデータとオブジェクトデータベースを格納するGitの最も重要な部分
    gitのワークフロー解説図

基本的なGitのワークフローは次のようになります。上記の図を参照しながらご確認ください。

基本的なGitのワークフロー

  1. ワーキングツリー 5 内のファイルを編集(変更)。
  2. 次のコミットに含める変更済みファイルを選択してステージングgit add。これにより、ステージングエリア には選択された変更のみが追加されます。
  3. コミットgit commitを行う。コミットすることでステージングエリアのファイルがそのスナップショットとして .gitディレクトリ(リポジトリ) に保存されます。

[演習3-2] リポジトリの状態を確認しよう

次に紹介するコマンドはワーキングツリー内のファイルがどんな状態にあるのかを確認できるコマンドgit sattusです。

ワーキングツリーとは簡単に言うと git initgit checkout を行ったディレクトリの事です。つまり .git ディレクトリが格納されているディレクトリです。

git init したばかりのディレクトリでgit statusします。

command
~/git_prac/proj/tutorial$ git status
On branch master
nothing to commit, working tree clean

以降の演習では適宜git statusを使い、どのように状態が変化するかを説明しながらすすめます。

[演習4] リポジトリにファイルを登録しよう(ステージング)

登録するファイルを用意します。

command
~/git_prac/proj/tutorial$ echo "this is a test." >> test.txt

状態を確認git statusするとtest.txtがUntracked file6であることがわかります。
git statusで表示されるメッセージでも コミットに加えるものはないけどトラックしていないファイルがあると教えてくれます。

command
~/git_prac/proj/tutorial$ git status
On branch master
No commits yet
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        test.txt
nothing added to commit but untracked files present (use "git add" to track)

コミットに含めるためにtset.txtをステージングします。ステージングするコマンドはgit add です。

command
~/git_prac/proj/tutorial$ git add test.txt

状態を確認git statusしてみると新しいファイルがステージングされたことがわかります。

command
~/git_prac/proj/tutorial$ git status
On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   test.txt

[演習5] リポジトリにファイルを登録しよう(コミット)

コミットgit commitは、変更履歴をリポジトリに記録するためのコマンドです。

コミットする際には変更に関する簡単な説明を付加します。メッセージといいます。

メッセージは-m で指定できます。プロジェクト最初のコミットメッセージは "Initial commit" とし、プロジェクトの概要などを記すようです。

command
~/git_prac/proj/tutorial$ git commit -m "Initial commit"
[master (root-commit) 1866c44] Initial commit
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

状態を確認してみましょう

command
~/git_prac/proj/tutorial$ git status
On branch master
nothing to commit, working tree clean

更新されるものもなく、ワーキングツリーはきれいな状態のようです。

リポジトリに登録した履歴を確認するコマンドにgit logがあります。

command
~/git_prac/proj/tutorial$ git log
Author: KaoriTakinami <KaoriTakinami@foo.bar>
Date:   Thu Apr 27 19:23:43 2023 +0900

    Initial commit

[演習1] ユーザ識別情報を登録する で登録した情報でコミットされていることが確認できます。

[演習6] ファイルを更新してコミットする

tracked のファイル(test.txt)を更新してコミットしましょう。

今回はステージングgit addを省略してコミットする方法git commit -aを紹介します。

command
~/git_prac/proj/tutorial$ echo "plz ignore." >> test.txt
~/git_prac/proj/tutorial$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   test.txt
no changes added to commit (use "git add" and/or "git commit -a")
command
~/git_prac/proj/tutorial$ git commit -a -m "追加の変更"
[master caf0c0b] 追加の変更
 1 file changed, 1 insertion(+)

[演習7] プロジェクトに新しくファイルを追加しよう

新しくファイルを追加してみましょう。
tmpという名前のファイルを作成します。touch tmp

command
~/git_prac/proj/tutorial$ touch tmp
~/git_prac/proj/tutorial$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        tmp

nothing added to commit but untracked files present (use "git add" to track)

コミットの際に、git addを省略してステージングを行う方法git commit -a演習6で紹介しましたが、untrackedのファイルは自動的にステージングしない ので、新しいファイルを登録する場合はgit addを省略できません。

新しくファイルを追加する場合はgit addした後、git commitします。

command
~/git_prac/proj/tutorial$ git add tmp
~/git_prac/proj/tutorial$ git commit -m "temporary file の追加"
[master db39370] temporary file の追加
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 tmp

一度追加した後は、git addを省略してgit commit -aを利用することができます。


ここまでの内容で [演習3-1] gitの管理下でのファイルの状態とgitのワークフローについて で紹介したファイルの状態3つのセクションについて具体的な利用例を紹介しました。

次のGitのチュートリアル演習 2ではステージングが存在する理由を実感できるような演習になればと思います。

  1. 4部構成の予定です。

  2. ディレクトリ名などはご自由に変更してください

  3. 後に続くチュートリアル演習でprojの下に複数のローカルリポジトリを作成するため、このようなディレクトリ構成にしています。

  4. ステージングといいます 2

  5. git initgit checkout を行ったディレクトリの事です。つまり .git ディレクトリが格納されているディレクトリです。

  6. 状態を示す言葉の意味が不明な場合は状態について知ろうを振り返ってみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0