kumamidoriの日記

2013-12-10

ブログを移行した

新ブログはこちら。

http://kumamidori.github.io/

jekyll bootstrap を使って Github Pages に立てました。無料でホスティングできるなんて嬉しい。

2013-10-27

[] Finderで検索できない(Lion)

対処方法は分かったのだけれど、たまに再発する・・・。

Spotlight reports “Indexing and searching disabled” in Lion

http://apple.stackexchange.com/questions/24401/spotlight-reports-indexing-and-searching-disabled-in-lion

対処した方法:ターミナルで下記を実行した(合ってるのかは不明。自己責任。)

  sudo mdutil -i off /
  sudo rm -rf /.Spotlight*
  sudo mdutil -i on /
  sudo mdutil -E /
  sudo vi /etc/hostconfig
  #この行を末尾に追加
  SPOTLIGHT=-YES- at the bottom (this line was missing)

  で、OS再起動

これで、虫眼鏡マークにカーソルをあててみると、Spotlightのインデックスが再構築中になっているのを確認できた。直ることは直るのだけれど、ふと気づくとまた再発していたりして、根本的な原因、解決方法は分からず。やり方を忘れるのでここにメモった。

別な話なのだけれど、Mac で今さら覚えたTipsがあって、ファイル選択のダイアログで、

Command + Shift + . (ドット)

をすると、ドットで始まるファイルを普通に選べるということ。今までずいぶん無駄なオペレーションをしていた!もっと早く知るべきだったな。


今日は入り用があってAWS学習。ドットインストールで解説されている程度までしかさわれず。AWS公式アカウントで公開されているPHPのSDKラッパって、ZF2/Silex/Laravel の3種類しか無いのかー、と思った。https://github.com/aws

2013-10-19

[] リモートの最新を取り込む(rebase、merge、push -f について)

今の勤務先は、VCS は Github、開発フローは git-flow です。

※ちなみに、会社のみんなは、クライアントは source-tree で全部やっているのだけれど、私はGithub for Mac(Editボタンやsyncボタンが好き)、git-flow系のコマンドだけコマンドラインで手で打っている。

以前の職場がSubversionだったもので(個人ではGithubを愛用していたとはいえ)、Gitでのチーム開発、初心者・・・。案の定、下記問題で行き詰まって、時間を無駄にしたわ。っていうか、ジタバタする前に、よく考えれば良かったんだなー。

やりたいこと

バージョンの上がったdevelopのfeature への取り込み。

この stackoverflow がまさに私の求めていたぴったりの情報だったので、理解を深めるため、以下に勝手に翻訳する。

http://stackoverflow.com/questions/8939977/git-push-rejected-after-feature-branch-rebase

Q. feature branch を rebase した後、git push したら reject されるのですが?

さてさて。下記はgitの単純なシナリオだと思ったのだけれど、何が足りていないのかな?

master ブランチと feature のブランチを持っている。マスタで何かして、feactureで何かして、それで、master で何か作業をする。下記のようにして何かを終える。アルファベットの順番は、コミットの順を示す。

A--B--C------F--G  (master)
            |    
            D--E  (feature)
問題点:

「既に git push origin feature がされていて、その後新たに rebase をしたという feature をバックアップしたい」となった時なのだけれど、

rebase したことによってツリーが変わってしまったために、この push は reject されてしまった。

git push --force origin feature することでしか解決ができない。

どうしても必要なのでなければ、--forceオプションを使うのは嫌なんですよね。この場合要るのですか?rebase をしたら、次の push では必ず --force するべきだということなのでしょうか?

edited Jan 25 at 12:14 Drew Noakes / asked Jan 20 '12 at 10:29 Yuval Adam


41+されたAnswer.

問題は、git push というのが、リモートブランチがあなたのローカルブランチに対して fast-foward を想定しているという点です。

ローカル、リモートブランチ間のすべての差分が、新しいコミット群を持っているローカルの中に下記のように最後まである、ということです。

Z--X--R         <- origin/some-branch (Y コミットに対して fast-forwarded の関係になれる)
           |        
            T--Y    <- some-branch

git rebase をすると、コミットDとEが新たにベースに適用されて、新しいコミット群が作られます。

rebase した後、下記のようになるわけです:

A--B--C------F--G--D'--E'   <- feature-branch
           |  
            D--E                <- origin/feature-branch

この状況において、リモートブランチはローカルに対して fast-forward にはなれません。

理論上はローカルブランチはリモートにマージさせられるのだけれど(もちろんここではそんなことはしないわけで)、git push は fast-forward でのみ動くので、マージさせようとするとエラーになります。


そして、--force オプションが何をするかなのですが、単にリモートブランチの状態を無視するだけです。リモートpush しようとしているコミットについて無視をするという設定をします。つまり、git push --force origin feacture-branch は origin/feacture-branch をローカルのfeature-branch でただ単に上書きします。

個人的な意見としては、

featureブランチをmasterでrebaseすること、

リモートリポジトリにそれらをforce push することで戻すこと

は、あなたがそのブランチで1人で作業するだけなのであれば、問題無いと思いますよ。

this answer edited Jan 20 '12 at 13:30 answered Jan 20 '12 at 10:55

【翻訳ここまで】

感想

  • で、これを読んで、よーくわかった。遅まきながらわかったよやっと!
  • でも、新たな悩みが。-f オプションでpush したら、一所懸命スクリーンショットとか貼り付けてmarkdownでとりまとめたGithubのコメントが、丸ごと消えてしまうのだ!
    • 今のチームでは、PRレビューではなくて、ブランチの各コミットごとに細かくレビューしていく、という運用でやっているので、コミットに対するGithubコメントで画面動作確認のエビデンスを添付したりすることが多い。
  • それで、参考にさせて頂いたツイートが下記。

https://twitter.com/udzura/status/379296419271548928

f:id:kumamidori:20131019220051p:image:w360

結論

  • 私の用途だと、rebaseではなくて、毎日こまめに merge (or pull)で最新developの取り込みをするやり方になる。
  • rebaseは一人で開発している時限定で使おうと思った。
  • うーん。そもそも、エビデンスの管理をGithubコメントでやっているのがいけてないのかもしれない。ふむー。

参考リンク

2013-09-16

[] Packagistにパッケージ公開してみんとす

はじめに

BEAR.Saturdayで、すぐにテストを始められるインストールツールが必要と思った。

公開されたパッケージ「BEARSaturday.Skeleton」

BEAR.Saturdayのアプリケーションスケルトンのインストールとphpunit等のQAツールのセットアップを行います。

詳細は、READMEに全部書いてあるので省略。

実装

具体的で細かいことが難しい

  • 運用上、QAツール一式をどこにどう置くのが良いか。とりあえず「Composerのシステムグローバル」に入れることにした。とにかく、「プロジェクトのVCSリポジトリ」にコードそのものは入れない。

関連リンクメモ

  • PHP.Skeleton

https://github.com/koriym/PHP.Skeleton

のビルド

https://github.com/koriym/PHP.Skeleton/blob/develop/build.xml

ant requireで必要なQAツールのインストールがcomposerでグローバルに行われます。

  • QAツール配置について

f:id:kumamidori:20130916123813p:image:w360

f:id:kumamidori:20130916124303p:image:w360

https://twitter.com/BEARSunday/status/379274584702201856

https://twitter.com/BEARSunday/status/379275004543647744

Packagistに公開する作業でつまずいた点のメモ

下記、ちょっとうろ覚え。微妙に間違っているかも。そのうちまた思い出す。

  • 間違ったデバッグ方法
    • ローカルでイベント処理をデバッグ -> イチイチ Packagistに Submit -> composer install で script をキック
  • 正しいデバッグ方法
    • ローカルでイベント処理をデバッグ -> composer install で直接キック(ダウンロードしにいかずにローカルを見にいくからだいじょうぶ)

余談(日記)

相方と共に東京から関西に引っ越すことになった。

10月から関西の会社で働きます。

次の会社に、違った良さ、魅力を発見しました。そこにフィットした形でがんばっていきたいです。仕事内容は、PHPでB向けのWebサービスを作る仕事。BEARユーザではなくなったけれど、学習は、今後もプライベートで続けていきたいな〜と。

2013-08-17

[] 自分用Githubメモ

この間ペアオペしたら、今までずっと無駄が多いオペレーションでがんばっちゃっていたことに気づかされた。PRについての自分用メモ。

  • 通信を http ではなくて ssh ですれば、いちいちアカウント情報を入力せず、ノーパスワードで鍵だけで push できる <これはひどい
  • Github アプリで cloneしたリポジトリの閲覧、操作、push、ブランチ切り替え、いろいろできて便利
  • PRがマージされて要らなくなったブランチは、git push origin :ブランチ名 で消す
  • master/develop があること
  • git flow 使う。コマンドラインツールは Github アプリから入れられる。
  • git rebase --continue
  • git rebase -i HEAD^^^
  • git fetch upstream ワークツリーのファイル自体は更新されない。リモートの情報と同期するだけ。
  • Syncing a fork https://help.github.com/articles/syncing-a-fork
  • git rebase upstream/develop