Git初め

これまでSVN

時代はGit

Gitのサーバ立てるのが面倒

Github

事情でprivateにしたい&出来れば無料で

bitbucket

て流れです。開発者も少数なので。人数増えて来たら、Github Enterprise含め検討しようかと。

既にEclipseでプロジェクトが存在します。これをGitで管理したい。
まず、ローカルリポジトリ
githubのドキュメントが分かりやすいです。Create a repo - GitHub Help
会社では、社外にSSHでアクセス出来ない!ので、HTTPS使うしかありません・・・。ほんとなんとかしたい。

ローカルリポジトリ作成

$ mkdir ~/hoge
$ cd ~/hoge
$ git init
$ touch README
$ git add README
$ git commit -m 'first commit'

リモートにpush!

$ git remote add origin https://nosa@bitbucket.org/nosa/hoge.git

$ git remote -v
origin  https://nosa@bitbucket.org/nosa/hoge.git (fetch)
origin  https://nosa@bitbucket.org/nosa/hoge.git (push)

$ git push -u origin master
Password for 'https://nosa@bitbucket.org':
Counting objects: 3, done.
Writing objects: 100% (3/3), 204 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: bb/acl: nosa is allowed. accepted payload.
To https://nosa@bitbucket.org/nosa/hoge.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

パスワード毎回確認するの面倒になりそう。SSHにしたい・・・。

originやらmasterについて。
Git超入門:"git push origin master"の"push"と"origin"と"master"の意味がわからないあなたへ · DQNEO起業日記
ありがとうございます。私も恐怖を感じました。

次に既存のEclipseのプロジェクトを、ローカルリポジトリに突っ込みたいと思います。

ローカルリポジトリとの共有
EclipseでGitを使うには、EGitが必要です。EGit | The Eclipse Foundation
・設定から、先ほど作ったローカルリポジトリの親ディレクトリをGitのDefault Repositoryと設定。
・Gitのパースペクティブから、先ほど作ったローカルリポジトリを追加。
・プロジェクトから、プロジェクトの共有 - Git - ローカルリポジトリを指定、終了。
 既存のプロジェクトのワークスペースから、ローカルリポジトリにプロジェクトが移動します。
 これちょっと違和感ありました。git - tech.cm55.com
 SVNの場合は、リモートからCheckout、ワークスペースにソースがコピーされるのですが、
 Gitの場合は、ローカルリポジトリ≒プロジェクトな感じになるので、ワークスペースという考えが薄いように思います。
 個人的には、ワークスペース - ローカルリポジトリ - リモートリポジトリの3段構えのほうが分かり易いです。
 これまでSVNを使ってたからでしょうね。
・sbtを使っているので、ローカルリポジトリに移動し、sbt reload,update,eclipseなど実行、確認。
 
ローカルリポジトリにCommit!
必要のないファイルもあるので、gitignoreを設定します。sbtで作成したプロジェクトなので、とりあえずこんな感じです。

*.class
*.jar
*.zip
.cache

.classpath
.project
.settings/
target/

で、Eclipseから、Team - Commitするんですが、

Exception caught during execution of add command

でるんですよね・・・。どうも特定のファイルがダメらしい。自分の場合はXMLのファイル。
他のXMLのファイルはOKだし、同じディレクトリにあるXMLファイルもOKなので、
XMLディレクトリが原因ではなさそう。
また、ファイルの中身に日本語が含まれている(ファイル名は英語)けど、これも他のファイルがOKなので、
日本語が原因でもなさそう。
・ファイルを空ににする→OK
・少しだけ内容も戻す→OK
・全部戻す→NG
・半分ぐらいに戻す→OK
・もう少し戻す→NG
なーぜー?ファイルサイズ疑いますが、うーん・・・。
gitでCommitしてみる。

$ git commit hoge/src/main/webapp/test/hogehoge.xml

いける。pushも出来る。EGit何か設定あったかなぁ。
ここらへんEclipse Community Forums: EGit / JGit » Exception caught during execution of commit commandとか
まさにって感じなんですが。
自分もEgitのバージョンは、1.3.0.201202151440-rです。
Eclipseからソフトウェアの更新で、Egitバージョン上がってました。2.0.0.201205071915にアップしました。
Commit出来ました。バグだったんでしょうか。

最後に、bitbucketをブラウザから確認。ちゃんと見れますね。
だれか招待(invite)して、cloneして確認してもらおう。

基本的なコマンド覚えないとですね。
Gitを使いこなすための20のコマンド | OSDN Magazine
ここらへんぐらいは抑えたいところです。

git status
 変更されたファイルを表示。新規ファイルは出ない。push前は、確認した方がよいかな。
git rm
 ファイル削除、ディレクトリを消す場合は、-r付ける。
git remote -v
 リモートリポジトリの情報を表示。リモートリポジトリが複数あるので、確認に使った。
git commit -a
変更が加えられたファイルを自動検出してコミット。ガッツリ消す時使った。

Git初心者に分かりやすいサイト:
git - 簡単ガイド
イラストでわかる!git入門の入門 - アシアルブログ

お疲れ様でした。

追記:
既にeclipseでプロジェクトがあり、ディレクトリ構成がそのままで良いなら、
SVNと切断して、プロジェクトのディレクトリで、
git init
したほうが簡単ですね。