2011-01-11 54 views
2

我目前正在使用Visual Studio在C#中編寫應用程序。因此,VS2010在我的項目目錄中創建了一個Solution目錄。 所以我的層次結構是這樣的:如何在目錄樹中將我的git回購降級?

Solution 
    .git 
    project1 
    project2 

我想要做的就是這樣的:

Solution 
    Project 1 
    .git 
    Project 2 

截至目前在該解決方案中的文件被跟蹤,除了項目2(比如project.sln等)。 有沒有一種方法可以在不重寫歷史的情況下做到這一點?

在此先感謝。

回答

3

這實際上是由SethRobinson上#[email protected]但這裏是他的解決方案:

步驟一個,將整個的git樹成子目錄:

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

第二步,讓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

感謝您找到併發布解決方案。幫助了我很多! – 2014-03-23 12:58:56

0

如果項目2根本沒有被跟蹤,我想你可以把它移到你想要的地方。 git會跟蹤與樹結構分離的內容更改,因此它會將文件看作只是四處移動,但不會更改內容。

+0

不,這並不奏效,它會將項目中的文件檢測爲新文件。 – edude05 2011-01-11 19:03:16

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

謝謝鮑勃,我認爲我發佈的答案是第二,這非常好。當我說我不想改變歷史記錄時,我的意思是我不希望git丟失已保存的歷史記錄。 – edude05 2011-01-12 16:23:27

相關問題