こんにちはNEKOGETです。
githubにあがっているもので、特定のフォルダの中だけコードを追従したい場合とかありますよね。
具体的に言うと…..
フレームワーク(CodeIgniter)のgitレポジトリの中にドキュメントが入っていて、これの日本語化をしたい。
ソースコードはいらん。ドキュメントだけの変更を追いたい!
こういう場合です。
しばらく方法を悩んでいたんですが、できました。
方法としては次の通りです。
{フォルダ名}のところは適当に置き換えてください。
(1) gitレポジトリを cloneします。
(2)cloneしたフォルダを{フォルダ名}という名前でコピーします。
(2)のコピーしたフォルダの中でフォルダを指定してgitの情報をフィルターをかけます。
$ git filter-branch -f --subdirectory-filter {フォルダ名} HEAD
そうすると、指定したフォルダの履歴だけがフィルタリングされ、そのフォルダだけのレポジトリができます。
そうやってできた抽出レポジトリをcloneして、(3)作業用のレポジトリを作ります。
(3)の作業用レポジトリをリモート(今回試したのはgithub)にpushします。
ここまでで、取り込むための環境ができました。
追従元の変更の取り込み
(2)のgit filter branchを実行した{フォルダ名}を削除します。
(1)の最初に作った追従元からつくったcloneで、git pullを実行し、変更を取り込みます。
それをコピーし、{フォルダ名}を作り直します。git filter-branchを実行し、抽出したレポジトリを作成します。
つまりは(2)を作り直します。
(3)作業用レポジトリは、抽出後の(2){フォルダ名}から変更をmergeします。
つまり抽出されたgit レポジトリからmergeをすることによって、全部入りのオリジナルの変更をとりこむわけです。
(2)は取り込む作業をする都度削除します。した図のピンクのレポジトリがそのフォルダになります。
日1回程度取り込めれば良いので、
shを用意しcronで定期実行することにしました。
これで追従したいレポジトリから変更を取り込めます。
参考にさせてしただいたサイト : http://subtech.g.hatena.ne.jp/secondlife/20101108/1289221814
git filter-branchをここで初めて知りました。
CodeIgniter本家のレポジトリから、ユーザーガイドだけを抽出したレポジトリです。
3.0以降のユーザガイドの翻訳に利用しようと思います。
https://github.com/NEKOGET/ci_user_guide_src
(注 : 2014.1.1 レポジトリ名を変更しました)
もっとスマートでうまいやり方があればぜひ教えてください(=人=)