2011-02-02 25 views
2

私は、このアプリケーションの "コア"とコアを含むクライアントブランチと、さらにはパブリックを含むマスターブランチを持つレポを持っていますすべてのアセット、スタイリング、フロントエンドビューが含まれています。私は地元のレポでそれをテストしたので、これを行うことができます。しかし、問題は私が完全にビルドされたクライアントアプリケーションから始まっている、私は、クライアントのブランチに外側にマージすると、それらの削除を他のブランチにpropogating w/oマスターブランチからいくつかのフォルダを刻みたいシステムの中核。Git - 1つのブランチからファイルを削除する方法

もっと簡単な言い方をすれば、あるブランチからファイルを削除するにはどうすればよいですか?

+2

IMOでは、サブモジュールを使用してクライアントの詳細(アセットなど)を分離する必要があります。それを手動で処理することは災害への招待です。 – jweyrich

+0

私はすべてのオプションについています。あなたが何を意味しているのかも説明してください。 – jondavidjohn

+0

私はそれを議論することができるように私は本当の答えとしてそれを掲示し、私はそれに応じて更新されます。 – jweyrich

答えて

0

私はコアのための新鮮なリポジトリを作成し、クライアントのブランチを作り直しました。これは、この構造が後から考えられたためです。だから私はこれを逆にしようとしていました。

1

バンチでファイルを削除することはできますが、ブランチを「コア」にマージする代わりに、削除したファイルを使用してブランチに「コア」バンチを追加することができます。こうすることで、それらは常に同期されますが、削除したファイルは指定されたブランチでのみ削除されます。

+0

ええ、それは私がクライアントの特定の素材を切り取ってクリアするのに必要なコアですが、それはすべてのブランチに共通の機能を更新するためにコアから外に合併するという最終目標です。影響を受けない。 – jondavidjohn

+0

ハム...私はそれが可能だとは思わない。私の知る限り、それはGitの仕組みではありません。 –

2

IMO submodulesを使用して、クライアントの詳細(アセットなど)を分離する必要があります。それを手動で処理することは災害への誘いです

クライアントごとに別々のリポジトリを作成し、コアを指すサブモジュールと、それらの間で共有されるその他のものを追加します。クライアント間で共有されないコードは、コアに属している必要はなく、他の共有サブモジュールにも属している必要はありません。これは、クライアントに対応する各(現在の)ブランチが別個のリポジトリになる必要があることを意味します。結局のところ、彼らはお互いに独立しており、それは全体のポイントです。

あなたは、このリポジトリの階層になってしまいます:

 core 
     /\ 
    /\ 
client1 client2 

UPDATE

重要:何かがうまくいかない場合は、トラブルに見舞われないように、バックアップのすべて。

すべてこれはシナリオによって大きく異なります。

1)は、様々なリポジトリにあなたの現在のリポジトリを分割し(例:コア、CLIENT1、クライアント2、など):

しかし、次は私がWindows以外のシステムで説明したものを実現する方法のアイデアがあります
cp -R original_repo copy_repo 
cd copy_repo 
git checkout desired_branch 
git filter-branch --prune-empty --subdirectory-filter desired_directory -- --all 

各クライアントディレクトリについてもこれを繰り返します。この手順の最後に、これらの各部分(コア、クライアント1、クライアント2など)ごとに別々のリポジトリを作成します。

2)

は、あなたのclient1..clientNリポジトリのそれぞれにサブモジュールとして、新たな分割コアリポジトリを追加します。

git submodule add <path_for_core_alone> 
git submodule init # Add the submodule to .git/config 
git submodule update # Clone the core repository 

3)コーヒー&利益。

+0

「サブモジュール」が何であるか説明してください。 – jondavidjohn

+0

はいいですね。でも、これを実際にどのように実装すればよいのでしょうか? – jondavidjohn

+0

@jondavidjohn:申し訳ありませんが、具体的に何を理解できませんでしたか? – jweyrich

0

私はgitユーザーではありませんが、一般的に言えば、トランクからファイルを削除してからトランクからブランチにマージするときに、その変更を元に戻すことができますマージをコミットします。チェンジセットは、将来のマージですでにブランチに統合されていると見なされます。

+1

(テストレポではもちろん) – jondavidjohn

+0

これをテストしようとしていますが、gitで「作業コピーのファイルを保持または復元してからマージを行う」正しい方法を見つけることができません。 – jondavidjohn

+0

@jondavidjohn - マジでいいのですか?ファイルの再チェックアウトやファイルの手動バックアップを元の名前に戻していますか? 'git add'のようなものを介してgitに追加していますか? gitはコミットを拒否しているか、コミットを受け付けていますが、単純にファイルを追加していませんか? –

関連する問題