2011-01-12 3 views
3

に分割うち単一のリポジトリを、私は、既存のgitリポジトリがあります。gitの手術 - 多くのリポジトリ

my-repo/ 
    .git/ 
    foo/ 
    foo-content-goes-here 
    bar/ 
    bar-content-goes-here 

を私は次のリポジトリの構造を取得したい:

my-foo-repo/ 
    .git/ 
    foo-content-goes-here 

my-bar-repo/ 
    .git 
    bar-content-goes-here 

私はDetach (move) subdirectory into separate Git repositoryを見てきました。これは私が必要とすることをほとんど行います。

私は、これらのコマンドを実行しました:

$ cd path/to/my-repo/../ 
$ git clone --no-hardlinks my-repo foo-repo 
$ cd foo-repo 
$ git remote rm origin 
$ git filter-branch --tag-name-filter cat --subdirectory-filter foo \ 
     --prune-empty -- --all 
$ git reset --hard 
$ git gc --aggressive 
$ git prune 

私は、これはほとんどの作品と言います。記載されている問題:

  1. git gc --aggressiveステップは、私のリポジトリに2時間以上かかる。現在の単一のリポジトリから抽出する必要がある13のリポジトリがあります。私はこのプロセスをスクリプト化することができますが、それをスピードアップするための方法を入力していただければ幸いです。
  2. git loggitkは、新しいfoo-repoの期待されるコミットを表示します。 gitXは、期待されているコミットと、古い履歴を持つ切断されたツリーを表示します。 foo-repoのディレクトリサイズは私が予想していたよりもはるかに大きいので、おそらく私はいくつかのものが残っています。私はこのようなものを取り除く方法がわからないのですか?私はそれを押す前にそれを取り除く必要さえしますか?

答えて

3

元の職場の作業ブランチで必要なディレクトリを除外し、そのブランチだけを新しいリポジトリにプッシュすることができます。

$ cd /path/to/global-repo 

$ git branch work-foo master 
$ git filter-branch --tag-name-filter cat --subdirectory-filter foo \ 
     --prune-empty work-foo 

$ cd /path/to 
$ mkdir foo-repo 
$ cd foo-repo 
$ git init 
$ git pull /path/to/global-repo work-foo 

あなたはは、あなたがこの道を歩けばfilter-branch--allオプションを使用する必要はありませありません。

+0

JB、応答に感謝します。私は後でリポジトリの新しいコピーでこれを試し、私がどのように乗り越えるかを見ていきます。 – jabley

+0

@jableyだから、どうしたの? –

+0

私はちょうどその後会社を辞任したので、その仕事に何が起こったのか分かりません。 – jabley

関連する問題