バージョン管理システム
- 公式サイト
git - 必要知識
- Linux
- コマンド
- ファイル作成・修正
- ある程度のまとまりにする
- 履歴データベースの保存する
- 作業ディレクトリ
- ステージングエリア(index) 作業経過を保存しておく
- リポジトリ(ローカル・リモート)
-
Mac
$ brew install git
-
Windows
https://gitforwindows.orgからmsysgitの最新版のインストール
-
コミット時のAuthorの変更
# 設定 $ git config --global user.name "<任意のユーザ名>" $ git config --global user.email "<任意のメールアドレス>"
-
出力を色付けしてくれる設定
# 任意 $ git config --global color.ui true
-
安全対策
$ git config --global push.default current
-
設定の確認 =>
-l
オプション使用$ git config -l $ git config -l --global
-
ヘルプ
$ git config --help # もしくは $ git help config
-
まずはディレクトリを作ろう。
$ mkdir gitLesson $ cd gitLesson
-
gitを使う準備をします。
$ git init
これで準備は終了です。
git init
で、ファイルの変更や履歴の情報をつかさどる「リポジトリ」が作成される。
リポジトリは、.gitというディレクトリで管理される。
つまり.gitを削除するとリポジトリの情報は消えるということ。
``` shell
$ git add .
$ git commit -m "コミットメッセージ"
```
ファイルを記録し、履歴として参照できる状態にすることを、コミットと言います。
commit
の直前に行っているadd
は、ファイルをコミットの対象に追加するという感じ。
add
していない修正は、commit
を実行してもコミットされない。
-
新規ファイルの作成
$ echo "Hello git ver2" > Sample02.txt
-
コミット : Sample.txtをコミット
$ git add Sample02.txt $ git commit -m "Add Sample02.txt"
-
ファイルを修正
/Sample.txt
を開いて修正してください。 -
コミットする
$ git add Sample.txt $ git commit -m "Add Sample.txt"
これで修正したファイルを記録できました。
-
ファイルを削除する
$ rm -i Sample02.txt
-
ファイル削除をコミットする
$ git rm Sample02.text $ git commit -m "remove Sample02.txt"
これでファイルを削除し、コミットすることができる。
-
ログを確認する
$ git log
修正履歴(ログ)を確認することができる。
ページが1ページで収まらない時は、
スペース
で改ページ、q
で終了する。
commit 5cdb8db1fcf49d00d264bea2d04efc56a6cede59 #①
Author: hoge <gitLesson@gmail.com> #②
Date: Tue Sep 3 21:01:16 2019 +0900 #③
Add Hello git #④
- Revision : コミット番号
修正の履歴を一意に特定するハッシュ値が割り振られる。 - Author : 修正者の情報
1-1, gitの設定のconfig
で設定できる。 - Date : コミットした時刻
- Message : コミットメッセージ
修正内容の概要
-
ステータスを確認する
$ git status
現在の作業状況を確認できる。
ファイルの追加・修正・削除・addを行ってstatusがどう変化するか確認する。
On branch master # ①
Your branch is up to date with 'origin/master'.
Changes to be committed: # ②
(use "git restore --staged <file>..." to unstage)
modified: hoge.txt
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: Sample.txt
Untracked files: # ④
(use "git add <file>..." to include in what will be committed)
hoge_hohe.txt
- 作業ブランチ
Changes to be committed:
コミットする準備ができた修正。(addしたもの)
ステージングされてインデックスに登録された修正をリストアップされる。Changes not staged for commit:
ステージングされていない、インデックス未登録のワーキングツリーの修正がリストアップされる。(addされる前)Untracked files:
gitで管理する対象になっていない新しいファイル。
git status
で修正がどのように扱われている状態なのか確認できます。
ファイルが修正されコミットされるまでの間に、gitでは3つの状態を行き来します。
commit
の前にadd
があるのはそのため。
- ワーキングツリー
現在作業している実ファイル。 - インデックス
コミットするための情報を登録する場所を指す。
インデックスに登録されたものだけがコミットできる。 - ローカルリポジトリ
コミットの情報が記録される場所。
-
差分の確認
$ git diff
必ずファイルを修正した状態でコミットする前に差分を必ず確認しましょう。
git diff
でワーキングツリーとリポジトリとのファイルの差分、修正の内容が確認できる。
コミット前に、修正内容が間違っていないか差分をチェックする癖をつけておこう。
いろいろな差分を見る
$ git help
$ git help -a
$ git help <command>
-
例)addってなんだっけ...
$ git help add
git config
には以下の3種類の設定が存在する。
範囲 | オプション | 場所 |
---|---|---|
システム全体 | --system |
/etc/gitconfig |
特定のユーザー | --global |
~/gitconfig or ~/.config/git/config |
リポジトリ固有 | --local (デフォルト) |
repository/.git/config |
設定は、
【システム】=>【ユーザー】=>【リポジトリ】
の順番で組み込まれる。
同じ項目は後で組み込まれた設定が優先され設定される。
共通で設定したい場合は、
git config --global user.name <ユーザー名>
リポジトリ固有で設定したい場合は、
git config user.name <ユーザー名>
と指定するとよい。
また、ファイルを直接書き換えることでも設定を変更できる。
gitで管理しないファイルを指定するには、.gitignore
というファイルを作成する。
下記に例題を紹介する。
-
.gitignoreの作成
$ mkdir .gitignore
-
.DS_Storeを除外する
/.gitignore
# mac用 .DS_Store
gitは空のディレクトリを管理の対象にしない。
空ディレクトリをコミットしたい場合は、.gitkeep
という名前の空ファイルを作成しておくのが一般的。
ビルドによる生成ファイルなどを削除する場合は、git clean
を使用する。
# 対象外ファイルの確認
$ git clean -n
# 指定のファイルを削除
$ git clean -f <ファイルパス>
# カレントディレクトリのファイルを削除
$ git clean -f
# ディレクトリの削除
$ git clean -d
-x
をつけると、.gitignore
で無視される設定のファイルも消すことが出来る。
$ git commit -a
# コミットメッセージ付き
$ git commit -am "Add Message"
新規ファイルは個別にadd
する必要があるので注意。
【 1-8, 差分を確認する 】で差分の確認を学んだが、ここではいろいろな差分の見方を紹介する。
-
ワーキングツリーとリポジトリの差分を表示
$ git diff
-
インデックスとリポジトリの差分を表示
$ git diff --cached
-
ワーキングツリー&インデックス と リポジトリの差分を表示
$ git diff HEAD
-
単語単位で差分表示
$ git diff -w
-
特定のブランチとの差分
$ git diff <BranchName>
【 1-6, 修正履歴(ログ)を確認する 】で修正履歴について学んだが、ここではいろいろな修正履歴(ログ)を紹介する。
-
ログの表示
$ git log
-
コンパクトに表示
$ git log --oneline
-
ログと変更された場所
$ git log -p
-
どのファイルが何箇所変更されたか確認できる
$ git log --stat
-
まずはログを確認する。
$ git log
ここで見るのはコミットのハッシュ値(リビジョン番号)
$ git checkout HEAD^
ファイルの状態が一つ前の状態になり、git log
やgit diff
の出力が変わったことが確認できます。
-
二つ前の状態
$ git checkout HEAD^^ # または $ git checkout HEAD~2
HEADは現在の作業ブランチの先頭コミットの別称。
つまりHEAD^
は先頭ブランチから一つ前の名称。
$ git checkout <RevisionNumber>