Gitは分散型のバージョン管理システムである。分散型バージョン管理システムは、リポジトリが複数あるバージョン管理システムである。Gitはリモートサーバにある中心リポジトリのコピーをローカル環境にコピーして、そのローカルリポジトリを使って作業を行う。
UbuntuやLinux Mintなど、DebianベースのLinuxディストリビューションの場合、apt コマンドを使ってgitをインストールする。
$ sudo apt install git
インストーラを実行すると、「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で使うデフォルトのテキストエディタを選択する画面が表示される。次のうちいずれかを選択する。
「Select other editor」を選択すれば、任意のテキストエディタを使える。とくに使いたいものがない場合は、「Nano」を選ぶ。
Gitからチェックアウトするときとコミットするときに改行コードの変換方法を選ぶ。
HTMLやCSSはUnixスタイルで作るのが一般的である。Windowsで使っているテキストエディタがWindowsスタイルの改行コードしかサポートしていない場合は、チェックアウトするときにWindowsスタイルに変換して、コミットするときにUnixスタイルに変換するのがよい。
しばらく待つと、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 コマンドに指定できる。
$ git --help
$ 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 | 作業ツリーの状態を表示する。 |
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 はローカルリポジトリからファイルをチェックアウトする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
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
git commitは、ステージされたファイルをローカルリポジトリにコミットするコマンドである。変更をコミットするには、原則としてgit addコマンドでファイルをステージしておく必要がある。
git commit [option] [path]
引数を省略して commit コマンドを実行すると、ステージされた変更および追加がコミットされる。
$ git commit
ファイル名を指定することにより、特定のファイルをコミットすることもできる。
$ git commit example.txt
以下に示すオプションを commit コマンドに指定できる。
-a
オプションを指定することにより、変更されたすべてのファイルをコミットすることもできる。この場合、新規作成されたファイルはコミットされない。
$ git commit -a
コミットされる変更とgit commitコマンドの関係を次に示す。
コマンド | ステージされた変更・追加 | ステージされていない変更 | ステージされていない追加 |
---|---|---|---|
git commit | コミット | - | - |
git commit -a | コミット | コミット | - |
いちいち変更したファイルを git add コマンドでステージするのは面倒なので、git commit -a コマンドの方が便利である。ただし、新規作成したファイルをステージするのを忘れないこと。
ファイルを変更したもののうち、コミットしたくないものがある場合は、面倒でもひとつづつ git add コマンドでステージしてから git commit コマンドでコミットする。
-m
オプションを指定しなかった場合は、テキストエディタが起動されてコミットメッセージの入力を求められる。
コミットする例を次に示す。
$ git commit -m "first commit"
コミットメッセージは git log コマンドで確認することができる。
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
git fetch [options] [repository [refspec..]]
git fetch [options] group
git fetch --multiple [options] [(repository|group)...]
git fetch --all [options]
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
git initはGitリポジトリを新たに作成するコマンドである。このコマンドは、バージョン管理を行っていない既存のプロジェクトをGitリポジトリに変換する場合や、空の新規リポジトリを作成して初期化する場合に使用する。
git init [--bare] [directory]
directoryで指定したパスに空のGitリポジトリを作成する。directoryの指定を省略した場合は、カレントディレクトリをGitリポジトリに変換する。
git initコマンドには次に示すオプションを指定することができる。
--bare
フラグを指定して作成しなければならない。作業ディレクトリを持たないリポジトリでは、ファイルの編集やコミットをすることはできない。リポジトリを作成するには、次の手順で操作する。
C:\repo
$ cd /c/repo
$ git init
Initialized empty Git repository in c:/repo/.git/
共有リポジトリを作成するには、次の手順で操作する。
$ git init --bare --shared=true
git logは、コミット済みの履歴を表示するコマンドである。
git log [-n limit] [--oneline] [--stat] [-p]
このコマンドには次の示すオプションを指定することができる。
git log > /tmp/log.txt
ls-files はファイルの一覧を表示するGitコマンドである。
コンフリクト(競合)を解消するには、次の手順で操作する。
$ git ls-files -u
$ git status
$ git add foo.php
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
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
git pull [options] [repository [refspec..]]
リポジトリからプル
git pull repository refspec...
$ git pull origin master
リモートリポジトリにプッシュする。
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
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 はリモートリポジトリの情報を表示するGitコマンドである。
存在するリモートリポジトリの一覧を表示する。
$ git remote
存在するリモートリポジトリの詳細を表示する。
$ git remote -v
リモートリポジトリの情報を表示する。
$ git remote show origin
gitコマンドでリモートリポジトリを指定する場合、URLで指定する。しかし、URLは文字数が多いうえ分かりにくい。そこで、短くてわかりやすい別名をリモートリポジトリに付けることができる。リモートリポジトリに付けた別名は.git/config
ファイルに保存される。
$ git remote add remote-name url
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"
git statusは、作業ディレクトリの状態を表示するコマンドである。このコマンドを実行すると、ステージされた変更内容、ステージされていない変更内容及びGitによる追跡の対象外となっているファイルが表示される。
$ git status
Gitで管理しないファイルを明示的に指定するには、.gitignore
という名前でファイルを作成し、その中にGitで管理しないファイル名を記述する。
.gitignore の例を以下に示す。
/.vscode/setting.json
.gitignore ファイルの位置を基準としたパスを記述するため、 /home/tsuka/src/.gitignore であれば、 /home/tsuka/src/.vscode/setting.json がGitの管理対象外となる。
Gitでは、中身が空のディレクトリをバージョン管理下に入れることはできない。空のディレクトリをバージョン管理下に入れるためには、ディレクトリの中に何か適当なダミー・ファイルを作成しておく必要がある。このときのファイル名は何でも構わないが、慣習的に .gitkeep
というファイル名が用いられることが多い。
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