cakephperの日記(CakePHP, Laravel, PHP)


継続的WebセキュリティテストサービスVAddyを始めました!

2013-04-22

git, github講座で3時間ほど話して声が枯れてペットボトルの水3本を消費してきました

4/20にWAVE新宿で下記の講座を開催しました。

「フロントエンド技術をたかめたい・Webクリエイターのためのgithubで始めるgit講座」

〜黒い画面を使わずに、バージョン管理の基本を学ぼう〜


今回は、コワーキングスペース茅場町 Co-Edo(コエド)マルチメディアスクール WAVE株式会社コンテンツワン 、L15の4社主催での開催となりました。


20人ほどの参加者で、3時間ほどやりました。最初の30分でgitgithubに関して紹介して、残りの時間でハンズオン形式で全員がgithubにpush/pullするまで行いました。

今回は、極力詳細の説明を省略して、とにかく使えるようになるまでを資料にしました。細かい話は質問が出るたびにしていくという感じでした。質問が活発だったので楽しかったです。


GUIクライアントとして登録すれば無料で使えるSourceTreeを使い、githubへの接続はsshを前提にしました。この2つの組み合わせで使えるようになれば、github以外を使う場合にも困ることはないと思って採用しました(github for macや、https接続のみで覚えると、github以外を使うのが難しくなるので)


この内容であれば、また再演できるので、興味がある方はご連絡ください。企業研修でのご要望も受付中です。

今のところ、5月中旬ぐらいに福岡で同じ内容をやる予定です。


資料は下記2点です。



今回は一人で3時間ぐらい大きな声で話し、ワークショップでは受講者のサポートをしたため、すごく疲れましたが、受講者からの質問が活発だったのと懇親会が盛り上がったのですごく楽しかったです。

普段からもっと運動して声を出すようにしたほうが良いですねー

2012-10-15

pull request送るまでは適当なコミットメッセージにしておく

CakePHPのCookbook翻訳で、gitの利用方法を以前書きました。

http://d.hatena.ne.jp/cakephper/20120709/1341808861

その時は、本家の最新の状態をrebaseで反映してから自分のリポジトリのブランチにpushするまでの流れを書きました。

その後は、githubのページから自分のブランチのページへ移動して、pullリクエストをcakephp/docsのmasterブランチに投げればマージされるのを待つのみになります。


今回、RESTの章を気が向いた時に少しずつ翻訳しながら進めていました。

https://github.com/cakephp/docs/pull/407

そうすると、毎回作業の終わりにコミットしたくなるのですが、途中経過のファイルをコミットするため、コミットメッセージとかどうしようかなと迷ってました。

いろいろと考えるのが面倒なので、コミットメッセージは適当な文字 1st, 2ndとかにして、最後のpull requestを送る前にrebase -iでコミットを1つにまとめて、そのときにちゃんとしたコミットメッセージにすることにしました。

(注意点としては、その作業ブランチをgithubにpushしないことです。pushすると最後にまとめてしまうコミットと不整合が起こるので)


まずは、自分の作業ブランチに行って、push前に最新の本家masterブランチを取り込んでおき、

下記操作でmasterとの差分コミットを1つのコミットに統合します

git rebase -i master

そうすると、masterには無いこのブランチのコミットが下記のように表示されます

 pick d648a70 1st
 pick a988cd1 2nd

 # Rebase f680aba..a988cd1 onto f680aba
 #
 # Commands:
 #  p, pick = use commit
 #  e, edit = use commit, but stop for amending
 #  s, squash = use commit, but meld into previous commit
 #
 # If you remove a line here THAT COMMIT WILL BE LOST.
 # However, if you remove everything, the rebase will be aborted.

pickはコミットを残す、squashは上のコミットに入れてしまう、という意味なので、下記のように2行目のコミットの先頭をpickからsに変えます

 pick d648a70 1st
 s a988cd1 2nd

そのままエディタを保存終了すると、今度はコミットメッセージの編集画面になるので、ここで正式なコミットメッセージを記述します。

 # This is a combination of 2 commits.
 # The first commit's message is:
 1st

 # This is the 2nd commit message:

 2nd

 # Please enter the commit message for your changes. Lines starting
 # with '#' will be ignored, and an empty message aborts the commit.
 # Not currently on any branch.
 # Changes to be committed:
 #   (use "git reset HEAD <file>..." to unstage)
 #
 #       new file:   ja/development/hoge.txt

#はコミットメッセージから無視されるので、1stと2ndという仮コミットメッセージを消して、

正式なコミットメッセージのみ記載して、エディタを保存終了します。

その後、git log -p などすれば、1コミットにまとまっているのが分かると思います。


参考:「GitHubへpull requestする際のベストプラクティスhttp://d.hatena.ne.jp/hnw/20110528

2011-10-11

gitのコミットを後から分割

最近関わってる http://tipshare.info というサイトで簡単なTipsを書いてます。

皆さんも是非使ってみてください。

この週末に [twitter:@monsat]さんがtipshareの記事をブログに貼り付けられる機能を作ってくれたので、gitコミットを後から分割する方法を貼り付けます。


gitでコミットしたものを後から複数のコミットに分割する方法

@cakephper


※ただしリモートリポジトリにpushした後は実行してはいけない

git rebase -i HEAD^

下記のようなコミットメッセージが表示されるので、pickをeditに変更
pick 310154e 修正1と修正2

edit 310154e 修正1と修正2

git reset HEAD^

git add前の状態になるので、必要な単位でgit addとcommitを繰り返す

git rebase --continue

参考: http://progit.org/book/ja/ch6-4.html#id147

#git

2009-12-05

cakeplus.add_validation_ruleにバリデーションルール追加

cakeplusを細々と開発していますが、嬉しいことにk1LoWさんにgithub経由でpullリクエストを貰ったので、それをマージしてみました。今回追加したルールは全角のbetween、ひらがなのみ、全角のみかをチェックするの3つです。

今回はgitで一連の操作をしたので、その流れをまとめました。

CakePlusの各機能に関しては、下記の記事の中に書いてあるのでご覧下さい。

http://d.hatena.ne.jp/cakephper/20090909/1252461412

興味を持った方は、ソースコードに使い方などの説明がたくさん書いてあるので、見て頂けると嬉しいです。

http://github.com/ichikaway/cakeplus


マージの前に、とりあえず、現行のコードを初期のバージョンとしてcakeplus-0.1というタグを付けて、push。githubのall tagsという箇所からいつでも取得できるようにします。

http://github.com/ichikaway/cakeplus/tree/cakeplus-0.1

git tag cakeplus-0.1 
git push --tags

ブランチを作って、pullリクエストのコードをそこにpullする。

git branch hoge
git checkout hoge 
git pull git://github.com/k1LoW/cakeplus.git

差分は下記で見れます

git diff master hoge

テストケースとか追加してコミット

vi tests/cases/models/behaviors/add_validation_rule.test.php
git add tests/cases/models/behaviors/add_validation_rule.test.php
git commit -m "add test case"

最後にマスターに移動して、マージして、githubにpush

git checkout master
git merge hoge
git push
git branch -d hoge

git cloneして何かしらCakeplusに機能追加した人は、pullリクエスト下さい(別にメールで連絡でもいいです)。マージしますので。


追記:

今回の追加バリデーションの実装は加賀澤さんという方にして頂きました。ありがとうございます。READMEのContributor欄にお名前を加えさせて頂きました。


追記:

git pullリクエストに対応する方法が下記にまとまってます。

http://help.github.com/pull-requests/#merging_a_pull_request

自分の場合のパターン

$ git branch master-merge
$ git checkout master-merge

$ git remote add hogehoge git://github.com/hogehoge/cakeplus.git
$ git fetch hogehoge
$ git merge hogehoge/master
//ここで色々と確認、追加、修正作業

$ git co master
$ git merge master-merge
$ git push origin master

$ git branch -d maser-merge
$ git remote rm hogehoge

2009-09-25

gitのメモ

基本操作

  • ワークディレクトリに変更がないか確認
  • コミット対象ファイルをインデクスに追加
    • git add ファイル名
  • カレントディレクトリ以下の全コミット対象ファイルをインデクスに追加
  • git addしたものを消す
    • git rm --cached ファイル名
  • git addしたものを複数消す(カレントディレクトリ以下)
    • git init後の最初のaddで全ファイル登録した際に、いらないgitingoreに書き忘れたファイルがあるときに、一気にaddしなかったことにできるので便利
    • git rm --cached -r .
  • ログ一覧表示(差分コード含め最新2件のみ表示)
    • git log -p -2
  • ブランチ間の差分
    • git diff ブランチA ブランチB

ブランチ関係

  • ブランチを表示
    • git branch -a
  • ブランチ作成
    • git branch hogehoge
  • ブランチ移動
    • git checkout hogehoge
    • git checkout origin/remotehoge
  • リモートのブランチ(origin/remotehoge)をローカルブランチ(hogehoge2)に作成して移動
    • git checkout -b hogehoge2 origin/remotehoge
  • ローカルブランチをリモートに作成/反映(remotes/origin/hogehogeが作成される)
    • git push origin hogehoge
  • hogehogeローカルブランチの内容をremotes/origin/remotehogehogeに作成/反映
    • git push origin hogehoge:remotehogehoge
  • ブランチを削除
    • git branch -d hogehoge
  • リモートブランチを削除
    • git branch -r -d origin/remotehogehoge
    • git push origin :remotehogehoge
  • リモートブランチのリネーム(別リモートブランチ(remotehoge2)にコピーしてremotehogeを削除)
    • git checkout -b localhoge origin/remotehoge
    • git push origin localhoge:remotehoge2
    • git push origin :remotehoge
  • 全ローカルブランチをリモートにPush
    • git push --all

マージ

  • masterにブランチ(hogehoge)をマージ
    • git checkout master
    • git merge hogehoge