2009-10-12 158 views
31

我經常遇到這樣的情況,我想立即在SVN存儲庫上工作。但普通的git svn clone [url]也克隆了整個歷史。所以我想加快速度。第一部分是隻把最後一個版本提取到你的Git倉庫中。我這樣做,像這樣:Git svn clone:如何推遲修訂歷史記錄的提取

URL=http://google-web-toolkit.googlecode.com/svn/trunk/ 
REV=`svn info $URL |grep Revision: | awk '{print $2}'` 
PROJECT_FOLDER=google-web-toolkit-readonly 

git svn clone -r$REV:HEAD $URL $PROJECT_FOLDER 

(StackOverflow上的文章中詳細信息:。"How to git-svn clone last n revisions from svn"

這樣我和運行,可以立即開展工作,但是,如果沒有歷史的本地副本

現在的問題是,我如何從svn倉庫取回歷史記錄?

而且最好是可以以1000個修訂版塊(以相反的順序)完成,任何幫助在這裏將不勝感激:)

+0

我發現下面的解決方案很有用http://stackoverflow.com/a/2348596/429476 – 2016-01-27 08:12:20

回答

21

我發現它是如何完成的。訣竅是不要使用git svn clone。而是分別使用git svn initgit svn fetch。修改的例子:

URL=http://google-web-toolkit.googlecode.com/svn/trunk/ 
REV=`svn info $URL |grep Revision: | awk '{print $2}'` 
PROJECT_FOLDER=google-web-toolkit-readonly 

mkdir $PROJECT_FOLDER 
cd !$ #goes into dir named $PROJECT_FOLDER 
git svn init -s $URL #-s implies --stdlayout with /trunk /tags /branches 
git svn fetch -r $REV 

# hack, hack, hack 

# or update history (fetch 50 revisions back each loop 
for ((r=$REV; r>0; r-=50)); 
do 
    git svn fetch -r $r:HEAD 
done 
+3

這似乎不適用於我,它只是返回時,當我嘗試做git svn fetch -r 1000:HEAD – Verhogen 2009-10-25 23:10:56

+0

它也不適用於我,以及Rob Crawford提出的解決方案。對我而言,最初的問題仍然未得到答覆。 – sthiers 2012-09-11 12:42:23

+2

@verhogen - 'git svn fetch -r 1000:HEAD'表示「從rev 1000開始獲取所有修訂直到當前HEAD」。如果你在SVN中有800個修訂版,那麼這個版本不會獲取任何東西。如果你有50k的修訂版本,它會取得比你想的更多的方式。 – 2013-12-10 09:15:35

0

git svn fetch出現「記得」這是以前看過的修訂。我一直有成功有做範圍:

git svn fetch -r 0:100 
git svn fetch -r 100:200 
git svn fetch -r 4500 
git svn rebase 
git svn fetch -r 200:300 

我拿來了最新的修訂版,然後「在填充」空白開始。它似乎工作正常。

Jesper - 如果您的存儲庫沒有修訂版1000,那麼它沒有任何提取。確保您使用的版本號是有效的!

+1

不知道這是什麼實現。它成功了,但是一個git日誌不會告訴你任何東西超過你最初的抓取和轉發。 – 2012-12-06 22:20:14

5

建議的答案都不起作用。修改後的git svn fetch只會檢索比已經克隆的修訂版更新的修訂版。您可能可以使用git svn reset返回到較舊版本並從那裏檢索,但之後必須執行一些骯髒的工作,以將新版本「嫁接」回到完整樹(SVN修訂版的SHA1 git取決於修訂的整個親子關係)。如果你方便使用手柄git爲您提供,請爲它服務。

避免這個問題要容易得多。

  • 做一個最後幾個修訂版的初始克隆,這樣你就可以立即開始工作;
  • 啓動完整歷史的另一個克隆到另一個目錄/ git倉庫;
  • 在您的部分歷史中儘可能多地工作;
  • 完整克隆完成後,使用類似http://www.sanityinc.com/articles/relocating-git-svn-repositories/的方法將工作從部分存儲庫複製到完整存儲庫。

所以,這是一個部分的答案 - 你如何獲取歷史?把它拿到另一個回購中,並複製你需要的東西。它可以以相反的順序以1000塊完成嗎?用手術刀和很多耐心,可能,但它不值得。完全取得前進將超過所有第一次修訂的開銷,這些修改是由每個塊git svn fetch抓取的,修復將變得單調乏味。