2016-07-13 14 views
2

に複数のサブディレクトリを(移動させます)。私は今、複数のサブディレクトリを新しいリポジトリに分割したいと思っています。それはあなただけでは、新しいレポに出て抽出したいが、どのような複数のサブディレクトリを抽出約サブディレクトリを持っている場合git subtreeは、この容易になりますように見えますか?私はこれを行うきれいな方法を見ていない。デタッチは、私は複数のサブディレクトリが含まれているgitリポジトリを有する別のGitリポジトリ

これは私が(AlphaDirectoryでリポジトリと)今持っている構造である。

AlphaDirectory 
    AlphaSubDirectory1 
    AlphaSubDirectory2 
    BetaSubDirectory1 
    BetaSubDirectory2 

これは私が(AlphaDirectoryBetaDirectoryのそれぞれに別々のリポジトリに)必要なものです:

AlphaDirectory 
    AlphaSubDirectory1 
    AlphaSubDirectory2 
BetaDirectory 
    BetaSubDirectory1 
    BetaSubDirectory2 

これは Splitting many subdirectories into a new, separate Git repositoryに関連して、すべての3つの尋ねる質問で構造と同じその参照の質問はありませんが異なっています。

+2

あなたはベータ版のサブディレクトリ内の材料の歴史が必要ですか?リポジトリのクローニング(フォーク)を検討した後、それぞれのリポジトリから不要なマテリアルを削除することを検討しましたか?おそらくそれに対処するより良い方法がありますが、時にブルートフォースにはメリットがあります。 –

答えて

2

分割のこのタイプは、git filter-branchで実行する必要があります。

git clone AlphaDirectory BetaDirectory 

cd AlphaDirectory 
git filter-branch --tree-filter "rm -rf BetaSubDirectory*" --prune-empty -- --all 

cd ../BetaDirectory 
git filter-branch --tree-filter "rm -rf AlphaSubDirectory*" --prune-empty -- --all 
0

私は新しいリポジトリで、あなただけの完全な履歴の代わりに移動されたディレクトリに関連した歴史を保持したいと仮定しています元のリポジトリ。私は同じ問題を抱えていて、これが私のために働いたのです。

まず、元のリポジトリに2つの新支店(または二つ以上ご希望の場合)への二つのプロジェクトのための別々の歴史。元のリポジトリを汚染しないように、AlphaDirectoryのクローンでこれを行うことができます。

その後
cd AlphaDirectory 
git subtree split -P BetaSubDirectory1 -b BetaSubDirectory1Branch 
git subtree split -P BetaSubDirectory2 -b BetaSubDirectory2Branch 
cd .. 

、新しいリポジトリを作成し、リモートとして古いリポジトリを追加します(Gitのリポジトリには、複数のリモコンを持つことができ、それはOKです!)。

そして、各ブランチについて、基本的に各ブランチをマージしますが、元のサブディレクトリの外でマージされます。オリジナルのrepoのようにサブディレクトリを作成し、すべてのファイルを内部に移動してからコミットすることで修正できます。ものを移動させながら、もちろん、あなたが.gitBetaSubDirectory?ディレクトリを移動する必要はありません。

git remote remove alpharepo 

これはまた、二つ以上のサブディレクトリ(私は15を持っていた)のために働く:

git merge alpharepo/BetaSubDirectory1Branch 
mkdir BetaSubDirectory1 
<move stuff from BetaDirectory into BetaSubDirectory1> 
git commit -m "merge BetaSubDirectory1" 

git merge alpharepo/BetaSubDirectory2Branch 
mkdir BetaSubDirectory2 
<move stuff from BetaDirectory into BetaSubDirectory2> 
git commit -m "merge BetaSubDirectory2" 

そして最後には、古いリモートを削除します。

関連する問題