2011-02-24 94 views
1

我有一個當前使用Subversion的存儲庫,但我想在本地使用Git。git-svn是否支持每個子目錄的不同版本?

git svn clone http://localserver/svn/repo

現在,內回購,我有幾個目錄::所以我用git-svn的檢查出來

repo/ 
    trunk/ 
     A/ 
     B/ 
     C/ 
    tags/ 
    branches/ 

儲存庫目前處於修訂100.我想像結帳修訂90內repo/trunk/B,然後讓整個回購標籤,讓repo/trunk/A是修訂版100,repo/trunk/B是修訂版90和repo/trunk/C是修訂版100

在SVN中我會做

cd repo/trunk/B 
svn update -r90 . 

是否有一個使用git-svn的等價物,然後我可以製作一個標記來捕獲當時整個存儲庫的狀態?

我嘗試這樣做:

cd repo/trunk/B 
git svn find-rev r90  # yields 18376729f51b71212d94dcba239a2482cda9f3c8 
git checkout 18376729f51b71212d94dcba239a2482cda9f3c8 . 

而且據我所知,在repo/trunk/B文件已根據git status改變,但在其他子目錄中的文件並沒有改變。這是正確的方式嗎?還是有更正確的方法?

回答

1

如上所述,您可以使用git checkout手動爲trunk/B中的文件執行此操作。但是,文件內容現在將顯示爲已修改,如果您運行的是git commit,則會重新提交舊文件的內容作爲新文件。

這通常不是git的操作方式,我敢說這通常不是你真正想用svn做的事情。使用git,您希望整個工作樹以鎖步方式一起移動,因此,支持部分簽出或將子樹更新爲不同版本的操作大部分都不存在。

當這種情況出現時,您應該問自己:ABC是否真的是不同的「項目」。當您標記標記時,您是否將它們標記在一起,或者您是否將與A的文件分開標記?分枝怎麼樣?我發現,當你包含所有項目所需的文件,但不超過這個時,git repos的效果最好。將存儲庫限制到項目級別會增加一些簿記,但也有助於提高靈活性。這就是爲什麼你會看到很多關於StackOverflow的文章,討論如何使用git子模塊和子樹(兩個不同的概念)來管理存儲庫組。

相關問題