Git

FreeBSD Subversionのgitミラーをhgでとってくる

% hg clone git://git.freebsd.your.org/freebsd.git
複製先ディレクトリ: freebsd
importing git objects into hg
ブランチ default へ更新中
ファイル状態: 更新数 49159、 マージ数 0、 削除数 0、 衝突未解消数 0
71918.132u 7618.691s 23:24:06.22 94.4%  1472+1323k 0+0io 12489pf+0w
% du -sh freebsd/.hg
5.7G    freebsd/.hg
% cd freebse
% hg tags | wc
    2099    4198  111447
% hg bookmarks | wc
    2098    4197  104350
% du -hs /usr/src/.hg
800M    /usr/src/.hg   ← こっちはhgsubversionでトランクだけをとってきたやつなのでずっと小さい。
%

hg cloneでとってくる間は1スレッドでCPU100%つかって23時間かかっている。(CPUは古いんだけど)やっぱりgitとhgの速度差は大きいなぁ。

% time git clone git://git.freebsd.your.org/freebsd.git
Cloning into freebsd...
remote: Counting objects: 1949218, done.
remote: Compressing objects: 100% (463908/463908), done.
remote: Total 1949218 (delta 1491005), reused 1912163 (delta 1453959)
Receiving objects: 100% (1949218/1949218), 744.50 MiB | 1.25 MiB/s, done.
Resolving deltas: 100% (1491005/1491005), done.
198.925u 164.999s 31:31.20 19.2%        1766+1553k 0+0io 63814pf+0w
% du -sh freebsd/.git
802M    freebsd/.git
%

git cloneってmasterしかとってこないんだっけ?やけにリポジトリが小さいな。

git-flow

git-flow によるブランチの管理をみたら図がほしいなとおもったので描いた。それだけ。

もとの絵はA successful Git branching modelにあるけどちょっと凝りすぎててわかりにくかったりして。

                       release_tag   hotfix_tag
master _________________*____________*___________
                       /        \___/__ hotfix
                      /                \
                 ____/__ releaase       \
devel __________/_______\________________\_______
        \___/ feature

git-flowぜんぜんアスキー絵がきれいに表示できないのでmltermで表示したのを画面キャプチャしたのもはっとく。

「分散バージョン管理勉強会」にいってきた

dscn5241都営大江戸線の門前仲町から歩いた。暗いし方向音痴なのでかなり不安になりながらも、一発で到着できた。厚着してたせいで、汗をかいてしまった。

電源の延長ケーブルは2mのをもっていったが、ちょっと足りなくて、机の上まで届かず失敗。

WiMAXはアンテナ2本立ってだいじょうぶだった。


[最初の挨拶]d76eaf11.jpg

  • 挙手でどのユーザが多いかみてみると:
    • git多数
    • hg少数
  • スイーツいっぱい食べてください。大福はいちご・くり・バナナ・わさび(大当り)。
  • お茶もあります。

[一般発表]

1. おかもとさん - 前説 分散バージョン管理システムってなんなん?

  • さわりであっておさわりではない
  • エルシャダジャイル?
    • 「そんな担当者でだいじょうぶか?」
  • Trac Lightning
  • OSSバージョン管理システムの発展
    • CVS: 共有モデル、ファイル単位の履歴
    • Subversion: アトミックなコミット(途中で死んでもだいじょうぶ)、タスク単位での履歴管理
    • 分散バージョン管理: ブランチマージモデル、ローカルコミット、ログのリファクタリング、マージトラッキング
  • いろいろ
    • git:
      • google trendsでいちばん多い。
      • linux/ruby系につかっているひとが多い。
    • hg: mercurialは盗賊の意味もある。subversionからシェアをうばってやるぞ!といういみもあるか?。スポンサーがおおい。
      • google trends: フランス(ヨーロッパ圏)で強い?
      • リビジョンがハッシュでなくて数字もあるのでわかりやすい。TortoiseHgでwindowsでばっちり。
    • bazaar:
      • gnuプロジェクト、日本語のあつかいが完璧。

2. bleis - GitとHudsonによるきれいなリポジトリの作り方

  • ソフトウェア開発に対する思い:
    • 集中管理型だと間違った操作がすぐに全体に影響をあたえてしまう。
    • 誤操作を恐れるあまり、日付のついたディレクトリをつくってしまったり。→VCつかっている意味なし。
    • 1つのリポジトリに対して1つの作業領域しかもてない。
    • DVCSだと更新先を複数もてる。
  • DVCSだけでは解決でいない問題:
    • ビルドできなくなるとか。
  • きれいなリポジトリとは:
    • ここでは「最新版がいつでもビルド可能なリポジトリ」のこと。
  • CI(継続的統合;continuous integration)を導入する:
    • ビルドがこわれるとすぐにフィードバックがえられる。
    • 用語定義:
      • 開発者ごとのブランチ: private branch
      • 開発者ごとのリポジトリ: private repository
      • きれいなリポジトリ: central repository
    • ブランチをわける方法:
      • hookでmaterブランチにpushできないようにする。
      • ビルドに成功してもfast forward mergeできなかったら拒否する。
      • 手軽。CIを増やすだけ。
    • リポジトリを分ける方法:
      • central repositoryは外部からは取得専用に、localからのpushは許可。
      • 更新の流れ(更新の循環): centralリポジトリ→(pull)→手元のリポジトリ→(push)→中央のプライベートリポジトリ→(CI)→centralリポジトリ
      • ロールバックすれば簡単に元にもどせるのがミソ。
      • リポジトリ単位でhookを設定できるのでhookを入れる個所が多いのが利点。private repoで単体テストをやって、central repoで結合テストをするとか。
  • Q: CIのジョブはどうやって管理してるのか?
  • A: scalaで。(外野)グルービーとかがいいじゃない?
  • Q: リベースがうまくいかかいとつらい?
  • A: ?

[休憩(15分)]

3. ゆかわさん - TracLightningとTortoiseHgのゆるふわな連携

  • pythonで書かれている。
  • http://martinfowler.com/bliki/VersionControlTools.html
    • hgはgitよりもオススメで、gitよりも簡単!
    • bzrはどこいった!
  • hgはsubversionににている。
  • 1コマンド1機能
    • gitは1つのコマンドでいろんなことができるので、そのぶんオプションが多い。
  • MQはあえていうならgitのステージににている。
  • ブランチにいろいろある:
    • hg clone
    • hg bookmark
    • hg branch
    • 名前なしブランチ
  • hgsubvresionは重い。日本語ファイルはだめ。
  • hgでは拡張機能をつかう必要がある。基本機能だけだとちょっとつらい。

4. riskさん - git-svn使ってみる?

  • 職場でしかコミットできないとか、客先に行かないとできないとか。そのような場合にgit-svnが便利。
  • とりあえずおぼえておくコマンド:
    • git-svn: clone dcommit rebase
    • git: branch checkout add rm revert reset status log commit merge
  • gitとsvnの対応表:
----------------- --------------
git svn clone svn checkout
----------------- --------------
git branch svn branch
git checkout
----------------- --------------
git commit svn commit
----------------- --------------
git svn rebaes svn update
----------------- --------------
git merge ???
----------------- --------------
git svn dcommit svn commit
----------------- --------------

5. monjudohさん - Mercurialで別オリジンのリポジトリ間で同期を取る運用の仕方について

  • 素朴なやりかた:
    • hg clone django-apps
    • cd django-apps
    • hg pull --force django-static
    • mergeできるけどやったら二度とぶんりできない。pushするとくっついてっちゃう。
  • 別のやりたかた:
    • hg update djsnag-apps-head
    • hg revert statis/ -r django-static-head
    • hg commit -m "message"
    • 履歴がきえちゃうのが問題。
  • transplantをつかうやり方:
    • hg pull django-static
    • hg update django-apps-head
    • hg transplant
  • まとめ:
  • django-apps からpull
  • ldjango-stati-headへtransplant
  • django-static個人へpush
    1. hg push django-static -f -r django-static-head
  • django-staticでrebase
  • django-staticからpull
  • django-apps-headへtransplant
    1. 必要ならtransplantした分をcommit圧縮
  • django-appsにpush
  • Q: subrepostoryの方が簡単では?
  • A: 最初からできるならsubrepositoryをつかう方が簡単だけど。途中からだと。

[休憩(10分)]

[LT発表]

1. 神速さん - Git での歴史の改変方法の紹介

  • 資料はReST。その場で作成
  • rst2s5.pyでReSTからHTMLに変換。
  • add -p 部分コミット
  • rebase -i ローカルだけで 歴史の改変 順序の入れ換えがでいる

2. iwataさん - SVNユーザのためのBazaarガイド

  • バザー。バザールではない
  • concenpts:
    • version control for human beings → バカでもつかえるバージョン管理
    • better svn
      • checkoutするとbindされた状態になる。commitするとすると自動でpushされる。集中型っぽいふるまい。もちろんlocal commitもできる。

3. さぼてんさん - Hudsonからみるバージョン管理

  • pre-test commit
  • TeamCity
  • きれいなコミットができる
  • (ここでbleisさんのブランチを分ける方法と同じ絵がでてくる)

4. かわにしさん - ビューティフルなデバッグの話

  • git bisect
  • しんそくさんの「ナンパ」になった時期をしらべる。
    • 事前にtwitterの内容をcommit済で、pythonで文字列"ナンパ"を探すテストプログラムをくわせる。

[最後の挨拶]

  • - 9回目

[後片付け]

帰り道

dscn5243江東区は路上喫煙okなので、けっこう吸ってる人がおおいな。

五反田よりもずっとにぎわっている。

忘年会シーズンなので50くらいのおっさん・おばさんが大声を出して街をさまよってた。

記事検索
月別アーカイブ
アクセスカウンター

    タグ絞り込み検索
    ギャラリー
    • 今日の練習 2018-11-15
    • 今日の練習 2018-11-15
    • 今日の練習 2018-11-13
    • 今日の練習 2018-11-11
    • 今日の練習 2018-11-11
    • 今日の練習 2018-11-10
    Amazon
    楽天市場
    adby google
    LINE読者登録QRコード
    LINE読者登録QRコード
    • ライブドアブログ