なか日記

一度きりの人生、楽しく生きよう。

Cygwin版Gitの環境構築

前々から、CygwinでGitの環境作りたいと思ってたのですが、丁度id:kaorun55さんの一言もあり環境を作ってみました。的なメモです。

Windows で git は難しいのぅ。
#だれかCygwinでの環境構築をまとめてくれないかなぁ。。。

http://d.hatena.ne.jp/kaorun55/20100419/1271687871

Cygwinのインストール

まずは、 http://www.cygwin.com/ から setup.exe をダウンロードします。
setup.exe を起動したところから、ポイントだけ説明することにします。

インストール先

今回はデフォルトの C:\Cygwin にします。
「All Users」にするか、「Just Me」にするかはお好みでどうぞ。
f:id:nakaji999:20100420100233j:image

パッケージの選択

Search欄に「git」を入力してGitに必要なパッケージを表示し、インストールするものにチェックを付けます。
f:id:nakaji999:20100420100235j:image

環境設定

Gitの設定

Gitインストール後の各種設定 - タイトルは未定と同じようにユーザ名、メールアドレス、ターミナルの色付けを設定します。

$ git config --global user.name "nakaji"
$ git config --global user.email "nakajixxx@example.com"
$ git config --global color.ui "auto"
自動補完の設定

ここでは、Gitだけでなく他のコマンドの補完も有効にする設定を行っています。Gitのみ補完を有効にすることもできるみたいです。詳細は「bear.mini : Cygwin の git で自動補完(git-completion)を使う方法(+ おまけ)」を参照してください。

.bashrcにある下記コメントを外します。

# case $- in
#   *i*) [[ -f /etc/bash_completion ]] && . /etc/bash_completion ;;
# esac

コメントを外したら、コンソールを起動しなおすか、下記コマンドを入力して.bashrcの内容を再取込させます。

source ~/.bashrc
日本語表示

msysgitでは以下のエントリにあるように設定が必要でしたが、Cygwin版では特に必要ないようです。
Gitでの日本語表示対応(msysgit編) - タイトルは未定

エディタの設定

Cygwinに入っているviを使おうとしたのですが、「bash: /usr/bin/vi: Permission denied」と怒られるし、chmodしても「/usr/bin/vi: /usr/bin/vi: cannot execute binary file」なんていわれるので諦めてました。(見限ったともいう)
そんなわけで、id:terurouさんに教えてもらった「Vim UTF-8 日本語版 - fudist」を使えるようにします。

UTF-8日本語版vimのインストール

好きな場所にインストールします。私は「D:\Tools\vim」にインストールしました。

パスとエイリアスの設定

.bashrcに下記記述を追加します。パスは環境に合わせて変更してください。

PATH=/cygdrive/d/tools/vim/:${PATH}
alias vi='vim'

これで、コンソールでviを叩くとvimが起動するようになります。もちろん、vimでもいいし、gvimと叩けばGUI版が起動します。

GIT_EDITORの指定

Gitで使用するエディタを.bashrcで指定します。
gvimが使いたい場合は、以下のように設定します。

export GIT_EDITOR="'gvim' -c 'set fenc=utf-8'"

ファイルエンコーディングUTF-8になるように指定していますが、vimの設定ファイル(_vimrc等)でファイルエンコーディングを指定している場合は不要だったりします。
UTF-8になっているかどうかは、vimを起動した後に「:set」と叩くと設定の一覧が出てくるので、「fileencoding=utf-8」となっているかどうかで判断できます。

動作確認

git単体での動作は問題ないと思うので、git svnが動くか以下のように確認を行い問題ないことを確認。

#Subversionリポジトリの作成
$ mkdir ~/svn_repos

$ cd ~/svn_repos

$ svnadmin.exe create .

#作業用ディレクトリの作成
$ mkdir ~/work

$ mkdir ~/work/svnwork

$ mkdir ~/work/gitwork

#Subversionへコミット
$ cd ~/work/svnwork

$ svn checkout  file:///home/nakaji/svn_repos/
Checked out revision 0.

$ cd svn_repos

$ echo aaaa > file1.txt

$ svn add file1.txt
A         file1.txt

$ svn commit -m"initial"
Adding         file1.txt
Transmitting file data .
Committed revision 1.

#Gitへsvn cloneする
$ cd ~/work/gitwork

$ git svn clone file:///home/nakaji/svn_repos/
Initialized empty Git repository in /home/nakaji/work/gitwork/svn_repos/.git/
        A       file1.txt
r1 = cfc8e1cbae08d7fbd7670e188baebb1d28f5cf09 (refs/remotes/git-svn)
Checked out HEAD:
  file:///home/nakaji/svn_repos r1

#Gitからsvn dcommitする
$ cd svn_repos/

$ ls
file1.txt

$ echo eeee>>file1.txt

$ git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   file1.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

$ git commit -a
[master 436f30a] テストです
 1 files changed, 1 insertions(+), 0 deletions(-)

$ git log
commit 436f30a1fab5f2b4b48d06459baccba99041067b
Author: nakaji <nakajixxx@example.com>
Date:   Tue Apr 20 13:43:13 2010 +0900

    テストです

commit cfc8e1cbae08d7fbd7670e188baebb1d28f5cf09
Author: nakaji <nakaji@5f6ef47a-4c36-11df-b828-59ce81dbaaca>
Date:   Tue Apr 20 04:42:04 2010 +0000

    initial

    git-svn-id: file:///home/nakaji/svn_repos@1 5f6ef47a-4c36-11df-b828-59ce81dbaaca

$ git svn dcommit
Committing to file:///home/nakaji/svn_repos ...
        M       file1.txt
Committed r2
        M       file1.txt
r2 = 25011d00a2f8df0ca25a2476a77345f95ef17410 (refs/remotes/git-svn)
No changes between current HEAD and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn

#Subversion側で確認
$ cd ~/work/svnwork/svn_repos/

$ svn update
U    file1.txt
Updated to revision 2.

$ svn log
------------------------------------------------------------------------
r2 | nakaji | 2010-04-20 13:44:26 +0900 (Tue, 20 Apr 2010) | 1 line

テストです
------------------------------------------------------------------------
r1 | nakaji | 2010-04-20 13:42:04 +0900 (Tue, 20 Apr 2010) | 1 line

initial
------------------------------------------------------------------------

$ cat file1.txt
aaaa
eeee

その他

gitkやgit-gui等のGUIツール

Cygwinの環境構築が面倒なので無視しました。
GUIツールが使いたい場合は、下記いずれかの方法になるのではと思います。

  • Cygwinで環境を作る
  • msysgitをインストールし、gvimと同じようにaliasを付けてみる*4
  • svnとの連携はCygwin版を使用して、Gitに閉じた操作はmsysgitを使う

こうしてみると、おとなしくCygwinで環境作った方が幸せになれるかもしれませんね。

コンソール

コマンドプロンプトベースなのでコピペとか使いにくいので、CygTermなんかを使うと便利かもしれません。

その辺はおいおい追記しようかなと思います。

追記(4/20)

早速追記しますw

gitkを使えるようにする

gitkやgit-gui等のGUIツールですが、gitkは下図のように過去の歴史を参照するのに超便利なのでインストールします。
f:id:nakaji999:20100420150149p:image

インストールするのは先ほどのCygwinのsetup.exeから「gitk」を選択するだけ。

で、Cygwinのターミナルから実行しようとすると以下のようなエラーになってしまいます。

$ gitk
/usr/bin/gitk: line 4: /usr/bin/wish: Permission denied
/usr/bin/gitk: line 4: exec: /usr/bin/wish: cannot execute: Permission denied

/usr/bin/wishの実行権限がないようなので、chmodで権限を与えてやりますが、

$ chmod +x /usr/bin/wish

$ gitk
/usr/bin/wish: /usr/bin/wish: cannot execute binary file

どないなってんねん!

ということで、ちょっと無理やりですが、/usr/bin/wish の中身を見ると、wish84.exeへのシンボリックリンクらしい。

$ cat  /usr/bin/wish
!<symlink>wish84.exe

なら、今ある /usr/bin/wish は削除して、wish84.exe を wish.exe にコピーしちゃえ。

$ cp -p /usr/bin/wish84.exe /usr/bin/wish.exe

無理やりな感はありますが、とりあえずこれで使えるようになります。

本当はどうしたらいいのか詳しい人教えて…

*1:後で設定が必要

*2:CygwinGUIが使えるように設定が必要?環境作成が面倒なのでいらない!

*3:これもgit-guiと同じ理由でいらない(個人的に) 便利なので入れておく

*4:未検証