gitを使って、レポジトリの一部抽出forkしてみました

27
gitを使って、 レポジトリの一部抽出forkしてみました 宮川 貴子@NEKOGET CodeIgniter® The CodeIgniter mark is owned and may be registered by EllisLab, Inc . CodeIgniterのユーザーガイドな話でもあります

description

gitを使って、レポジトリの一部抽出forkしてみました

Transcript of gitを使って、レポジトリの一部抽出forkしてみました

Page 1: gitを使って、レポジトリの一部抽出forkしてみました

gitを使って、  レポジトリの一部抽出forkしてみました

宮川 貴子@NEKOGET

 CodeIgniter®    The  CodeIgniter  mark  is  owned  and  may  be  registered  by  EllisLab,  Inc          .

CodeIgniterのユーザーガイドな話でもあります

Page 2: gitを使って、レポジトリの一部抽出forkしてみました

今日のお話

GitでCodeIgniterのユーザガイドを抽出したお話をします  

(1)やりたいこと、やっちゃったことのお話  –  ユーザガイドだけをforkしたい  –  本家の変更は当然追跡、mergeしたい  –  安定運用  

(2)蛇足なお話      

Page 3: gitを使って、レポジトリの一部抽出forkしてみました

お話する人

宮川 貴子  TwiFer  @NEKOGET  Facebook  hFps://www.facebook.com/NEKOGET  ネコネットデザイン事務 hFp://works.nekoget.net      

       Gitと初めて出会ったのは、Git勉強会(2008年)          hFp://pneskin2.nekoget.com/press/?p=146  

 CodeIgniterと知り合い、楽しくコードを書いているうちに、5年を経過しました。  CodeIgniterへの愛に溢れた生活を送っています。  FuelPHPのドキュメント日本語化をやってます。    最近はCakePHP2とも仲良くしてます(^-­‐^)v  

Page 4: gitを使って、レポジトリの一部抽出forkしてみました

ユーザガイドだけをforkしたい

やりたい事    ユーザガイドだけをforkしたい!    抽出したい!  

 forkした後…  

本家の変更分はちゃんとmergeしたい!  変更は追いかけたい!  

Page 5: gitを使って、レポジトリの一部抽出forkしてみました

レポジトリの中の一部だけを追跡

Page 6: gitを使って、レポジトリの一部抽出forkしてみました

問われるMY検索能力……. 検索で使ったキーワード  •  「Git」  •  「Git  特定のフォルダだけ」  •  「Git  特定のフォルダ 抽出」  

Gitマニュアルから発見  •  Git  マニュアル    

•  hFp://git-­‐scm.com/docs/git-­‐filter-­‐branch    

使用例を素敵なブログから発見  •  git  の特定ディレクトリをコミットログ等込みで別プロジェクトへ移動  

–  hFp://subtech.g.hatena.ne.jp/secondlife/20101108/1289221814  

Page 7: gitを使って、レポジトリの一部抽出forkしてみました

レポジトリの中の一部だけを抽出

Git  マニュアル hFp://git-­‐scm.com/docs/git-­‐filter-­‐branch    

Page 8: gitを使って、レポジトリの一部抽出forkしてみました

git-­‐filter-­‐branchの機能

「各リビジョンにカスタムフィルタを適用し、<rev-­‐list  op_ons>に記載されている枝を書き換えることで、Gitの改訂履歴を書き換えることができます」  

Git  マニュアル hFp://git-­‐scm.com/docs/git-­‐filter-­‐branch  参照  Google  翻訳そのまんまですが…..  

コミットログもソースコードも指定したフォルダだけになるようにフィルターをかけてしまうことができてしまいます。  

Page 9: gitを使って、レポジトリの一部抽出forkしてみました

これが….

Page 10: gitを使って、レポジトリの一部抽出forkしてみました

こうなる!

ローカルレポジトリの中身は、  ユーザガイドのフォルダの中身だけになります。  

Page 11: gitを使って、レポジトリの一部抽出forkしてみました

実践

CodeIgniter本体のclone    

$  git  clone  [email protected]:EllisLab/CodeIgniter.git  

Page 12: gitを使って、レポジトリの一部抽出forkしてみました

Clone直後

CodeIgniter全体のフォルダがcloneされます。  

$  git  branch  *  develop

ブランチを確認。  開発最新のブランチ、developを確保  

Page 13: gitを使って、レポジトリの一部抽出forkしてみました

抽出

user_guide_srcの部分が、フォルダの指定になります。  

$  git  filter-­‐branch  -­‐f  -­‐-­‐subdirectory-­‐filter  user_guide_src  HEAD

 実行後、 user_guide_srcの中身だけの状態になります。  

$git  log ログもuser_guide_srcのものだけになっています。  

Page 14: gitを使って、レポジトリの一部抽出forkしてみました

本家レポジトリの変更をmergeしたい

抽出後のフォルダ内で、git  pullをした結果、  なんかおかしい……    •  ファイルが、user_guide_srcとcodeigniter丸ごとの

それと混ざってる…..  •  $  git  status  してみたり、git  logしてみたりしてみた

が、README.rstが変更されていたり…..  

•  どうする?

$  git  pull

Page 15: gitを使って、レポジトリの一部抽出forkしてみました

こうしたよ!

抽出後のローカルレポジトリから直接本今朝分をgit  pullすることは無理。    1.  抽出前のローカルレポジトリでgit  pullする。  2.  抽出する  3.  作業レポジトリを抽出レポジトリからcloneする。  4.  作業レポジトリへ、抽出レポジトリから差分を

mergeする。  

Page 16: gitを使って、レポジトリの一部抽出forkしてみました

構成

•  GitHub  CodeIgniter  リモートレポジトリ  –  hFps://github.com/EllisLab/CodeIgniter  

•  ローカル全部入りレポジトリ  •  ローカル抽出レポジトリ  •  ローカル作業用レポジトリ  •  GitHub作業用レポジトリ  

–  hFps://github.com/NEKOGET/ci_user_guide_src  

Page 17: gitを使って、レポジトリの一部抽出forkしてみました

抽出レポジトリを毎回作る

抽出レポジトリは本家差分を取得する都度生まれ変わる

     ↑  都度cloneするのは大変なので  抽出するためのレポジトリは  ローカルcopyで作っちゃう  git-­‐filter-­‐branchコマンドで、  ユーザガイドだけを抽出    

Page 18: gitを使って、レポジトリの一部抽出forkしてみました

抽出レポジトリの続き

•  抽出レポジトリは、作業用レポジトリに本家差分を取り込むだけの役割

     ↑  ユーザガイドの翻訳作業はこのレポジトリ  でブランチを作って行っています。  そしてそのコードはgithubで公開しています。    

Page 19: gitを使って、レポジトリの一部抽出forkしてみました

抽出レポジトリのfork?

本家のコミットログもきちんと入っているログhFps://github.com/NEKOGET/ci_user_guide_src/commits/develop_japanese/  

Page 20: gitを使って、レポジトリの一部抽出forkしてみました

全体像

抽出用のフォルダは毎回、  全部入りのローカルレポジトリから  コーピーして作り直しています    つまり差分を取得する都度  (1)削除  (2)コピー  (3)抽出  を繰り返します。

Page 21: gitを使って、レポジトリの一部抽出forkしてみました

抽出レポジトリ更新の自動化

 #!/bin/sh     cd  {全部入りCodeIgniterレポジトリ}     git  pull     rm  –irf {抽出レポジトリのパス}          cp  –r  {全部入りCodeIgniterレポジトリ}    {抽出レポジトリのパス}     cd  {抽出レポジトリのパス}          git  filter-­‐branch  -­‐f  -­‐-­‐subdirectory-­‐filter  {抽出レポジトリのパス}  HEAD

Cronで定期的に作り直しています

Page 22: gitを使って、レポジトリの一部抽出forkしてみました

蛇足

•  蛇足的な事…..  

Page 23: gitを使って、レポジトリの一部抽出forkしてみました

CodeIgniter  ユーザガイド 日本語訳について

ユーザガイドのライセンス  本家に問い合わせました  hFps://github.com/EllisLab/CodeIgniter/issues/2797    

回答

「ライセンスはないよー。誰でも翻訳できちゃうよ」という回答をいただきました。  

Page 24: gitを使って、レポジトリの一部抽出forkしてみました

CodeIgniter2日本語ユーザガイドについて  

CodeIgniterユーザ会  日本語版レポジトリ  hFps://github.com/codeigniter-­‐jp/ci-­‐ja    流用可否については不明。  ライセンスは無い状態    

 

TwiFerより  hFps://twiFer.com/NEKOGET/status/418046859542679552  

Page 25: gitを使って、レポジトリの一部抽出forkしてみました

とりあえず始める事はとても大事なこと。

現在翻訳中レポジトリ  •  hFps://github.com/NEKOGET/ci_user_guide_src  

翻訳したユーザガイドを読みたい場合  •  hFp://pneskin2.nekoget.com/codeigniter/3/user_guide/index.html    

Page 26: gitを使って、レポジトリの一部抽出forkしてみました

CodeIgniterの情報をもっと増やしたい

–  CodeIgniterの開発は止まっていない  –  本家にはマイルストーンにv.4.0.xがあるよ!  

•  hFps://github.com/EllisLab/CodeIgniter/issues/milestones  

 

v.4.0.x→

Page 27: gitを使って、レポジトリの一部抽出forkしてみました

☆ご清聴ありがとうございました☆

参考LINK  •  Git  

–  hFp://git-­‐scm.com  

•  Try  Git  –  hFp://try.github.io/levels/1/challenges/1  

•  git  の特定ディレクトリをコミットログ等込みで別プロジェクトへ移動  –  hFp://subtech.g.hatena.ne.jp/secondlife/20101108/1289221814  

•  Git勉強会(動画)  –  hFp://pneskin2.nekoget.com/press/?p=146  

•  CodeIgiter日本ユーザー会の翻訳レポジトリ  –  hFps://github.com/codeigniter-­‐jp/ci-­‐ja