2011-01-11 6 views
2

私は現在Visual Studioを使用してC#でアプリケーションを書いています。そのため、VS2010はプロジェクトディレクトリを内部に持つSolutionディレクトリを作成しました。 だから私の階層は次のようである:溶液中のファイルを除いて、追跡される今の時点でgit repoをディレクトリツリーの下の階層に移動するにはどうすればいいですか?

Solution 
    Project 1 
    .git 
    Project 2 

:私がやりたいのは何

Solution 
    .git 
    project1 
    project2 

はこのようにそれを作るですプロジェクト2(例えばproject.slnのようなもの)。 履歴を書き直すことなくこれを行う方法はありますか?

ありがとうございます。

答えて

3

これは#[email protected]にSethRobinsonによって、実際にあったが、ここで彼の解決策でした。

ステップ1、サブディレクトリに全体のgitツリーを移動:

mkdir .solution; 
mv Solution .solution/Project1; 
mv .solution Solution; 
mkdir Solution/Project2 

ステップ2を、ルートにサブディレクトリを促進するためにgitを伝える:

cd Project1; 
mkdir .foo; 
mv * .foo; 
cd .foo; 
mv Project1/* ..; 
cd ..; 
rm -rf .foo; 
git add -A .; 
git commit -a -m "Promoted Project1 to root" 
+0

解決策を見つけて投稿してくれてありがとう。私を助けてくれました! –

0

プロジェクト2がまったく追跡されない場合、私はあなたが望むところにそれを移動できると思います。 gitはツリー構造とは別のコンテンツへの変更を追跡するので、移動したばかりのファイルは表示されますが、コンテンツは変更されません。

+0

いいえ、動作しませんでした。プロジェクト内のファイルを新しいファイルとして検出します。 – edude05

0

git filter-branch --subdirectory-filter Project\ 1 HEAD

これは履歴を調整します。

私はそうのようにそれをテストした:

root/ 
    .git 
    folder/ 
    index 

git filter-branch --subdirectory-filter folder HEAD

となった:

root/ 
    .git 
    index 
1

を私が正しく理解していれば、リポジトリ内の追跡されたファイルは現在 "project1"サブディレクトリ内のファイルとディレクトリで構成されています。すべてがproject1のサブディレクトリにあるので、基本的にそこのリポジトリを開始するだけです。あれは正しいですか?

もしそうなら、(1)プロジェクト履歴(何かを手助けできるgit filter-branch)を書き直すか、または(2)すべてのファイルを移動するコミットを追加して履歴を追加することなく、それを行うことはできません。

基本的に、コミットIDを変更せずに遡及的に変更することはできません。これはgitの機能です。しかし、あなたの状況は、アドレス可能なです。どちらのオプションが好きなのかわかりましたら、喜んで助けてください。

+0

ありがとうございました。私が投稿した答えは2番です。これは完璧です。私は私が歴史を変えたくないと言ったとき、私はgitに既に保存した歴史を失わせたくないということを意味します。 – edude05

関連する問題