Git
GitHub
Ubuntu
BashOnUbuntuOnWindows
WSL

Microsoftストアの Ubuntu 18.04 に Git環境を構築する(旧題:Bash on Ubuntu on Windows にGit環境を構築する)

「Windows 10 April 2018 Update」の Ubuntu 18.04 環境に対応しました。

Ubuntu環境設定

OSのインストールと更新

これは沢山記事が出てますので紹介だけ。

参考資料)
Windows 10でLinuxプログラムを利用可能にするWSL(Windows Subsystem for Linux)をインストールする(バージョン1803対応版)

Gitも最新にしておきます。

sudo apt install git

端末アプリをインストール

標準コンソールの色使いが激しく見難いので、wslttyを入れます。
wsltty

この記事と現在の挙動が違っているようですが、
起動はスタートメニューの以下から行えば良いようです。
image.png

Git環境設定

ユーザ設定

$ git config --global user.name [名前]
$ git config --global user.email [メールアドレス]

Gitコマンド補完

デフォルトで設定済みです。
Gitコマンド、ブランチ名、git addではModified,Untrackedファイル名にタブ補完が効きます。

Gitステータスのコマンドライン常時表示

~/.bashrcに以下を書きます。

source /etc/bash_completion.d/git-prompt
export PS1='\[\033[32m\]\u@\h \[\033[33m\]\w\[\033[36m\]$(__git_ps1)\[\033[0m\]\n$ '
GIT_PS1_SHOWDIRTYSTATE=true
GIT_PS1_SHOWUNTRACKEDFILES=true
GIT_PS1_SHOWSTASHSTATE=true
GIT_PS1_SHOWUPSTREAM=auto

コマンドラインに、ブランチ名と編集状態やコミット状態が表示されます。

表示される記号の意味。

* :更新(Modified)ファイルが有る
% :新規(Untracked)ファイルが有る
+ :ステージングされた(git add)ファイルが有る
$ :git stashされたファイルが有る
# :コミットが無い(git init直後)

> :ローカルにコミットが有る(ローカルがリモートより進んでいる)
< :リモートにコミットが有る(ローカルがリモートより遅れている)
<>:ローカルとリモート両方にコミットが有る(マージが必要)

参考資料)
「Git補完をしらない」「git statusを1日100回は使う」そんなあなたに朗報【git-completionとgit-prompt】

日本語文字化け対策

日本語ファイル名がエスケープされて読めない文字列になってしまいますので、以下で回避します。

$ git config --global core.quotepath false

参考資料)
gitで日本語ファイル名を表示する方法

git log を見やすくする

~/.gitconfig に以下を追記します。

    glog = log --pretty='format:%C(yellow)%h %C(green)%cd %C(reset)%s %C(red)%d %C(cyan)[%an]' --date=iso --all --graph
    plog = log --pretty='format:%C(yellow)%h %C(green)%cd %C(reset)%s %C(red)%d %C(cyan)[%an]' --date=iso

参考資料)
git logを見やすくしたい!

Gitのリポジトリを /mnt/c 以下に置く場合

Windowsアプリでも作業出来るようにしたい場合、/mnt/c/Users/username 以下にgit用の作業フォルダを作成します。
わざわざ cd /mnt/c/Users/username とするのも面倒なので、シンボリックリンクを張っておきます。

$ cd ~
$ ln -s "/mnt/c/Users/username" win
$ cd win; mkdir gitwork; cd gitwork
$ git init
$ git ...

別の方法として、homeディレクトリを /mnt/c/Users/username 以下に移してしまう手も有ります。
/etc/passwd のパスをいじります。

sudo vi /etc/passwd

ただ、GitHubアクセス等で秘密鍵を作るのであれば、/home/username のままの方がいいです。
(~/.sshに作成する秘密鍵のパーミッションが600じゃないとエラーになりますので)

パーミッションの変更を無視する設定

Windowsフォルダに作業フォルダを作成する場合、パーミッションに気を付ける必要が有ります。

Linux環境で作成してコミットしていたファイルを、Windows環境から再コミットするとパーミッションが書き換わって差分が出てしまうのです。
それを避ける為に、以下の設定をしておきます。(コミット時にパーミッションを無視します)

git config --global core.filemode false

参考資料)
(よく忘れるので)gitのパーミッション操作の復習

WinMergeをGitの差分・マージツールにする

WSLからWindowsアプリも起動出来るので、WinMergeも使えるようにしておきましょう。

参考資料)
WSL(Ubuntu 18.04)環境のgitでWinMergeを使う方法

GitHub 対応

pushする為のSSH keyを作成する

公開鍵・秘密鍵というやつです。

鍵を作成します。
既に ~/.ssh/id_rsa が有る場合は、-fオプションで別のファイル名を指定して下さい。
$ ssh-keygen -t rsa -C "メールアドレス"

configファイルを作成します。
$ vi ~/.ssh/config

以下を書き込みます。

Host github.com
  HostName github.com
  IdentityFile ~/.ssh/id_rsa
  User git

configファイルのパーミッションを変更します。
$ chmod 600 ~/.ssh/confg

秘密鍵のパーミッションを確認する

秘密鍵のid_rsaは、パーミッションが600じゃないとエラーになります。

$ ls -la ~/.ssh

id_rsaのパーミッションが、
-rw-------
となっていればOKです。

なっていなければ、以下を実行します。

$ chmod 600 ~/.ssh/id_rsa

GitHubに公開鍵を設定する

公開鍵をコピーします。

以下でクリップボードに公開鍵をコピーします。

$ cat ~/.ssh/id_rsa.pub | clip.exe

GitHubに登録します

GitHubサイトの右上、アカウントのSettingsから "SSH and GPG keys" を選択します。

右上の"New SSH key"を押し、
- Titleに自分が分かる名前
- keyにクリップボードから公開鍵をペースト
- "Add SSH key"を押す
で完了です。

接続確認

クライアントから以下コマンドを入力し、

$ ssh -T github.com

以下が表示されればOKです。

Hi [github登録ID] ! You've successfully authenticated, but GitHub does not provide shell access.

GitHubからクローンする場合

"Clone or download"ボタンからcloneする時に、"Use ssh"を選択しておき、
urlが git@ から始まるアドレスになっていることを確認します。

httpsだと、普通のパスワード認証になってしまい、pushする際に毎回IDとパスワードが聞かれてしまいます。