Gitリポジトリに空のブランチを作る
動機
Githubに、Redmineの用語集プラグイン(redmine_glossary)をフォークして修正を加えたものを置いています。
用語集プラグイン(glossary)をRedmine 3.0で動くようにしてみる - torutkの日記
Redmineの次回メジャーバージョンアップ版となる4.0.0では、ベースとなるRuby on Railsのバージョンが4.2から5.1に更新されます。これに伴い、プラグインに含まれるRails 4以前のDeprecatedとなり削除された機能を利用しているコードは修正を余儀なくされます。
そこで、redmine_glossaryのコードを再構築(リファクタリング程度の修正ではなく)しようと思います。再構築にあたっては、いったん既存コードは空にして、小さいコードから出発していきたいところです。ただし、Gitリポジトリは既存のものを使い続けたいとします*1。
ふつうにgitのブランチを作ると、一番遡っても初期コミットの状態のブランチ(初期コミットで追加されたファイル群が存在する)となってしまいます。最初が空ならよかったのですが、フォークしてきたリポジトリは初期コミットがglossary_pluginのとあるバージョンのもの全体となっています。
そこで、空の新規ブランチを作れないか?というのが動機です。
捜索
検索ワード[git ブランチ 空]でぐぐってみたところ、意外とたくさん関連する情報が出てきました。
トップに出てきたブログはredmineプラグイン作者*2でもある@akiko-pusuさんのものでした!
orphanブランチを作ると、空のブランチとして利用できます。
orphanブランチ
redmine_glossaryプラグインのgitクローンを生成します。そして、--orphanオプションを指定してチェックアウトします。ここではブランチ名をreconstructとします。
work$ git clone https://github.com/torutk/redmine_glossary.git work$ cd redmine_glossary redmine_glossary$ git checkout --orphan reconstruct redmine_glossary$
この時点で作業ツリーにはmasterのファイル群がそのまま存在します。作業ツリーの状態を確認します。
redmine_glossary$ git status On branch reconstruct No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: README.ja.rdoc new file: README.rdoc :
全てのファイルが新規扱いとなっており、コミットは1件もない状態ということが分かります。
空のブランチで開始したいので、master群のファイルがステージングされているのが邪魔です。また、作業ツリーに残っていても面倒です。
redmine_glossary$ git reset --hard redmine_glossary$ ls -a ./ ../ .git/ redmine_glossary$
これで空のブランチができました。
ブランチが生成されていない?
redmine_glossary$ git branch -a master remotes/origin/HEAD -> origin/msater remotes/origin/master
ブランチ一覧を見ると、ophanブランチが存在していません。なにか1つコミットしないとダメなようです。
README.rdocをコミットします。
- README.rdoc
= redmine_glossary This is a plugin for Redmine to create a glossary that is a list of terms in a project. To adapt Redmine 4.0(Rails 5.1), reconstruct a glossary plugin from scratch.
redmine_glossary$ git add README.rdoc redmine_glossary$ git commit -m "orphan branch for reconstructing from scratch" : redmine_glossary$ git branch master * reconstruct
ブランチに登場しました。これをリモートにプッシュします。
redmine_glossary$ git push -u origin reconstruct :
リモートのブランチをクローン
glossaryプラグインをゼロから開発します。Redmine 4.0開発版をチェックアウトし、pluginsディレクトリの下で先ほど作成したreconstructブランチをクローンします。
plugins$ git clone -b reconstruct https://github.com/torutk/redmine_glossary.git :
README.rdocファイルしかないので、プラグインの雛形を上書き生成します。
plugins$ bundle exec rails generate redmine_plugin redmine_glossary create plugins/redmine_glossary/app create plugins/redmine_glossary/app/controllers create plugins/redmine_glossary/app/helpers : (中略) conflict plugins/redmine_glossary/README.rdoc Overwrite /mnt/d/toru/Documents/study/redminew/plugin_dev/trunk_glossary_dev/plugins/redmine_glossary/README.rdoc? (ent r "h" for help) [Ynaqdh] n skip plugins/redmine_glossary/README.rdoc create plugins/redmine_glossary/init.rb :
README.rdocが存在するため、プラグインの雛形生成時に衝突が検出されます。nで雛形では上書きせずにスキップさせます。