Git入門:バージョン管理のきほん
Git のインストールと初期設定
このレッスンで分かること
- Mac と Windows それぞれの Git の入れ方と、入ったかどうかの確かめ方
user.nameとuser.emailを設定しないと何が起きるのか- 設定がどこのファイルに書かれ、どの順番で効くのか
Git はすでに入っているかもしれない
まずターミナルを開いて、次のコマンドを実行します。Mac なら「ターミナル」アプリ、Windows なら後述する Git Bash かコマンドプロンプトです。
ターミナル
git --versionバージョンが表示されれば、すでに Git は使える状態です。
プレーンテキスト
git version 2.49.0表示されるバージョンは環境によって違います。2.30 以降であれば、このコースの内容はすべてそのまま動きます。それより古い場合は、後述の手順で新しくしておくと安心です。
コマンドが見つからないという趣旨のメッセージが出た場合は、まだ入っていません。次の節に進みます。
プレーンテキスト
zsh: command not found: gitMac では Git を入れていなくても
git --versionが反応することがあります。これは Xcode Command Line Tools のインストールを促す画面です。表示されたダイアログでインストールを進めれば、Apple 版の Git が入ります。それでも構いませんが、更新が遅いので Homebrew 版を勧めます。
Mac に入れる
Mac では Homebrew を使うのが最も手間がかかりません。Homebrew は Mac 用のパッケージ管理ツールで、コマンド 1 行でソフトウェアを入れたり更新したりできます。
Homebrew が入っているかは次で確かめます。
ターミナル
brew --version入っていなければ、Homebrew の公式サイトに載っているインストールコマンドを実行します。数分かかります。
Homebrew が使える状態になったら、Git を入れます。
ターミナル
brew install git終わったらターミナルを一度閉じて開き直し、もう一度確認します。閉じて開き直すのは、コマンドの検索先を読み直させるためです。
ターミナル
git --version
which gitwhich git の結果が /opt/homebrew/bin/git や /usr/local/bin/git になっていれば Homebrew 版が使われています。/usr/bin/git のままなら Apple 版が優先されています。動作に大きな支障はありませんが、気になる場合はターミナルの設定ファイルで Homebrew のパスを先に来るようにします。
更新したくなったら次の 2 行です。
ターミナル
brew update
brew upgrade gitWindows に入れる
Windows では Git for Windows を使います。公式サイトからインストーラーをダウンロードして実行します。
インストーラーは設問が多く、初めてだと迷います。判断が必要なのは実質 2 か所だけで、それ以外は既定のまま進めて問題ありません。
| 設問 | 選ぶもの | 理由 |
|---|---|---|
| 既定のエディタ | 使い慣れたもの。無ければ既定のまま | コミットメッセージを書くときに開く |
| 既定のブランチ名 | main を指定する選択肢を選ぶ | 後の設定と揃えるため |
| PATH の設定 | 推奨(真ん中)のまま | コマンドプロンプトからも git が使える |
| 改行コードの扱い | 推奨(1 番上)のまま | Windows と Mac の改行差を吸収する |
インストールが終わると、スタートメニューに Git Bash が入ります。これは Windows 上で Mac や Linux と同じ書き方のコマンドが使えるターミナルです。このコースのコマンドはすべて Git Bash でそのまま動くので、Windows の人は Git Bash を使ってください。
Git Bash を開いて確認します。
ターミナル
git --versionプレーンテキスト
git version 2.49.0.windows.1Windows で PowerShell やコマンドプロンプトを使っても Git 自体は動きます。ただし
lsやtouchのような周辺コマンドの書き方が違うため、学習中は Git Bash に統一したほうが余計なつまずきが減ります。
名前とメールアドレスを設定する
Git は 1 つ 1 つのコミットに「誰が記録したか」を残します。この情報を設定していないと、コミットしようとした時点で止まります。
ターミナル
git config --global user.name "Taro Yamada"
git config --global user.email "taro@example.com"--global はこのパソコンの既定値という意味です。これを設定しておけば、以後どのプロジェクトでも同じ名前が使われます。
設定しないまま git commit を実行すると、次のようなメッセージが出て失敗します。
プレーンテキスト
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
fatal: unable to auto-detect email addressエラーメッセージの中に、そのまま実行すればいい 2 行が書かれています。Git はこういう親切な出し方をすることが多いので、赤い文字が出ても閉じずに読む癖を付けます。
名前は日本語でも設定できますが、英字を勧めます。表示する環境によっては文字化けするためです。メールアドレスは実在するものを使います。GitHub に公開したときに、そのアドレスで本人と結び付けられるからです。
ここで気を付けたいのは、user.name は GitHub のアカウント名とは無関係だという点です。GitHub にログインするための ID を入れる欄ではなく、コミットに刻まれる表示名です。本名でも、普段使っているハンドルネームでも構いません。あとから変更しても、すでに作ったコミットには影響しません。
メールアドレスを公開したくない場合は、GitHub が用意している転送用アドレスを使えます。GitHub の設定画面のメールアドレス欄に 12345678+username@users.noreply.github.com という形のアドレスが表示されるので、それを user.email に設定します。こうしておけば、コミットは GitHub 上で自分のアカウントと結び付きつつ、実際のアドレスは表に出ません。
会社のアドレスを個人のリポジトリに書きたくない場合は、そのリポジトリの中だけ
--globalを外して上書きします。リポジトリ固有の設定は常に全体設定より優先されます。
既定のブランチ名とその他の設定
ブランチとは、履歴を枝分かれさせるための名前付きの作業線です。詳しくは第 3 章で扱いますが、リポジトリを作った時点で 1 本目のブランチが自動的に作られます。その名前を決めるのが次の設定です。
ターミナル
git config --global init.defaultBranch mainGit は長く master を既定にしていましたが、GitHub をはじめ主要なサービスが main に移りました。設定しておかないと、手元は master、GitHub 側は main という食い違いが起き、第 4 章で余計な手間が発生します。
あわせて設定しておくと後が楽なものが 2 つあります。
ターミナル
git config --global core.editor "code --wait"
git config --global pull.rebase false1 つめはコミットメッセージを書くときに開くエディタの指定です。この例は Visual Studio Code を使う場合で、code コマンドが使える状態になっている必要があります。設定しないと環境によっては vim が開き、抜け方が分からず固まります。
2 つめは第 4 章で扱う git pull の動き方の指定です。今は意味が分からなくて構いません。設定しておかないと pull のたびに警告が出ます。
改行コードの扱いも環境差が出る部分です。Windows と Mac でファイルの行末の表し方が違うため、放っておくと「1 文字も変えていないのに全行が変更扱いになる」という現象が起きます。
ターミナル
# Mac の場合
git config --global core.autocrlf input
# Windows の場合
git config --global core.autocrlf trueWindows は Git for Windows のインストーラーで推奨を選んでいれば設定済みです。Mac と Windows が混ざったチームでこの設定が揃っていないと、変更していない行まで差分に出てレビューが読めなくなります。一人で学習している間は影響が出ませんが、先に入れておいて損はありません。
日本語のファイル名を扱う予定があるなら、もう 1 つ設定しておきます。
ターミナル
git config --global core.quotepath falseこれを入れないと、日本語のファイル名が \346\227\245... のような数字の羅列で表示されます。ファイル自体は正しく扱われるので害はありませんが、画面が読めなくなります。
設定を確認する場所
設定した内容は次で一覧できます。
ターミナル
git config --global --listプレーンテキスト
user.name=Taro Yamada
user.email=taro@example.com
init.defaultBranch=main
core.editor=code --wait1 項目だけ知りたいときは名前を指定します。
ターミナル
git config --global user.emailこれらの設定は、実際にはホームディレクトリの .gitconfig というテキストファイルに書かれています。Mac なら ~/.gitconfig、Windows の Git Bash でも ~/.gitconfig で開けます。
ターミナル
cat ~/.gitconfigプレーンテキスト
[user]
name = Taro Yamada
email = taro@example.com
[init]
defaultBranch = main設定には 3 つの階層があり、下にあるものほど強く効きます。
| 階層 | 指定方法 | 保存先 | 効く範囲 |
|---|---|---|---|
| システム | --system | Git のインストール先 | そのパソコンの全ユーザー |
| グローバル | --global | ~/.gitconfig | そのユーザーの全リポジトリ |
| ローカル | 指定なし | リポジトリ内の .git/config | そのリポジトリだけ |
たとえば全体では個人アドレスを使いつつ、仕事のリポジトリの中だけで会社アドレスに切り替える、という使い分けができます。
ターミナル
git config user.email "yamada@company.co.jp"このコマンドはリポジトリの中で実行します。リポジトリの外で --global を付けずに実行すると、リポジトリではないという趣旨のエラーになります。
設定でつまずいたときの戻し方
よくある失敗は、user.name を間違えた状態で何度もコミットしてしまうことです。設定を直しても、すでに積んだコミットの作者名は自動では変わりません。
まず設定を上書きします。同じコマンドをもう一度実行するだけです。
ターミナル
git config --global user.name "Taro Yamada"すでに作ったコミットの作者を直す方法は第 2 章の git commit --amend で扱います。直前の 1 件なら簡単に直せます。多数ある場合は無理に直さず、そのまま進めて構いません。学習用のリポジトリで作者名が古いことによる実害はほとんどありません。
もう 1 つよくあるのが、エディタの設定を入れたのにコミット時に何も開かない、あるいは開いたまま Git が先に進んでしまうという症状です。原因は --wait の書き忘れです。--wait はエディタを閉じるまで待てという指示で、これが無いと Git はエディタを開いた直後に空のメッセージで処理を続けようとします。
ターミナル
git config --global core.editor "code --wait"そもそも code コマンドが使えない場合もあります。Visual Studio Code をコマンドから起動できるようにする設定が別途必要で、Mac ではコマンドパレットから Shell Command: Install 'code' command in PATH を実行します。Windows はインストール時に PATH 追加を選んでいれば使えます。
設定そのものを消したいときは次を使います。
ターミナル
git config --global --unset core.editor--list に出てくる項目が身に覚えのないもので埋まっている場合は、~/.gitconfig を直接開いて読むのが早いです。中身はただのテキストなので、不要な行を消せば設定も消えます。
次のレッスンでは、いよいよ実際のフォルダを Git の管理下に置きます。git init を実行して何が作られるのか、そこから見ていきます。
- Mac は
brew install git、Windows は Git for Windows のインストーラーと Git Bash user.nameとuser.emailは未設定だとコミットが失敗する。必ず最初に入れるinit.defaultBranch mainを設定して、GitHub 側の既定と名前を揃えておく- 設定はシステム・グローバル・ローカルの 3 階層で、リポジトリ固有の設定が最も強い