2015-09-16 26 views
8

現在作業中のプロジェクトはgitリポジトリが1つに制限されています。 私の現在の作業ディレクトリは次のようなものになります。Git:サブディレクトリを同じリポジトリの別のブランチにプッシュする方法

dist/ 
    *distribution files 

src/ 
    *src files 

私たちは、自動的に何かを展開するように設定Azureのサーバーは、私たちのレポの「展開」ブランチにプッシュしているし。したがって、目的は、srcファイルをmasterに、distフォルダの内容を 'deploy'ブランチにプッシュすることです。

私が今まで行ってきたことは、マスターから分岐し、srcフォルダを削除し、展開する前にdistフォルダの内容をルートに移動することです。

私は理想的には独立したレポを持っていることは分かっていますが、現在はオプションではありません。これを行う簡単な方法はありますか?

答えて

8

git-subtreeコマンドはこれに最適です。あなたのmasterブランチからの操作を行います。あなたはdeployブランチを更新するたびにコマンド

git subtree split --branch deploy --prefix dist/ 

だけ実行されます。 dist subdir(現在のブランチの - おそらくmaster)のすべてのコミットをdeployブランチのルートにマージし、完全なコミット履歴を維持します。 distサブディレクトリの変更のみがマージされることに注意してください。コミットにdist subdirと他のファイルの両方の変更が含まれている場合は、dist subdirの変更のみが含まれます。

トリッキーな部分はインストールです。私が理解しているように、コマンドはgit 1.7.11以降に含まれています。しかし、それは "contrib"サブツリーにあるので、デフォルトではインストールされません。システムのパッケージマネージャーで "git-subtree"を検索し、パッケージがあればインストールしてください。そうでない場合や、古いバージョンのgitを使用している場合は、著者のrepoからgit-subtreeをインストールするのが最も簡単な方法です。

git clone https://github.com/apenwarr/git-subtree.git 
cd git-subtree/ 
make install 

あなたはそれがインストールされ得ればdocsで説明したように、あなたはそれを様々なクールなことを行うことができます。

+0

完全に作業しました。ありがとう。 – Lawren

+2

同じことを行う方法はありますか?しかし、ビルドファイルや 'dist'が' .gitignore'にあり、マスターから外されているのでしょうか?明確にするために、私はdeployブランチ内のdistファイルのみを必要とし、マスタにはsrcファイルしか必要としません。 – Lawren

関連する問題