2011-08-22 17 views
10

私はgitで管理されているdjangoプロジェクトを持っています。私は私のホストにそれを押してgitです。さて、私はディレクトリの1つ(すべてのサブディレクトリを含む)を別のgitリポジトリにプッシュできるようにしたい。それが可能なら、どうすれば可能ですか?別のgitリポジトリ内にgit repoを置くことは可能ですか

編集:そのディレクトリをgit repoそのものにします。

答えて

21

あなたはsubmodulesのためのgitのサポートで見ることができます。 2番目のリポジトリをサブプロジェクトとしてメインプロジェクトに追加します。以下のようなコマンドで: - あなたはオーバープッシュすることができ、トランスポートを使用するようにoriginを変更することができ、それがなかったかのようにプッシュし

git submodule add git://wherever/blah.git library-code 
git commit -m "Added a new submodule called 'library-code'" 

あなたはlibrary-codeサブディレクトリに変更し、それは親のリポジトリが存在しないかのようです完全に独立しています。

サブモジュールを特定のバージョンにするように指定するには、サブモジュールに変更し、git checkoutを使用して正しいバージョンに切り替える必要があります。そして、あなたが戻ってメインリポジトリと段階まで変更して、新しいサブモジュールのバージョンをコミット:

git add library-code 
git commit -m 'Change the submodule version' 

メインリポジトリのツリーがちょうど、サブモジュールは、であるべきバージョンを格納しますので、メインリポジトリを押すとそれは、サブモジュール内のいずれのファイルもプッシュしていません。

:歴史を維持しながら、この答えで説明したように、あなたは、歴史を書き換えるためにあなたの元のリポジトリとユーザー git filter-branchのクローンを作成する必要があります、このサブディレクトリをオフに分割するために

これを新しく作成したリポジトリGitHubリポジトリにプッシュして元のプロジェクトに戻し、サブディレクトリを削除し、前述のようにサブモジュールに置き換えることができます。

gitの概念に慣れていないなら、これは難しいかもしれません - あらかじめgitサブモジュールを読むことをお勧めします。

+2

私はすでに私のサブディレクトリにコードを持っているので、それらをgit repoに変換し、新鮮なリモートリポジトリ(githubなど)にプッシュしたいと思います。あなたはそれをする例を挙げることができますか?私はこれらのことでとても初心者であることをお詫びします:) – yasar

+1

サブディレクトリ内のすべての履歴を保存しますか? –

+0

他のリモートレポに大きなリポジトリをプッシュすると、サブモジュールはどうなりますか?サブモジュールのファイルも含まれていますか? – yasar

1

特定のディレクトリに変更を加え、変更を加えてコミットしてプッシュすると、そのディレクトリだけを効果的に「プッシュ」します。

他のGitリポジトリには、プッシュしたいディレクトリのみがあり、それを自分自身でレポとして持ちたいのであれば、Git Submodulesを見ることができます。

1

gitサブモジュールを調べましたか?これは、gitリポジトリが完全に独立した状態で、きちんとネストできるようにします。

これは、メインプロジェクトを混乱させることなく、プッシュ/プルと異なるコミットツリー+ログ用の別のリモートURLを持つサブディレクトリを持つことができることを意味します。

https://git.wiki.kernel.org/index.php/GitSubmoduleTutorial

関連する問題