Gitでハマリ中
eclipseからのGit利用で ”git non-fast-forward”でpush ができません。
- プルしても、ローカル側が編集ありの状態になってしまう
- フェッチしてもリモートからファイルが落ちてこず・・・・
- 一度プルしてしまって、中途半端な状態になって、ローカルリポジトリのワーキングツリーがぐちゃぐちゃになってしまったのかなー。
http://tetsuwo.tumblr.com/post/36066698390/git-chmod-git-config
あたりで、パーミッションを無視するとpullしたファイルが変更ありではなくなる可能性あり
- EclipseのGitは
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サーバには集中管理型なので無条件にコミットやローカルでマージしてコミットできる。
- さくっとファイルを渡すにも使える。Slackで渡すのでも良いけど、SlackとチケットとGitと・・・どれがホント?みたいな。
- バージョン管理といっても、開発でどんどんソースが変わっていくから追っかけても跡形もないことがある。
- クラス名変えたり、パッケージ移動したり、ごそっと機能を別クラスに移動したりが日常茶飯事なので
- SVNをバージョン管理でなくログと履歴の残るファイルサーバ扱いとして使っている気分
- ファイルサーバ相当として扱うにはメリットもある、クライアントPCが起動しなくなったりで、1日分、数日分の作業が無かったことになるのは残念である、最近のMac Book proなんてSSDだけ取り出して、外付けUSBハードディスク相当で読み込むこともままならないのではないだろうか。SSD取り出すにも基盤にがっつりくっついてるし。
- 単体テスト(unit test)コード書かずに、書くなら他の機能を実装!みたいな状況だと、もうマージとか考えてる暇もなし。
- ある程度、軌道にのって機能間の結合テスト前に、SVNからGitに移行というのは良さそう?やったことないけど。