Git
Gitは分散型のバージョン管理システムである。分散型バージョン管理システムは、リポジトリが複数あるバージョン管理システムである。Gitはリモートサーバにある中心リポジトリのコピーをローカル環境にコピーして、そのローカルリポジトリを使って作業を行う。
Linuxへインストールする
UbuntuやLinux Mintなど、DebianベースのLinuxディストリビューションの場合、apt-get コマンドを使ってgitをインストールする。
$ sudo apt-get install git
Windowsへインストールする
- GitのWebサイトを開く。
http://git-scm.com/ - 「Downloads」をクリックする。
- 「Windows」をクリックする。
- ファイルのダウンロードが始まる。
- ダウンロードしたファイルを実行する。
インストーラを実行すると、「Git Setup Wizard」の画面が表示される。
ライセンス
インストール先フォルダ
インストール先を選択する画面が表示される。デフォルトのままでよい。
コンポーネント
インストールするコンポーネントを選択する画面が表示される。必要なものにチェックを入れる。
コンポーネント | 説明 | |
---|---|---|
Addional icons | On the Desktop | デスクトップにアイコンを追加する。 |
Windows Explorer integration | Git Bash Here | Windowsエクスプローラーのコンテキストメニューに「Git Bash Here」を追加する。 |
Git GUI Here | Windowsエクスプローラーのコンテキストメニューに「Git GUI Here」を追加する。 | |
Git LFS (Large File Support) | ラージファイルサポート | |
Associate *.git* cofiguration files with the default text editor | Gitコンフィグレーションファイルをデフォルトのテキストエディタに関連付ける。 | |
Associate *.sh files to be run with Bash | 拡張子が「*.sh」のファイルをBashで実行する。 | |
Use a TrueType font in all consle windows | すべてのコンソールウィンドウでTrueTypeフォントを使う。 | |
Check delay for Git for Windows updates | Git for Windowsの更新プログラムの遅延を確認する。 |
スタートメニューのフォルダ
スタートメニューのフォルダを選択する画面が表示される。
スタートメニューにフォルダを作りたくなければ「Don't Create a Start Menu folder」にチェックを入れる。
Gitで使うデフォルトのテキストエディタ
Gitで使うデフォルトのテキストエディタを選択する画面が表示される。次のうちいずれかを選択する。
- Nano
- Vim
- Notepad++
- Visual Studio Code
- Visual Studio Code Insiders
- Sublime Text
- Atom
- Select other editor
「Select other editor」を選択すれば、任意のテキストエディタを使える。とくに使いたいものがない場合は、「Nano」を選ぶ。
PATH環境変数
HTTPS
- Use the OpenSSL library
- OpenSSLライブラリを使用すると、サーバ証明書はca-bundle.crtファイルを使用して検証される。
- Use the Windows Secure Channel library
- Windows Secure Channelを使用すると、サーバ証明書はWindows Certificate Storesを使用して検証される。このオプションを使用すると、配布されている社内のルートCA証明書を使用することもできます。
改行コードの変換
Gitからチェックアウトするときとコミットするときに改行コードの変換方法を選ぶ。
- Checkout Windows-style, commit Unix-style line endings
- チェックアウトするときはWindowsスタイル(CRLF)に変換する。コミットするときはUnixスタイル(LF)に変換する。
- Checkout as-is, commit Unix-style line endings
- チェックアウトするときに改行コードを変換しない。コミットするときはUnixスタイル(LF)に変換する。
- Checkout as-is, commit as-is
- チェックアウトするときに改行コードを変換しない。コミットするときも改行コードを変換しない。
HTMLやCSSはUnixスタイルで作るのが一般的である。Windowsで使っているテキストエディタがWindowsスタイルの改行コードしかサポートしていない場合は、チェックアウトするときにWindowsスタイルに変換して、コミットするときにUnixスタイルに変換するのがよい。
Git Bashで使う端末エミュレータ
追加オプション
しばらく待つと、Gitのインストールが完了する。
gitコマンド
git [-c name=value] [--exec-path[=path]] [--html-path] [--man-path] [--info-path] [--p|--paginate|--nopager] [--noreplace-objects] [--bare] [--git-dir=path] [--work-tree=path] [--namespace=name] command [arg...]
以下に示すオプションを git コマンドに指定できる。
- --exec-path
- gitの中核(core)プログラムがインストールされているパスを表示する。
- --help
- Gitのコマンド一覧を表示する。
$ git --help
- --html-path
- gitのHTML文書がインストールされているパスを表示する。
- --p, --paginate
- すべての出力をページャ(less)で出力する。
- --nopager
- gitの出力をページャで出力しない。
- --git-dir=path
- リポジトリのパスを指定する。
- --bare
- リポジトリを裸(bare)のリポジトリとして扱う。
- --version
- Git のバージョンを表示して、コマンドを終了する。
$ git --version git version 2.39.0
commandに指定できるコマンドを次に示す。
コマンド | 説明 |
---|---|
add | 新しいファイルや修正したファイルのコンテンツを索引に追加する。 |
branch | ブランチを作成又は削除する。 |
checkout | チェックアウトする。 |
clone | リポジトリを新しいディレクトリに複製する。 |
commit | 記録された変更をローカルリポジトリに反映する。 |
config | Gitやリポジトリの設定を変更する。 |
diff | 作業ツリーとコミットとの変更点を表示する。 |
fetch | 他のリポジトリを参照又はオブジェクトをダウンロードする。 |
help | Gitに関するヘルプ情報を表示する。 |
init | 空のGitリポジトリを作成する。または既存のリポジトリを再初期化する。 |
log | コミット・ログを表示する。 |
ls-files | インデックスと作業ツリーにあるファイルに関する情報を表示する。 |
merge | 2つ以上の開発履歴を一緒に結合する。 |
mv | ファイルやディレクトリの名前を変更したり場所を移動する。 |
pull | 他のリポジトリ又はローカルブランチをフェッチしてからマージする。 |
push | リモートリポジトリを更新する。 |
remote | トラックされたリポジトリのセットを管理する。 |
rm | 作業ツリーとインデックスからファイルを削除する。 |
status | 作業ツリーの状態を表示する。 |
add
git addは、作業ディレクトリの内容をステージングエリアに追加するコマンドである。このコマンドは、個々のファイルの更新内容を次回コミットの対象となることをGitに指示する。
git add path
pathにはファイルまたはディレクトリのパスを指定する。ディレクトリのパスを指定した場合は、ディレクトリ内のすべての変更をステージして次回のコミットの対象とする。
ブランチの一覧を表示する
ブランチの一覧を表示するには、引数を指定せずにgit branchコマンドを実行する。
git branch
ブランチを作成する
ブランチを作成するには、新たに作成するブランチの名前を指定してgit branchコマンドを実行する。
git branch foo
ブランチを削除する
ブランチを削除するには、git branchコマンドにdオプションを付けて実行する。
git branch -d foo
リモートのブランチを削除するには、ブランチを削除した後にプッシュする。
git branch -d foo
git push origin :foo
checkout
checkout はローカルリポジトリからファイルをチェックアウトするGitコマンドである。
git checkout [-b] branch-name
ブランチを切り替える。
git checkout foo
ブランチを作成して、そのブランチに切り替える。
$ git checkout -b foo
Switched to a new branch 'foo'
編集したファイルをコミット時の状態に戻すには、ローカルリポジトリからファイルをチェックアウトする。
- ファイルの状態を確認する。
$ git status
- ローカルリポジトリからファイルをチェックアウトする。
$ git checkout example.txt
clone
git cloneは、既存のGitリポジトリのコピーを作成するコマンドである。リポジトリのクローンを行うと、元のリポジトリを指すoriginという名前のリモート接続が自動的に作成される。これにより、簡単に中央リポジトリとの通信を行うことができる。中央リポジトリから開発者の作業コピー(ローカルリポジトリ)を新たに作成する場合は、git cloneコマンドを使用する。
git clone [--template=template-directory] [-l] [-s]
[--no-hardlinks] [-q] [-n] [--bare] [--mirror] [-o name]
[-b name] [-u upload-peak] [--reference repository] [--separate-git-dir git-dir] [--depth depth] [--[no-]single-branch] [--recursive|--recurse-submodules]
[--] repository [directory]
リモートリポジトリを複製する例を次に示す。
$ git clone c:/repo
Cloning into 'repo'...
done.
既存のGitリポジトリ(GitHub)のクローン(複製)を作成する。
$ git clone https://github.com/account/example.git
commit
git commitは、ステージされたファイルをローカルリポジトリにコミットするコマンドである。変更をコミットするには、原則としてgit addコマンドでファイルをステージしておく必要がある。
git commit [option] [path]
引数
引数を省略して commit コマンドを実行すると、ステージされた変更および追加がコミットされる。
$ git commit
ファイル名を指定することにより、特定のファイルをコミットすることもできる。
$ git commit example.txt
オプション
以下に示すオプションを commit コマンドに指定できる。
- -a
- 変更されたすべてのファイルをコミットする。
-a
オプションを指定することにより、変更されたすべてのファイルをコミットすることもできる。この場合、新規作成されたファイルはコミットされない。$ git commit -a
コミットされる変更とgit commitコマンドの関係を次に示す。
コマンド ステージされた変更・追加 ステージされていない変更 ステージされていない追加 git commit コミット - - git commit -a コミット コミット - いちいち変更したファイルを git add コマンドでステージするのは面倒なので、git commit -a コマンドの方が便利である。ただし、新規作成したファイルをステージするのを忘れないこと。
ファイルを変更したもののうち、コミットしたくないものがある場合は、面倒でもひとつづつ git add コマンドでステージしてから git commit コマンドでコミットする。
- -m message
- コミットメッセージを指定する。
-m
オプションを指定しなかった場合は、テキストエディタが起動されてコミットメッセージの入力を求められる。コミットする例を次に示す。
$ git commit -m "first commit"
コミットメッセージは git log コマンドで確認することができる。
diff
git diff [options] [commit] [--] [path...]
git diff [options] --cached [commit] [--] [path...]
git diff [options] commit commit [--] [path...
git diff [options] blob blob
git diff [options] [--no-index] [--] path path
fetch
git fetch [options] [repository [refspec..]]
git fetch [options] group
git fetch --multiple [options] [(repository|group)...]
git fetch --all [options]
help
helpコマンドは、Gitに関するヘルプ情報を表示するコマンドである。
git help [-a|--all] [-g|--guide] [-i|--info|-m|--main|--web] [COMMAND|GUIDE]
Git を紹介するチュートリアルを表示する。
$ git help tutorial
便利な最小限のGitコマンドを表示する。
$ git help everyday
Gitのリビジョンと範囲の指定を表示する。
$ git help revisions
Gitを使った推奨ワークフローの概要を表示する。
$ git help workflows
init
git initはGitリポジトリを新たに作成するコマンドである。このコマンドは、バージョン管理を行っていない既存のプロジェクトをGitリポジトリに変換する場合や、空の新規リポジトリを作成して初期化する場合に使用する。
git init [--bare] [directory]
directoryで指定したパスに空のGitリポジトリを作成する。directoryの指定を省略した場合は、カレントディレクトリをGitリポジトリに変換する。
git initコマンドには次に示すオプションを指定することができる。
- --bare
- 作業ディレクトリを持たない空のGitリポジトリを作成する。共有リポジトリは必ず
--bare
フラグを指定して作成しなければならない。作業ディレクトリを持たないリポジトリでは、ファイルの編集やコミットをすることはできない。
リポジトリを作成するには、次の手順で操作する。
- フォルダを作成する。
C:\repo
- Git Bashを起動する。
- フォルダに移動する。
$ cd /c/repo
- 初期化する。
$ git init Initialized empty Git repository in c:/repo/.git/
共有リポジトリを作成するには、次の手順で操作する。
- ディレクトリ(フォルダ)を作成する。
- 作成したディレクトリ(フォルダ)に移動する。
- 共有として初期化する。
$ git init --bare --shared=true
log
git logは、コミット済みの履歴を表示するコマンドである。
git log [-n limit] [--oneline] [--stat] [-p]
このコマンドには次の示すオプションを指定することができる。
- -n limit
- 表示するコミットをlimitに制限する。
- --oneline
- コミットの内容を1行に圧縮して表示する。
- --stat
- 改変されたファイル及びその中での追加行数と削除行数を増減数で表示する。
- -p
- 各々のコミットに対応するパッチを表示する。コミット履歴から取得できる詳細な情報である各々のコミットの完全な差分情報が表示される。
git log > /tmp/log.txt
ls-files
ls-files はファイルの一覧を表示するGitコマンドである。
コンフリクト(競合)を解消するには、次の手順で操作する。
- コンフリクトしているファイルの一覧を表示する。
$ git ls-files -u
- ファイルの状態を表示する。
$ git status
- ファイルを修正する。
- 修正したファイルをインデックスに追加する。
$ git add foo.php
merge
git merge [-n] [--stat] [--no-commit] [--squash] [--[no-]edit] [-s strategy] [-X strategy-option] [--[no-]rerere-autoupdate] [-m msg] [commit...]
git merge msg HEAD commit...
git merge --abort
フェッチとマージを行うには、次の手順で操作する。
- フェッチする。
$ git fetch
- ログを見る。
$ git log FETCH_HEAD
- ローカルリポジトリに取り込んだ変更内容を確認する。
$ git diff FETCH_HEAD
- マージする。
$ git merge FETCH_HEAD
- リモートリポジトリの更新動作を確認する(実際には更新しない)。
$ git push -n origin master:master
- リモートリポジトリを更新する。
$ git push origin master:master
mv
git mvは、ファイルやディレクトリの名前を変更したり、場所を移動するコマンドである。変更前のファイルを削除(git rm)して、変更後のファイルをステージング(git add)する。また、ワーキングコピーのファイルも実際に名前変更や移動が行われる。
git mv [-v] [-f] [-n] [-k] source destination
git mv [-v] [-f] [-n] [-k] source... destination-directory
ファイルfoo.php
をbar.php
に変更する例を示す。
git mv foo.php bar.php
pull
git pull [options] [repository [refspec..]]
リポジトリからプル
git pull repository refspec...
$ git pull origin master
push
リモートリポジトリにプッシュする。
git push repository refspec...
repositoryには以下のように指定する。
プロトコル | 指定方法 |
---|---|
rsync | rsync://host-name/git-repository-path |
HTTP | http://host-name[:port-no]/git-repository-path |
HTTPS | https://host-name[:port-no]/git-repository-path |
git | git://host-name[:port-no]/git-repository-path |
SSH | ssh://[user-name@]host-name[:port-no]/git-repository-path |
file | [file://]git-repository-path |
$ git push origin master
This repository moved. Please use the new location:
git push したときに、次のメッセージが表示されることがあります。
remote: This repository moved. Please use the new location:
remote: https://github.com/user/old.git
To https://github.com/user/new.git
このときは、次のコマンドを実行します。
git remote set-url origin https://github.com/user/new.git
remote
remote はリモートリポジトリの情報を表示するGitコマンドである。
存在するリモートリポジトリの一覧を表示する。
$ git remote
存在するリモートリポジトリの詳細を表示する。
$ git remote -v
リモートリポジトリの情報を表示する。
$ git remote show origin
gitコマンドでリモートリポジトリを指定する場合、URLで指定する。しかし、URLは文字数が多いうえ分かりにくい。そこで、短くてわかりやすい別名をリモートリポジトリに付けることができる。リモートリポジトリに付けた別名は.git/config
ファイルに保存される。
$ git remote add remote-name url
rm
rm はファイルを削除するGitコマンドである。
コミットしたファイルの削除するには、次の手順で操作する。
- ファイルを削除する。
$ git rm foo/bar
- 削除予定を確認する。
$ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # deleted: foo/bar #
- コミットする。
$ git commit -m "delete foo/bar"
status
git statusは、作業ディレクトリの状態を表示するコマンドである。このコマンドを実行すると、ステージされた変更内容、ステージされていない変更内容及びGitによる追跡の対象外となっているファイルが表示される。
$ git status
.gitignore
Gitで管理しないファイルを明示的に指定するには、.gitignore
という名前でファイルを作成し、その中にGitで管理しないファイル名を記述する。
.gitkeep
Gitでは、中身が空のディレクトリをバージョン管理下に入れることはできない。空のディレクトリをバージョン管理下に入れるためには、ディレクトリの中に何か適当なダミー・ファイルを作成しておく必要がある。このときのファイル名は何でも構わないが、慣習的に .gitkeep
というファイル名が用いられることが多い。
GitHub
GitHubでリポジトリを作成するには、GitHubにログインして、「New」ボタンをクリックする。
「Create a new repository」画面で、必要な項目を入力する。
項目 | 説明 |
---|---|
Repository name | リポジトリ名 |
Description | リポジトリの説明 |
Public | パブリックリポジトリ |
Private | プライベートリポジトリ |
Initialize this repository with a README | リポジトリを初期化する |
Add .gitignore | .gitignoreファイルを追加する |
Add a license | オープンソースライセンスを追加する |
Publicを選択すると、誰でもこのリポジトリを見ることができる。誰がコミットできるかは選択できる。
Privateを選択すると、誰がこのリポジトリを見たりコミットできるかを選択できる。
「Initialize this repository with a README」にチェックを入れると、すぐに自分のコンピュータにリポジトリをクローンすることができるようになる。既存のリポジトリをインポートする場合は、チェックを外す。
必要な項目を入力して、「Create repository」ボタンをクリックすると、リポジトリが作成される。
既存のリポジトリをインポートする
すでに自分のコンピュータにリポジトリを作成している場合は、Git Bashで該当フォルダに移動して、次の手順を行う。
git init
git add index.html
git commit -m "first commit"
git remote add origin https://github.com/user/repository.git
git push -u origin master