GitインストールからEclipse (EGit)からのCommit / Pushまでメモ
概要
Gitインストール→サーバ側のレポジトリ作成→EGitインストール→既存プロジェクトをローカルのGitレポジトリに→Addしてローカルにコミット→サーバ側のレポジトリに(公開鍵を利用した)ssh越しにPush
基本的にはEgitのUser's Guide(英語)がベースになっています。
前提
サーバ側はUbuntu 10.04.1 、作業するPCはWindows 7 64bit、使用したEclipseのバージョンははHelios。サーバには公開鍵を利用したSSH接続が"user01"というアカウントから利用できるものとします。
Gitインストール
$ sudo apt-get install git-core
これだけでインストール完了ちなみにインストールされたのは「git-core」「libdigest-sha1-perl」「liberror-perl」
空のレポジトリを作成
空のレポジトリを作成。ここでは、仮にプロジェクト名を「project01」としてやってみます。
$ mkdir project01.git $ cd git $ git init --bare Initialized empty Git repository in /path-to/project01.git/
基本はこれで完了。「--bare」オプションが無い場合は「.git」ディレクトリが「project01.git」ディレクトリ以下に作成されます。--bareを使うことが割と多そうなのでこっち
EGitインストール
EGitは、Eclipse用のGitクライアントです。実はEclipseの最新版にははじめからインストールされており、わざわざインストール作業を行う必要はありません古いバージョンのEclipseにインストールしたい場合はこちら→「EGitのアップデートサイト」
EGitでSSHを使う準備
第一のポイントは、秘密鍵ファイル「id_rsa」の設置場所です。Linuxだったら「~/.ssh」ディレクトリに設置すればいいのですが、Windowsの場合は「C:\Users\(ユーザ名)\ssh」フォルダに設置します。 これについては「EclipseのEGitプラグインのSSHデータはどこに?」 に書かれていますが、Eclipseの「Window>Preferences>General>Network Connections>SSH2」の「General」タブで設定可能で、デフォルトで「C:\Users\(ユーザ名)\ssh」フォルダが指定されているだけです。
ローカルレポジトリへのCommit
Gitでバージョン管理したいプロジェクトを右クリックすると、Teamという項目が見つかります。ここを重点的に利用していきます。まず「Team>Share Project」を選択します。次の画面で「Git」を選択して「Next」。次の画面で「Create Repository」をクリックして「Finish」を押します。これで、ローカル用のレポジトリが作成されました。
続いて、「Team>Add」を選択します。すると、プロジェクト内にあったファイルがすべてGitによるバージョン管理の対象になります。
最後に「Team>Commit」を選択します。表示された画面にCommit Messageを入力してCommitをクリックします。これでローカルレポジトリに対するコミットが完了しました。
GitサーバへのPush
続いてPushです。同じように「Team>Push」を選択します。そして、レポジトリに関する情報を入力します。ここでは、URIに
ssh://(SSHログインを行うユーザ名)@(サーバのホスト名):(ポート番号、普通22)/(レポジトリまでのフルパス)/project01.git
URIの蘭に全部入力してしまえば、それ以外の場所は勝手に入力されます。入力したらNextを押します。次の画面で「Add all branches spec」を押して「Next」をクリックしてPushが行われます。
エラーが出たときは
Push時に次のようなエラーが表示された場合は、
Repository ...
branch is currently checked out
error: refusing to update checked out branch: refs/heads/master
error: By default, updating the current branch in a non-bare repository
error: is denied, because it will make the index and work tree inconsistent
error: with what you pushed, and will require 'git reset --hard' to match
error: the work tree to HEAD.
error:
error: You can set 'receive.denyCurrentBranch' configuration variable to
error: 'ignore' or 'warn' in the remote repository to allow pushing into
error: its current branch; however, this is not recommended unless you
error: arranged to update its work tree to match what you pushed in some
error: other way.
error:
error: To squelch this message and still keep the default behaviour, set
error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
レポジトリの指定がおかしいと考えられます。git init --bareでレポジトリを作成した場合はproject01.gitをレポジトリのURIに指定し、git initでレポジトリを作成した場合は.gitディレクトリをレポジトリのURIに指定しないとこのエラーが発生するようです。
まとめ
使い始めたばかりだけど、また同じことを何度もやりそうなのでメモって置いた程度。