kuniku’s diary

はてなダイアリーから移行(旧 d.hatena.ne.jp/kuniku/)、表示がおかしな箇所はコメントをお願いします。記載されている内容は日付およびバージョンに注意してください。直近1年以上前は古い情報の可能性が高くなります。

Gitでハマリ中

eclipseからのGit利用で ”git non-fast-forward”でpush ができません。

  • プルしても、ローカル側が編集ありの状態になってしまう
    • フェッチしてもリモートからファイルが落ちてこず・・・・
  • 一度プルしてしまって、中途半端な状態になって、ローカルリポジトリのワーキングツリーがぐちゃぐちゃになってしまったのかなー。

http://tetsuwo.tumblr.com/post/36066698390/git-chmod-git-config
あたりで、パーミッションを無視するとpullしたファイルが変更ありではなくなる可能性あり

  • EclipseのGitは
    • Eclipse Git チーム・プロバイダー Git Java実装 org.eclipse.jgit.feature.group 使ってるけど、ちょっと動きがおかしい場合あり
    • ローカルリポジトリもサーバのブランチも誰もpullしていないのに、[git non-fast-forward]が出たこともある

fetch、merge、rebase の説明をしているサイト(今回の事象に関連しているわけではないが)
ほかに、Gitの

fetch、merge、rebase の3つの Git コマンドをちゃんと理解する
http://kray.jp/blog/git-pull-rebase/

git fetch とは「リモートのコピーをローカルにダウンロードする」コマンドです。ローカルのリモート追跡ブランチ(リモートのコピー置き場)にコピーしてくるだけなのでワーキングツリーには何も影響を及ぼしません。

この「リモート追跡ブランチ」とはあくまでリモートの状態を示すもので、ユーザー自身がこのブランチの内容を変更することはできません。(内容を見たりとかはできます)また、リモートの状態は自動的に反映されるわけではなく、git fetchコマンドで明示的に行う必要があります。※

このリモート追跡ブランチの内容を見たり、ローカルブランチにマージしたりするときは
git merge origin/master

上記のコマンドはローカルリポジトリの master ブランチをマージするものなので、リモートの master ブランチをマージするには以下のコマンドを実行します。
git fetch // 先にリモートの状態をリモート追跡ブランチにコピー
git merge origin/master // リモートのコピーからマージ

Gitで最近、思うこと。

GitのメリットをSVNのメリットが上回る一瞬
Gitを使いこなせていないことが要因かもしれないが。
少人数(最大4−5人未満)で新規の初期開発しているときは、どんどんコミットしてどんどん他の人の差分取得して、エラー解消してを、早急(さっきゅう)に行う必要があるためGitよりもSVNのがやりやすいと思った。

  • ソースのサンプルや、やり方の見本を横串で連携・確認しやすい。
  • ローカルを最新にしなくても、SVNサーバには集中管理型なので無条件にコミットやローカルでマージしてコミットできる。
    • デメリットもあるけどさ、他のファイルでコンパイルエラーになったり・・・
    • コンパイルエラーは、毎日数回jenkinsに自動ビルドさせて失敗したらメール等を送る仕組みならばサーバのファイルをチェックアウト前に検知可能
  • さくっとファイルを渡すにも使える。Slackで渡すのでも良いけど、SlackとチケットとGitと・・・どれがホント?みたいな。
  • バージョン管理といっても、開発でどんどんソースが変わっていくから追っかけても跡形もないことがある。
    • クラス名変えたり、パッケージ移動したり、ごそっと機能を別クラスに移動したりが日常茶飯事なので
  • SVNをバージョン管理でなくログと履歴の残るファイルサーバ扱いとして使っている気分
  • ファイルサーバ相当として扱うにはメリットもある、クライアントPCが起動しなくなったりで、1日分、数日分の作業が無かったことになるのは残念である、最近のMac Book proなんてSSDだけ取り出して、外付けUSBハードディスク相当で読み込むこともままならないのではないだろうか。SSD取り出すにも基盤にがっつりくっついてるし。
  • 単体テスト(unit test)コード書かずに、書くなら他の機能を実装!みたいな状況だと、もうマージとか考えてる暇もなし。
  • ある程度、軌道にのって機能間の結合テスト前に、SVNからGitに移行というのは良さそう?やったことないけど。