申し訳ありませんが、私はGitとGitHubに非常に慣れていません。いくつかのことを読みましたが、私がやろうとしていることが完全に可能かどうかはわかりません。
基本的に、XBMCで使用されているConfluenceスキンをフォークして、ここにあるさまざまな要素を変更したいと思います。
https://github.com/xbmc/xbmc/tree/master/addons/skin.confluence
ただし、XBMCリポジトリ全体をフォークしたくないので、単純なフォークアクションでは実行できません。
これが私の一般的な要件です:
Skin.confluenceフォルダーの内容を取得して、自分のGitHubアカウントのリポジトリに配置したいと思います。
私の変更は通常、機能ではなくテーマベースであるため、アップストリームコミットを受信するには、元のXBMCリポジトリ内でリンクを維持できる必要があります。
Tbekolayによって投稿された応答のおかげで、サブツリー分割を実行して、リポジトリのskin.confluence部分のみを取得し、基本的にブランチを作成することができましたが、元のXBMCリポジトリとのリンクを維持する方法がわかりません。私の変更で自分のリポジトリにプッシュされました。
これはほとんどの場合git
で可能ですが、一般的な使用例ではないため、これを行うと(特にgit
を初めて使用する場合)、多少の荒削りになる可能性があります。
このジョブに使用するツールはgit subtree
です。
XBMCリポジトリ全体のクローンを作成することから始めます。
git clone https://github.com/xbmc/xbmc.git
cd xbmc
デフォルトでは、master
ブランチから開始します。独自のmaster
ブランチを作成したいので、master
の名前をupstream-master
に変更しましょう。
git branch -m upstream-master
次に、git subtree split
を使用して、必要な部分のみを含めます。分割された部分をupstream-skin
という新しいブランチにします。
git subtree split --prefix=addons/skin.confluence -b upstream-skin
git checkout upstream-skin
これにより、upstream-skin
の内容のみを含み、addons/skin.confluence
内のファイルを変更したコミットのみを含むフィルタリングされた履歴を持つ新しいaddons/skin.confluence
ブランチが提供されます。
それでは、リモコンをセットアップしましょう。 xbmc/xbmc.git
のクローンを作成したので、Origin
リモートはそこを指します。名前をupstream
に変更しましょう。
git remote rename Origin upstream
addons/skin.confluence
への変更を含めるために、Githubにリポジトリを作成します。例として、tbekolay/xbmc-skinを使用しますが、これを独自のリポジトリに置き換えます。このリポジトリをリモートとして追加し、upstream-skin
ブランチをそこにプッシュします。
git remote add Origin https://github.com/tbekolay/xbmc-skin.git
git fetch Origin
git Push -u Origin upstream-skin
最後に、変更を含むmaster
という新しいブランチを作成します。
git checkout -b master
git Push -u Origin master
これで、addons/skin.confluence
サブディレクトリの「フォーク」ができました。
独自のローカルおよびリモートリポジトリを処理する場合は、通常のgit
コマンドを使用できます。これは、master
ブランチ(または必要に応じて他のブランチ)で行うようにしてください。upstream-skin
ブランチではなく、アップストリームプロジェクトからのコミットのみを含める必要があります。
git checkout master
echo "My XBMC Skin" > README
git add README
git commit -m "Added README"
git Push
アップストリームリポジトリを処理するときは、git
コマンドとgit subtree
コマンドを組み合わせて使用する必要があります。新しいフィルタリングされたコミットを取得するには、3つの段階でそれを行う必要があります。
最初の段階では、upstream-master
をXBMCリポジトリの現在のバージョンに更新します。
git checkout upstream-master
git pull
新しいコミットがある場合は、これによりプルダウンされます。
次に、upstream-skin
を新しいフィルター処理されたバージョンのコミットで更新します。 git subtree
は、コミットハッシュが同じになることを保証するため、これはクリーンなプロセスである必要があります。 がupstream-master
ブランチにある間にこれらのコマンドを実行することに注意してください。
git subtree split --prefix=addons/skin.confluence \
--onto upstream-skin -b upstream-skin
upstream-skin
が更新されたので、適切と思われるようにmaster
ブランチを更新できます(マージまたはリベースのいずれかによって)。
git checkout master
git rebase upstream-skin
XBMCリポジトリは巨大であり、git subtree
コマンドはそのすべての履歴をフィルタリングするのにかなりの時間がかかることに注意してください。リモートリポジトリと対話するたびに分割サブツリーを再生成するため、かなり高価な操作。これをスピードアップできるかどうかはわかりません。
このブログ投稿 上記のコマンドについてさらに詳しく説明します。詳細については、 git-subtree
docs も参照してください。