Git ことはじめ (for Ubuntu)

2022/01/16に公開

ここでは、Ubuntu に Git や GitHub CLI をインストールするための方法を簡単に説明し、コマンド補完機能などの便利な機能を利用するための設定を紹介します。 また、Git の初期設定についても軽く触れます。

0. Ubuntu を用意する

何とかして Ubuntu を用意してください。 実機があれば心強いですが、仮想マシンや Windows Subsystem for Linux (WSL) でも構いません。

以降の説明は Ubuntu を利用していることを前提としています。 また、シェルには Bash を利用していることを前提としています。

1. Git をインストールする

Git はフリーかつオープンソースな分散型バージョン管理ツールです。 小規模なプロジェクトから非常に大規模なプロジェクトまで、あらゆるものを高速かつ効率的に処理できるように設計されています。

Ubuntu に Git をインストールするために apt(8) や apt-get(8) を利用することができます。 しかし、Ubuntu の提供している Git は最新版から遅れているかもしれません。

Ubuntu に最新版の Git をインストールするには、ソースコードからビルドするか Git 公式の Personal Package Archive (PPA) からパッケージを取得する必要があります。 ここでは PPA からインストールする方法を紹介します。

次のように実行します。

Git をインストールする
$ sudo add-apt-repository ppa:git-core/ppa
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install git

Git のインストールが完了したか確認するために、Git のバージョンを表示してみましょう。

Git のバージョンを表示する
$ git --version
git version 2.20.1

2. GitHub CLI のインストール

GitHub CLI は GitHub の様々な機能 (例えば、レポジトリの作成や Gist の操作など) をコマンドラインから行うためのツールです。

GitHub CLI をインストールするために apt(8) や apt-get(8) を利用することができますが、これでは最新版からとても遅れている版がインストールされてしまいます。 snap(1) を利用してインストールすることもできますが、GitHub はこれを推奨していません (do not use )。

GitHub が紹介している方法は次の通りです。

GitHub CLI をインストールする
$ curl -fsSL \
> https://cli.github.com/packages/githubcli-archive-keyring.gpg \
> | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) \
> signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] \
> https://cli.github.com/packages stable main" \
> | sudo tee /etc/apt/sources.list.d/github-cli.list >/dev/null
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install gh

GitHub CLI のインストールが完了したか確認するために、GitHub CLI のバージョンを表示してみましょう。

GitHub CLI のバージョンを表示する
$ gh --version
gh version 2.4.0 (2021-12-21)
https://github.com/cli/cli/releases/tag/v2.4.0

3. GitHub CLI のコマンド補完機能の設定

GitHub CLI は数多くのサブコマンドを持っています。 それら全てを覚えていることは困難ですから、コマンド補完機能があると便利です。

次に示す内容を ~/.bash_aliases に追加します (なければ作成します)。 gh コマンドが存在しない場合にも対応できるように if 文で gh コマンドの存在を確認してからコマンド補完機能を設定しています。

~/.bash_aliases (追加)
if which gh >/dev/null
then
	eval "$(gh completion -s bash)"
fi

編集が完了したら設定を適用します。 最も簡単な方法はログアウトして再度ログインすることです。 あるいは、exec $SHELL を実行することでも適用できます。

~/.bash_aliases~/.bashrc から呼び出されるファイルです。 ~/.bashrc はシェルの起動時に呼び出され、その内容が実行されます (ログインシェルの場合は ~/.profile~/.bash_profile から呼び出されます)。 これらのファイルに記述する設定に誤りがあると、最悪の場合、ログイン不能の事態に陥る恐れがあります。 これらのファイルの編集後は、別の端末からログインを試みて設定に誤りがないことを確認してください。

補完機能は [Tab] キーを複数回押下することで利用できます。

補完機能を使ってみる ([Tab] は [Tab] キー押下)
$ gh a[Tab][Tab]
alias       (Create command shortcuts)
api         (Make an authenticated GitHub API request)
auth        (Login, logout, and refresh your authentication)
$ gh alias [Tab][Tab]
delete  (Delete an alias)
list    (List your aliases)
set     (Create a shortcut for a gh command)

4. Git のコマンドやオプションの補完機能の設定

Git にもやはり数多くのサブコマンドやオプションがあります。 それらを全て覚えていることは困難ですから、コマンドやオプションの補完機能があると便利です。

Git のコマンドやオプションの補完機能を提供するスクリプトが Git から提供されています。 まずはそれを取得します。

スクリプトを取得する
$ curl -o $HOME/.git-completion.bash \
> https://raw.githubusercontent.com/git/git\
> /master/contrib/completion/git-completion.bash

そして、そのファイルをシェルの起動時に読み込むように設定します。 次に示す内容を ~/.bash_aliases に追加します。

~/.bash_aliases (追加)
if [ -e $HOME/.git-completion.bash ]
then
	source $HOME/.git-completion.bash
fi

設定を適用すると補完機能が利用可能になります。

補完機能を使ってみる ([Tab] は [Tab] キー押下)
$ git a[Tab][Tab]
add       am        apply     archive   
$ git branch [Tab][Tab]
FETCH_HEAD       ORIG_HEAD        main             origin/develop 
HEAD             develop          origin/HEAD      origin/main 

5. Git の情報をプロンプトに表示する

Git を利用しているとレポジトリの現在の情報を確認したくなることがあります。 シェルのプロンプトにレポジトリの情報が表示されていると便利なことがあります。

レポジトリの現在の情報をプロンプトに表示するためのスクリプトが Git から提供されています。 まずはそれを取得します。

スクリプトを取得する
$ curl -o $HOME/.git-prompt.sh \
> https://raw.githubusercontent.com/git/git\
> /master/contrib/completion/git-prompt.sh

そして、そのファイルをシェルの起動時に読み込むように設定します。 同時に表示する項目などの設定も行います。 次に示す内容を ~/.bash_aliases に追加します。

~/.bash_aliases (追加)
if [ -e $HOME/.git-prompt.sh ]
then
	# 必要ない項目はコメントアウトしてくださし
	# あるいは  HOGE=  のように右辺を空にしてください
	GIT_PS1_SHOWDIRTYSTATE=true
	GIT_PS1_SHOWUNTRACKEDFILES=true
	GIT_PS1_SHOWSTASHSTATE=true
	GIT_PS1_SHOWUPSTREAM=auto

	source $HOME/.git-prompt.sh
	PS1='\u@\h:\w$(__git_ps1) \$'	# この設定はとてもつまらない
fi

それぞれの変数の設定について軽く説明します。 詳細な説明はスクリプトにコメントとして記述されています。

GIT_PS1_SHOWDIRTYSTATE

この変数に値をセットすると、ステージされていない変更があるときに * を、ステージされていてコミットされていない変更があるときに + を表示します。

user@host:~/foo (main) $ vi README
user@host:~/foo (main*) $ git add README	# ステージされていない変更
user@host:~/foo (main+) $ git commit		# ステージ済みでコミットされていない変更
user@host:~/foo (main) $ 

GIT_PS1_SHOWUNTRACKEDFILES

この変数に値をセットすると、トラックされていない (新規の) ファイルがあるときに % を表示します。

user@host:~/foo (main) $ touch NEWFILE
user@host:~/foo (main%) $ git add NEWFILW	# トラックされていないファイルがある
user@host:~/foo (main+) $ 			# トラックされた (ステージ済み)

GIT_PS1_SHOWSTASHSTATE

この変数に値をセットすると、スタッシュ (退避) された変更があるときに $ を表示します。

user@host:~/foo (main) $ vi README
user@host:~/foo (main*) $ git stash push README		# ステージされていない変更
user@host:~/foo (main$) $ 				# スタッシュされた

GIT_PS1_SHOWUPSTREAM

この変数に auto の値をセットすると、アップストリームとの進退を表示します。

user@host:~/foo (main=) $ git fetch origin
user@host:~/foo (main<) $ git merge origin/main		# 上流より遅れている
user@host:~/foo (main=) $ vi SOMEFILE			# 上流に追いついた
user@host:~/foo (main *=) $ git add SOMEFILE
user@host:~/foo (main +=) $ git commit
user@host:~/foo (main>) $ git fetch origin		# 上流より進んでいる
user@host:~/foo (main<>) $				# 上流とは異なる変更点がある

シェル変数 PS1 にはプロンプトに表示する内容を記述します。 詳細は Bash のマニュアルを参照してください。

6. Git の設定

Git を使い始めるにあたっていくつか初期設定をする必要があります。

6.1. 名前とメールアドレス

名前とメールアドレスを設定する必要があります。 ここで設定する情報はコミットの内容と共に公開されます。

メールアドレスを公開したくない場合は、https://github.com/settings/emails にある Primary email address の項目に表示されている 01234567+UserName@users.noreply.github.com 形式のメールアドレス (下図の赤線部) を利用すると良いです。

次のように実行します。

$ git config --global user.name 'UserName'
$ git config --global user.email 'mail@example.com'

6.2. デフォルトのブランチ名

これまで、デフォルトのブランチ名には master が慣習的に利用されていました。 しかし、master という語は slave を想起させるためセンシティブであるという見方からこれを変更しようという動きがありました。 master の代わりに提案された語が main です。 現在、GitHub のデフォルトのブランチ名は、特に指定しない場合 main が利用されます。

Git のデフォルトのブランチ名を main に設定するには、次のように実行します。

$ git config --global init.defaultbranch 'main'

6.3. デフォルトのエディタ

Git では、コミットメッセージの記述など様々な場面でエディタを利用します。 自分好みのエディタがある場合は設定しておくと幸せになれるでしょう。

Git で利用するエディタを vi に設定するには、次のように実行します。

$ git config --global core.editor 'vi'

6.4. 設定の確認

Git の各種設定は ~/.gitconfig に記述されています。 レポジトリ毎の設定は .git/config に記述されています。

コマンドラインから現在の設定を確認するには、次のように実行します。

$ git config --list

おわりに

おわりです。

おまけ: xterm 向けのカラフルな PS1 シェル変数

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(__git_ps1)\[\033[00m\] \$ '
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

参考

Discussion