2010-06-10 89 views
1

我正在做一個實習,他們正在使用SVN(雖然已經有一些關於移動到hg或git的討論,但這不是在不久的將來)。我喜歡git,因此我想使用git-svn與svn存儲庫進行交互,並能夠執行本地提交和分支以及類似的東西(當然,在交付svn之前重新綁定)。然而,有一個輕微的皺紋,svn存儲庫佈局有點奇怪。基本上,它看起來像這樣使用git-svn與稍微奇怪的svn佈局

/FOO 
    +-branches 
    +-tags 
    +-trunk 
    +-FOO 
    +-myproject 

基本上,我的項目一直停留到軀幹的子目錄,還有另外一個項目,也是後備箱的子目錄。如果我使用git-svn並且只克隆我的項目而不是根目錄,它會混淆或導致任何問題嗎?我只是想知道,因爲提交數字是爲整個存儲庫增加的,而不僅僅是我的項目,所以提交會失敗或類似的東西?我可能不會將任何分支或標籤推送到SVN,因爲我更喜歡在git本地執行這些操作,而且我不知道git-svn如何處理分支和標籤,並且沒有其他人使用它們,所以我發現這樣做的意義不大。謝謝您的幫助!

回答

1

我在一個多項目多平臺svn回購中使用git-svn。

我通常只是直接在我感興趣的svn repo目錄上找到本地git repo,並放棄對分支機構等的本地支持,儘管我聽到關於支持越來越好的好消息。在git-core文檔中似乎有git svn分支支持。

我做的方式:

git svn init http://repo.farts.com/svn/path/to/the/directory/of/project 
git svn fetch 

而當它的時間來提交...

git stash 
git svn rebase 
git stash pop 
git commit -am "Some really awesome stuff" 
git svn dcommit 

我已經與這個沒有問題。如果您已重新綁定到的代碼發生了更改,則彈出存儲啓動合併。 Rebase保持歷史線性。有可能是一個更好的方式來做到這一點,但我倖存下來,以上過程加上git mergetool。

您還可以查看git svn附帶的自定義佈局選項,以指定幹線,分支和標記之間的相互關係。你可以用-T trunk -b分支-t標籤分別指定它們中的每一個,默認情況下它們是相對的,但是你可以提供絕對路徑。

另外,作爲一個建議的話,我個人只是根據實習的敏感性來使用SVN客戶端。我不是一個好的公民的成員說這個,但源代碼控制可以是一個重大的痛苦的屁股,也是人民的聖地 - 如果它給任何人造成一個單一的不便,它的幾乎不值得。話雖這麼說,如果你能保持獨立,不負擔任何與你的工具的選擇,幸福git'ing ;-)

喬希

+0

嗯,這似乎是我想做的事情。我問這個問題的唯一原因是因爲在git-svn的專業版書籍部分,他說了一些關於svn如果在上次推送和當前推送之間發生提交時可以提交的問題,只要您沒有碰到任何提示修改過的文件,但混帳由此,所以我想也許這會導致問題,如果我只檢出一個子目錄。看起來你雖然做得很好。 我不認爲他們真的關心我使用git;我的導師實際上說他可能希望我解釋git,因爲他們最終可能會轉向DVCS – Ibrahim 2010-06-11 16:28:03