すべてのソースコードとドキュメントを1つのgitリポジトリに保存したいと思います。私はすでにgithubページをメインプロジェクトに統合していますが、今度はgithubwikiで同じことをしたいと思います。
Githubwikiがプレーンなgitリポジトリであることを私は知っています。私の計画は、ウィキをリモートとしてメインリポジトリに追加し、すべてを1か所に保管することです。ただし、wikiリポジトリでは、すべてがルートディレクトリにあるため、メインプロジェクトが煩雑になります。
誰かがこれを以前に試したことがありますか?これを処理するための最良の方法は何ですか?
ウィキを サブモジュール として追加します。同じWikigitリポジトリがリモートとして接続されていますが、独自の.gitディレクトリを持つサブディレクトリ内にあります。
git submodule add git://github.com/you/proj.wiki
メインリポジトリのルートで、wikiリポジトリをサブモジュールとしてwiki/dirに追加します。
私はこれがすべてかなり退屈だと思います-私の意見では、github wikiはメインリポジトリのブランチである必要があります、または少なくともそれをオプションにすることが可能であるはずです。
それでも、最善の解決策は、ウィキをメインリポジトリに単純に移動することだと思います。たとえば、docs/
またはwiki
、 サブツリーマージ を使用します。たとえば、リポジトリがyou/proj
であるとすると、Wikiはgit://github.com/you/proj.wiki
になります。次に、それをメインリポジトリにマージするには、次のようにします。
git clone git://github.com/you/proj
cd proj
git remote add -f wiki git://github.com/you/proj.wiki
git merge -s ours --no-commit --allow-unrelated wiki/master
git read-tree --prefix=wiki/ -u wiki/master
git commit -m "Github wiki subtree merged in wiki/"
ウィキを機能させて、そこでの一般の貢献を歓迎することもできますが、適切と思われる場合は、メインのドキュメントでそれらを精査します。レビュー後に新しい変更をマージするには、次のようにします。
git pull -s subtree wiki master
残念ながら、他の方法で変更をマージするのはやや注意が必要です。とにかく、これを1回限りで実行してから、Wikiを閉じるか、リポジトリソースにリダイレクトする必要があります...
さらに、このアプローチの主な注意点は、(たとえば)git log wiki/Home.md
が実際にはwikiページの履歴を表示しないことです。履歴はそこにありますが、どういうわけかgit-log
はそれを追跡できません。これは 既知の制限 gitサブツリーに関連しています。これを修正する別の解決策は、履歴を保持するために、filter-branch
と定期的なマージを1回実行することです。
私にとって、メインソースツリーの一部としてウィキを使用する主な利点は、プルリクエストと変更をコードとドキュメント間で調整できることです。また、人々がオンラインで読むだけだと想定するのではなく、コードとともにドキュメントを出荷するのも簡単になります...
Wikiリポジトリを含む submodule を作成するか、通常のフェッチを実行してブランチを前後に切り替えることができます。