Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

バージョン管理#01 -Subversion編-

2,808 views

Published on

はこだてIKA 夜間勉強会で使用した資料です

Published in: Technology
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

バージョン管理#01 -Subversion編-

  1. 1. はこだてIKA 夜間勉強会 バージョン管理 - Subversion 編 - skomatsufacebook.com/comutt, @comutt, id:comutt atWare, Inc. February 28, 2013
  2. 2. 必要なもの• ネットワークに接続できるPC/Mac• Subversive プラグイン導入済 Eclipse• Google Code にアクセスするための Google アカウント
  3. 3. Google Code• URL: https://code.google.com/p/vcs01-svn/• Wiki: • https://code.google.com/p/vcs01-svn/wiki/ VCS01 • https://code.google.com/p/vcs01-svn/wiki/ SubversionLinks • リンク集は、TortoiseSVN以外にも追加し ておきます
  4. 4. バージョンとは• Ver. 1.2 や Rev. 3 など• コンテンツの「状態」を一意に表すID
  5. 5. ver.1<html></html>
  6. 6. ver.1<html></html> ver.2 <html> <body> </body> </html>
  7. 7. ver.1<html></html> ver.2 <html> <body> </body> </html> ver.3 <html> <body> <h1>HTML</h1> </body> </html>
  8. 8. 原則• コンテンツの状態が変化すると、バージョンが変化する• バージョンは、一意のID
  9. 9. バージョン管理とは• コンテンツのバージョンを管理する
  10. 10. 人力バージョン管理
  11. 11. 人力バージョン管理2/1 に作った初版。 index.html.20130201日付をつけた。
  12. 12. 人力バージョン管理 2/1 に作った初版。 index.html.20130201 日付をつけた。 2/1 に作った第2版。 index.html.20130201_02日付だとかぶるので少し変化。
  13. 13. 人力バージョン管理 2/1 に作った初版。 index.html.20130201 日付をつけた。 2/1 に作った第2版。 index.html.20130201_02日付だとかぶるので少し変化。 直前のバージョン。 index.html.bak安易に .bak にリネームした。
  14. 14. 人力バージョン管理 2/1 に作った初版。 index.html.20130201 日付をつけた。 2/1 に作った第2版。 index.html.20130201_02日付だとかぶるので少し変化。 直前のバージョン。 index.html.bak安易に .bak にリネームした。 最新版 index.html
  15. 15. 問題点バージョンの表見規則の人依存
  16. 16. • バージョンの表現規則が人依存
  17. 17. • バージョンの表現規則が人依存 • 日付(YYYYMMDDなど)
  18. 18. • バージョンの表現規則が人依存 • 日付(YYYYMMDDなど) • 人力インクリメント(_01, _02など)
  19. 19. • バージョンの表現規則が人依存 • 日付(YYYYMMDDなど) • 人力インクリメント(_01, _02など) • 合わせ技(YYYYMMDD_01など)
  20. 20. • バージョンの表現規則が人依存 • 日付(YYYYMMDDなど) • 人力インクリメント(_01, _02など) • 合わせ技(YYYYMMDD_01など)• 人依存なのでファイルごとにばらばらになったりする
  21. 21. • バージョンの表現規則が人依存 • 日付(YYYYMMDDなど) • 人力インクリメント(_01, _02など) • 合わせ技(YYYYMMDD_01など)• 人依存なのでファイルごとにばらばらになったりする • index.html.01
  22. 22. • バージョンの表現規則が人依存 • 日付(YYYYMMDDなど) • 人力インクリメント(_01, _02など) • 合わせ技(YYYYMMDD_01など)• 人依存なのでファイルごとにばらばらになったりする • index.html.01 • index.css.20130201
  23. 23. • バージョンの表現規則が人依存 • 日付(YYYYMMDDなど) • 人力インクリメント(_01, _02など) • 合わせ技(YYYYMMDD_01など)• 人依存なのでファイルごとにばらばらになったりする • index.html.01 • index.css.20130201 • main.js.test
  24. 24. • バージョンの表現規則が人依存 • 日付(YYYYMMDDなど) • 人力インクリメント(_01, _02など)★ • 合わせ技(YYYYMMDD_01など) 複数人の作業で人数が増えるほどカオスに • 人依存なのでファイルごとにばらばらになっ★統一を図るのは不可能 たりする • index.html.01 • index.css.20130201 • main.js.test
  25. 25. 問題点バージョンの「単位」が人依存
  26. 26. • ファイル単位
  27. 27. • ファイル単位 • index.html.01
  28. 28. • ファイル単位 • index.html.01 • index.css.20130201
  29. 29. • ファイル単位 • index.html.01 • index.css.20130201 • main.js.test
  30. 30. • ファイル単位 • index.html.01 • index.css.20130201 • main.js.test• ディレクトリ単位
  31. 31. • ファイル単位 • index.html.01 • index.css.20130201 • main.js.test• ディレクトリ単位 • images.bak/
  32. 32. • ファイル単位 • index.html.01 • index.css.20130201 • main.js.test• ディレクトリ単位 • images.bak/ • js.old/
  33. 33. • ファイル単位 • index.html.01 • index.css.20130201 • main.js.test• ディレクトリ単位 • images.bak/ • js.old/ • css/20130201/
  34. 34. • ファイル単位 • index.html.01★バージョンの管理単位がばらばら • index.css.20130201★特定のバージョンに一括で戻すのが困難 • main.js.test ★• ディレクトリ単位 リリース後バグが判明したので切り戻したい • images.bak/ ★過去のリリースバージョンを参照したい • js.old/ • css/20130201/
  35. 35. 問題点安全に共有できない
  36. 36. • ファイルサーバで共有
  37. 37. • ファイルサーバで共有 • 自分の作業場所: C:¥project¥hoge
  38. 38. • ファイルサーバで共有 • 自分の作業場所: C:¥project¥hoge • 共有場所: ¥¥Server¥project¥hoge
  39. 39. • ファイルサーバで共有 • 自分の作業場所: C:¥project¥hoge • 共有場所: ¥¥Server¥project¥hoge • 共有タイミングが人依存
  40. 40. • ファイルサーバで共有 • 自分の作業場所: C:¥project¥hoge • 共有場所: ¥¥Server¥project¥hoge • 共有タイミングが人依存 • 同時編集の可能性
  41. 41. • ファイルサーバで共有★複数人の作業では共有が困難 • 自分の作業場所: C:¥project¥hoge★Aさんの変更が、 • 共有場所: ¥¥Server¥project¥hoge Bさんによって上書きされてしまうリスク • 共有タイミングが人依存★ソースコードが壊れてしまうリスク • 同時編集の可能性
  42. 42. 問題点履歴管理が困難
  43. 43. • コメントで履歴管理
  44. 44. • コメントで履歴管理 • <!-- 2013/02/03 skomatsu スライドショーを追加 -->
  45. 45. • コメントで履歴管理 • <!-- 2013/02/03 skomatsu スライドショーを追加 --> • <!-- 2013/02/04 ishikawa スライドショーを修正 -->
  46. 46. • コメントで履歴管理 • <!-- 2013/02/03 skomatsu スライドショーを追加 --> • <!-- 2013/02/04 ishikawa スライドショーを修正 --> • <!-- 2013/02/05 matsudate 下記バグあり。コメントアウト -->
  47. 47. • コメントで履歴管理 • <!-- 2013/02/03 skomatsu★履歴管理がカオスに スライドショーを追加 -->★差分なんて見れたものではない • <!-- 2013/02/04 ishikawa スライドショーを修正 -->★誰が、いつ、何の変更をしたか、が不明確 • <!-- 2013/02/05 matsudate 下記バグあり。コメントアウト -->
  48. 48. 問題点作業分岐が困難
  49. 49. • 保守チーム
  50. 50. • 保守チーム • バグフィックスなどの修正
  51. 51. • 保守チーム • バグフィックスなどの修正• 新機能A開発チーム
  52. 52. • 保守チーム • バグフィックスなどの修正• 新機能A開発チーム • 機能追加開発
  53. 53. • 保守チーム • バグフィックスなどの修正• 新機能A開発チーム • 機能追加開発• 新機能B開発チーム
  54. 54. • 保守チーム • バグフィックスなどの修正• 新機能A開発チーム • 機能追加開発• 新機能B開発チーム • Aチームとは別の機能追加開発
  55. 55. ★ •複数チームが同時開発すると、 保守チーム • バグフィックスなどの修正 バッティングすることがあるので、 •コードベースを分けたい 新機能A開発チーム★分けて開発 • 機能追加開発★一本化しようとしたら、マージ地獄 • 新機能B開発チーム★マージし終わっても、あとから見ると出生不明 • Aチームとは別の機能追加開発
  56. 56. バージョン管理システム• 略してVCS(Version Control System)• ソース管理(SCM)とも言う
  57. 57. 利点
  58. 58. 利点• バージョン管理規則は使用するVCSまかせ
  59. 59. 利点• バージョン管理規則は使用するVCSまかせ• 複数人作業を手厚くサポート
  60. 60. 利点• バージョン管理規則は使用するVCSまかせ• 複数人作業を手厚くサポート• 履歴管理、閲覧、差分取得が容易
  61. 61. 利点• バージョン管理規則は使用するVCSまかせ• 複数人作業を手厚くサポート• 履歴管理、閲覧、差分取得が容易• 作業分岐、再統合が容易
  62. 62. 使っていないなら明日からすぐ使って下さい
  63. 63. 種類• 集中管理型 ref: http://www.atmarkit.co.jp/fjava/rensai4/devtool03/devtool03_1.html
  64. 64. 種類• 分散型 ref: http://www.atmarkit.co.jp/fjava/rensai4/devtool03/devtool03_1.html
  65. 65. 種類
  66. 66. 種類• 集中管理型(一例) • フリー: Subversion, CVS • 商用: Perforce, Team Foundation Server Clear Case, Visual SourceSafe
  67. 67. 種類• 集中管理型(一例) • フリー: Subversion, CVS • 商用: Perforce, Team Foundation Server Clear Case, Visual SourceSafe• 分散型(一例) • フリー: Git, Mercurial, Bazaar, Monotone • 商用: BitKeeper, Code Co-op, Synergy
  68. 68. Subversion集中管理型リポジトリのデファクトスタンダード
  69. 69. 仕組み作業コピー リポジトリ
  70. 70. 仕組み ①(最新版)取得作業コピー リポジトリ
  71. 71. 仕組み ①(最新版)取得作業コピー リポジトリ ②変更
  72. 72. 仕組み ③登録 ①(最新版)取得作業コピー リポジトリ ②変更
  73. 73. 仕組み ③登録 ①(最新版)取得作業コピー リポジトリ ②変更• 登録・・・コミット
  74. 74. 仕組み ③登録 ①(最新版)取得作業コピー リポジトリ ②変更• 登録・・・コミット• 取得・・・チェックアウト、アップデート
  75. 75. 基本的な使い方
  76. 76. 基本的な使い方1.チェックアウト/アップデート • 作業ディレクトリに最新版を取得
  77. 77. 基本的な使い方1.チェックアウト/アップデート • 作業ディレクトリに最新版を取得2.変更 • 作業ディレクトリ内のファイルを修正
  78. 78. 基本的な使い方1.チェックアウト/アップデート • 作業ディレクトリに最新版を取得2.変更 • 作業ディレクトリ内のファイルを修正3.コミット • 作業ディレクトリ内のファイルをリポジト リに登録
  79. 79. リポジトリ
  80. 80. リポジトリ • コンテンツが履歴管理されている
  81. 81. リポジトリ • コンテンツが履歴管理されている • 変更をコミットすると、 自動的にバージョン(リビジョン)が上がる
  82. 82. 作業コピー
  83. 83. 作業コピー• リポジトリと紐付いたローカルディレクトリ
  84. 84. 作業コピー• リポジトリと紐付いたローカルディレクトリ• リポジトリに意図的にコミットするまで、 コンテンツは同期されない
  85. 85. 作業コピー• リポジトリと紐付いたローカルディレクトリ• リポジトリに意図的にコミットするまで、 コンテンツは同期されない• コミットせずに取り消すこともできる
  86. 86. 作業コピー• リポジトリと紐付いたローカルディレクトリ• リポジトリに意図的にコミットするまで、 コンテンツは同期されない• コミットせずに取り消すこともできる• 作業コピーを消しても、リポジトリは消えな い
  87. 87. Subversionとは• 元々 CollabNet, Inc. が開発したVCS• CVSの置き換えを狙って作られた• 2010年にApacheトッププロジェクト• Apacheライセンス(オープンソース)• Win/Mac/Linux など、幅広いプラットフォー ムで動作
  88. 88. GUIクライアント• Windows • TortoiseSVN など• Mac • Versions, Cornerstone など• Linux • Esvn, RabbitVCS など
  89. 89. IDE連携• バージョン管理連携機能がついたIDEでは、Subversionは対応済みのことが多い • Eclipse • Visual Studio • Xcode • etc..
  90. 90. Subversion 初歩
  91. 91. 1. チェックアウト
  92. 92. 1. チェックアウト• チェックアウトに必要なもの
  93. 93. 1. チェックアウト• チェックアウトに必要なもの • URL
  94. 94. 1. チェックアウト• チェックアウトに必要なもの • URL • https://...
  95. 95. 1. チェックアウト• チェックアウトに必要なもの • URL • https://... • svn://...
  96. 96. 1. チェックアウト• チェックアウトに必要なもの • URL • https://... • svn://... • file://...
  97. 97. 1. チェックアウト• チェックアウトに必要なもの • URL • https://... • svn://... • file://... • (ユーザ)
  98. 98. 1. チェックアウト• チェックアウトに必要なもの • URL • https://... • svn://... • file://... • (ユーザ) • (パスワード)
  99. 99. URL?サーバが必要?
  100. 100. YESおおむね、必要。が、無くてもできる。
  101. 101. file://...ローカルディレクトリや、共有ディレクトリに使える。
  102. 102. 今からバージョン管理 始めるならとりあえず file://... で始めるのが楽→ あとからサーバ移行もできる
  103. 103. Windows しかないなら TortoiseSVN で全部完結
  104. 104. なので
  105. 105. バージョン管理していないなら 明日からすぐ!
  106. 106. TortoiseSVNの良い 良い参考サイト紹介TortoiseSVNの基本的な使い方 その1http://d.hatena.ne.jp/sinsoku/20100405/1270397683もうファイル管理で困らない! デザイナーのためのSubversion/TortoiseSVN入門http://techblog.yahoo.co.jp/tips/subversion-for-designers-01/デザイナーのためのSubversion/TortoiseSVN入門2-Subversionでのフォルダーの命名・構成とTortoiseSVNの便利な使い方-http://techblog.yahoo.co.jp/tips/subversion-for-designers-02/
  107. 107. TortoiseSVNの良い 良い参考サイト紹介 Google Code の Wiki にリンク集として掲載してますTortoiseSVNの基本的な使い方 その1http://d.hatena.ne.jp/sinsoku/20100405/1270397683もうファイル管理で困らない! デザイナーのためのSubversion/TortoiseSVN入門http://techblog.yahoo.co.jp/tips/subversion-for-designers-01/デザイナーのためのSubversion/TortoiseSVN入門2-Subversionでのフォルダーの命名・構成とTortoiseSVNの便利な使い方-http://techblog.yahoo.co.jp/tips/subversion-for-designers-02/
  108. 108. 1. チェックアウト 脱線 したので再掲
  109. 109. 1. チェックアウト 脱線 したので再掲• チェックアウトに必要なもの
  110. 110. 1. チェックアウト 脱線 したので再掲• チェックアウトに必要なもの • URL
  111. 111. 1. チェックアウト 脱線 したので再掲• チェックアウトに必要なもの • URL • https://...
  112. 112. 1. チェックアウト 脱線 したので再掲• チェックアウトに必要なもの • URL • https://... • svn://...
  113. 113. 1. チェックアウト 脱線 したので再掲• チェックアウトに必要なもの • URL • https://... • svn://... • file://...
  114. 114. 1. チェックアウト 脱線 したので再掲• チェックアウトに必要なもの • URL • https://... • svn://... • file://... • (ユーザ)
  115. 115. 1. チェックアウト 脱線 したので再掲• チェックアウトに必要なもの • URL • https://... • svn://... • file://... • (ユーザ) • (パスワード)
  116. 116. 皆さんにはすでにしていただきました
  117. 117. 作業コピーを見てみよう• 手順通りにチェックアウトしたなら • Windows の方 • C:¥tech-study¥workspace¥sample-web • Mac の方 • ~/Documents/tech-study/workspace/sample- web
  118. 118. 作業コピーを見てみよう
  119. 119. 作業コピーを見てみよう★.svn ディレクトリがある = 作業コピー (OSの設定によっては表示されません)
  120. 120. 2. 変更
  121. 121. 2. 変更• Eclipse で、それぞれHTMLファイルを作成し てください
  122. 122. 2. 変更• Eclipse で、それぞれHTMLファイルを作成し てください• testN.html (Nは数字)というファイル名で作 成してください
  123. 123. (1) public_html の上で右クリック (2) New をクリック (3) File をクリック
  124. 124. (1) ファイル名を入力 (2) Finish をクリック
  125. 125. なにか、適当なHTMLを入力して ? がついてる 保存してください= まだバージョン管理されていない
  126. 126. 3. コミット
  127. 127. 3. コミット• 作成したHTMLをコミットしてください
  128. 128. (1) sample-web を右クリック (3) リポジトリーと同期をクリック (2) Team をクリック
  129. 129. (1) + アイコンでツリーを展開 (3) 赤い方の矢印を クリックしてコミット(2) 新たに test0.html をバージョン管理下 におくことを意味する
  130. 130. (1) コミットメッセージを入力(2) 自分が作成したファイルが追加対象になってることを確認 (3) OKをクリック
  131. 131. コミットメッセージ? なにそれおいしいの?
  132. 132. 無いと困る
  133. 133. コミットメッセージ
  134. 134. コミットメッセージ• コミット時に、任意のコメントを書ける
  135. 135. コミットメッセージ• コミット時に、任意のコメントを書ける• そのコミットが、何の意図を持ってしたのかなどをコメントする
  136. 136. コミットメッセージ• コミット時に、任意のコメントを書ける• そのコミットが、何の意図を持ってしたのかなどをコメントする • 後から履歴を追うときに大変重要
  137. 137. コミットメッセージ• コミット時に、任意のコメントを書ける• そのコミットが、何の意図を持ってしたのかなどをコメントする • 後から履歴を追うときに大変重要 • コミットメッセージがないと、 「この変更は何なの?」となりやすい
  138. 138. コミットメッセージの例
  139. 139. コミットメッセージの例• BUG xxx を修正
  140. 140. コミットメッセージの例• BUG xxx を修正• ストーリー yyy を実装
  141. 141. コミットメッセージの例• BUG xxx を修正• ストーリー yyy を実装• チケット zzz を完了
  142. 142. コミットメッセージの例• BUG xxx を修正• ストーリー yyy を実装• チケット zzz を完了• ○○を実装。 実はまだ△△機能がIEで動かない。
  143. 143. コミットメッセージの例• BUG xxx を修正• ストーリー yyy を実装• チケット zzz を完了• ○○を実装。 実はまだ△△機能がIEで動かない。 補足情報もいれると、 コミットログの情報量が増えて良い
  144. 144. 4. 履歴を見る
  145. 145. 4. 履歴を見る• Eclipse で、 sample-web プロジェクトの 履歴を確認してください
  146. 146. (1) Java パースペクティブを選択
  147. 147. (1) sample-web を右クリック (3) リソース・ヒストリーを表示 をクリック (2) Team を選択
  148. 148. リビジョン履歴が表示される
  149. 149. リビジョン履歴が表示される 該当リビジョンでの変更ファイル
  150. 150. 5. さらに変更を加える
  151. 151. 5. さらに変更を加える• 追加したファイル(testN.html)に、 何か変更を加えてください
  152. 152. 5. さらに変更を加える• 追加したファイル(testN.html)に、 何か変更を加えてください • <p>一行追加</p> みたいなのでいいです
  153. 153. (1) 何か変更する(2) 変更があることを意味する 「>」印がつく
  154. 154. (1) sample-web を右クリック (3) リポジトリーと同期をクリック (2) Team をクリック
  155. 155. (1) ツリーを展開(2) コミット可能な変更があることを意味する「→」マークがついている (3) sample.html を ダブルクリックする
  156. 156. ローカルファイルの状態
  157. 157. リポジトリ最新に比べて、 一行追加されている リポジトリ最新の状態
  158. 158. コミットボタンをクリック
  159. 159. コミットメッセージの入力 OKをクリック
  160. 160. 6. 差分を見る• 追加した testN.html を右クリックし、 Team -> リソース・ヒストリーを表示 をクリックしてください• 選択したリビジョン間の差分を見ることがで きます • 比較したいリビジョンをCtrl/Cmdを押しな がら選択 • Compare with Each Other
  161. 161. 一歩進んだバージョン管理
  162. 162. ブランチ• 日本語訳: 枝• ソースコードを枝分かれさせたいとき• 機能単位、作業単位で枝分けしたりする• メインの枝は幹(trunk)
  163. 163. Subversion でのブランチ• 以下のようなツリー構造が推奨されている リポジトリ ├── trunk │ └── trunk のソースコード └── branches ├── branch1 │ └── branch1 のソースコード └── branch2 └── branch2 のソースコード• branches 配下に、各ブランチを格納
  164. 164. タグ• 洋服などについてる「タグ」と同じ意味• ラベルとも言える• 特定のバージョンに名前を付けたいときに使う
  165. 165. Subversion でのタグ• 以下のようなツリー構造が推奨されている リポジトリ ├── trunk │ └── trunk のソースコード └── tags ├── tag1 │ └── tag1 のソースコード └── tag2 └── tag2 のソースコード• tags 配下に、各タグを格納
  166. 166. ブランチの活用例1• trunkはメインストリーム版• branchはベータ版
  167. 167. ブランチの活用例2• trunkはFIXしたソースコードのみ• 開発はすべてbranchで行う• 開発完了したbranchはtrunkにマージする
  168. 168. 弊社での例• trunk・・・メインストリーム、FIX済み専用• branch・・・機能ごと、BUGFIXごとにブラ ンチ• tag・・・リリースバージョンごとにタグ
  169. 169. リポジトリ├── trunk├── branches│ ├── redmine-1│ ├── redmine-2│ └── redmine-3└── tags ├── release-1.0.0 ├── release-1.0.1 └── release-1.1.0 • チケット駆動開発 • どのブランチでどの機能開発・BUGFIXをし ているか一目瞭然 • ソースが混在しない
  170. 170. おわり• 2時間でハンズオン混みで、Subversion によるバージョン管理の魅力を お伝えするのはなかなか難しいですね(私の講師力が低いとも)。• Git編もやりたいのですが、 それよりももっと Subversion を活用した例、 バックアップなどの運用ノウハウなど聞きたい方が居れば、 リクエストください。• お疲れさまでした。

×