「Gitによるバージョン管理」の執筆者によるGit勉強会か講演会 に参加してきた #gitbookjp

Gitに関してはさほど習熟・実践度合があるわけではないのですが、書籍の著者自らによるイベント開催という事で参加してきました。

Gitによるバージョン管理

Gitによるバージョン管理

会場は株式会社サイバーエージェント17Fセミナールーム。イベントページを見る限りだと定員80人に対し170人以上という盛況だったのですが、蓋を開けてみると…な感じでした。(^_^;) 開始当初で50人居ない位だったかな?


予定通りに19:30開始、岩松さんによる説明及びそしてGit最新情報についての諸解説へ。

  • お約束
    • gitは『じっと』ではなく『ぎっと』です。
  • はじめに
    • 御参加ありがとうございます、
    • しかし何を話していいものやら。
    • …みなさん、今日は何しに来られたんですか?
    • 特に何も要求が無かったので適当に話します。
  • Git本
    • 『Gitによるバージョン管理』
    • Git関連本は4冊目。
    • 他の本との差別化が難しい。
    • Gitを知らない人に、『これ、明日までに読んでおいて』と渡したら理解出来る本に。
    • おかげさまで人気あるようです。
    • ありがとうございます。
  • 諸注意
    • 残念ながら今日の話を聞いてもGitは理解デキマセン。、
    • 『Gitによるバージョン管理』を読めば理解出来る!
    • 勉強会期待してる人は別途相談して。
    • これだけ参加者がいるので色んな意見を聞きたい。

著者紹介

なお、著者4人(岩松 信洋さん/小川 伸一郎さん/前田 耕平さん/上川 純一さん)のうち、前田さん、上川さんは都合により欠席となりました。

Git最新っぽい情報


  • 最新はv1.7.9.2(2012/2/22リリース)
  • v1.7.10 coming soon?
  • git clone --single-branch
  • git push --prune
  • 次期mysysgitでUTF8対応らしい
  • ※1.7.0から個人的に重要と思ったものをピックアップ。
    • git am --keep-cr
      • amするときにCRを維持。
    • git commit -S
      • コミットにPGP/GPG署名が出来るようになった。
    • git cherry-pick start…end
      • git cherry-pickコマンドで範囲指定可能に。
    • git branch --edit-description
      • ブランチに説明を追加出来るようになった。
      • .git/configに設定される。
    • git cherry-pick, git revertで --strategyが使えるようになった。
    • git clean -e
      • 指定したファイルを無視してcleanする。
      • .git/info/excludeファイルも参照。
    • git checkout --detach
      • 指定したrefsをチェックアウト出来る。無名ブランチ厨御用達。
    • git init --separate gitdir
      • .gitを分離する。
    • git stash save -u --include--unstacked
      • unstackedファイルもstashする。
    • git rebase -i execサポート
    • git reset --keep
    • -git reset --merge
      • 違いが微妙(笑)詳しくはスライド資料の表を参照。
    • gnu patchがgit形式をサポート(Not yet released)。
  • ここを読むと面白い。(浜野さんが更新している:英語)

ツールの話

tig
TortoiseGit, GitX, Gity, Gitbox
  • TortoiseGit: WindowsGUI
  • Git*:OS XGUI
  • 使ってないので良く分からないです。生GIt良いですね(by 著者談)
stgit/guilt
  • パッチをスタックとして考えるツール
  • パッチセットを管理したい人向け。

SubversionからGitへ移行するときの問題について簡単に語る


  • 最近本書きました。良ければ買ってやってください。
    • Gitによるバージョン管理

Gitによるバージョン管理

Gitによるバージョン管理

    • Ruby on Rails3で作るjpmobileによるモバイルサイト

-Ruby on Rails 3で作る-jpmobileによるモバイルサイト構築

-Ruby on Rails 3で作る-jpmobileによるモバイルサイト構築

    • Ruby公式資格教科書

Ruby公式資格教科書 Ruby技術者認定試験 Silver/Gold対応 (EXPERT EXPASS)

Ruby公式資格教科書 Ruby技術者認定試験 Silver/Gold対応 (EXPERT EXPASS)

  • いま何使ってますか?/会社のプロダクトで使っている?
  • Subversionが多いはず。
    • 政治的理由により、とか
    • 厨の話は岩松さんに
  • SvnからGitに移行するときの問題点
    • リビジョン番号がない
    • マージとリベース
    • SvnリポジトリでGitを使う
  • リビジョン番号
    • コミットに紐付けられた連番
    • 連番なので順序を把握しやすい
    • そもそも順番って何?(とGitの人は言う)
    • (リビジョン番号解説)
    • 結局のところ、直列っぽくなる
  • Gitでリビジョンは?
    • なぜ必要?
    • コミットを特定したい
    • 順番が分からなくて困る
    • なぜ順番が必要?
      • コミットを特定したい
      • ちゃんと動いてたコミットを知りたい
    • それってgit rebase使えば出来るよ、と言われる
  • Gitでコミット順?
    • がなぜ必要?
    • だってこんな状態になったら、大変じゃないですか
    • 何が大変か
      • バグの特定しようにも…
    • Gitが難しいという風評被害が…
  • Gitは難しい
    • 概念的には難しくないはず
  • リベースとマージを使い分ける
    • うまく使い分けられればいいはずだが
    • 一番わかりにくいのがリベースとマージ
  • リベースとマージ
    • どっちを使えば良いか
      • 状況によりけり
    • Subversion的に考える
      • Svnでトランクにマージするとき
    • リベースする
    • リベース?マージ?
    • 全てはリベースに通ず
      • 大概はそれで良いはず
    • git svnコマンド
    • svn:externals
    • svn:ignore
    • .gitignore
    • マージ
      • git mergeでマージする場合、えいやっとやってしまうとsvnのremote情報が変わってしまう
      • svnのremote情報を更新しないでマージ(git merge --no-ff topic)
        • GIt上ではマージコミット
        • Svn上では、普通のマージ
      • git merge -squash topic
  • まとめ
    • とりあえず本買って読めばなんとかなる
    • リビジョン番号はオワコン
    • まずはリベースしようぜ
    • まずはgit svnから

最後に質疑応答を幾つか。

んで、近いうちに、Gitのハンズオン的なものを行う『道場』的なものが開催されるらしいですよ。(※3月末辺りに。)岩松さんと小川さんの掛け合いで明らかにされておりました。

git bundleについて語ってみる


  • Gitはスニーカーネットワークをサポートしている。使うには?
    • git bundleを使う。
      • bundle:束、束状構造
      • コミットの幾つかを束ねておきたい。
      • [git bundle create]コマンドで作成出来る。
  • 作成されたイメージをUSBメモリなどに入れて移動!
  • bundleイメージ適用(の前にイメージ検証)
    • git bundle verify
    • 検証イメージ
    • 検証エラーになるパターン
  • bundleイメージの取り込み
    • git pull/git fetch/git remote等で実行可能
    • リファレンスを指定する必要がある
      • git bundle list-heads
        • イメージ内にあるリファレンスを出力。
    • bundleファイルはリモートリポジトリとして扱える…git remoteを使った方が良いらしい。
      • git pullでの実施方法
      • git fetchでの実施方法
      • git remoteでの実施方法
    • その他のコマンド
      • git bundle unbundle:Gitオブジェクトをgit index-packを使って.git/objects以下に展開。Gitオブジェクト厨御用達ツール。
    • タグやブランチはどうするの?
      • bundle作成時に取り込みたいタグやブランチを指定
      • 全てのタグは--tagsを指定
      • 全てのブランチは--branchを指定
      • 全てのリファレンスを取り込みたい場合は--allを指定
    • 似たような機能:git format-patchはどうなの?
    • けど、使う事なんて無いよね…?
      • バックアップとして使えます!(キリッ)
      • リポジトリのバックアップ機能:bundle開始位置を指定しない場合、一番最初のコミットからデータを取得出来る。
      • バックアップソリューションとして使える。

最後に再度。質疑応答。

今後について

  • Git勉強会?
  • Gitハンズオン?
  • Gitコードリーディング?



う〜む、こうして聞くとGitはやはり難解なイメージですなぁ…(笑)難解というか、出来る事が多過ぎる?少しずつ覚えて行けばあんま気にならないところなのだろうか…。


※スライド資料、その他関連リンク等は情報は随時追記して行きます。


その他関連サイト: