2014-03-26 61 views
1

我目前正在將我的團隊從SVN遷移到GIT。git svn rebase總是需要強制推送

而不是克隆整個整個顛覆回購,我選擇了......

git svn clone http://foo.com/svn/branches/dev --no-minimize-url --authors-file=users.txt foo 

這currectly拉低dev分支我。

於是我加了一個混帳回購協議與

git remote add origin [email protected]:foo/bar.git 

所以,我有被保持GitHub庫是最新的W /什麼是在SVN的問題。

我必須對.gitattributes進行一些更改(這可能需要另一個問題),因爲我在OSX上運行導入過程,並且因爲大部分代碼都是在Windows中編寫的,所以我一直在運行結束問題。

我一直在做更新的GitHub是...

git svn fetch 
git svn rebase 

不管出於什麼原因,每次我這樣做的時候,我最終不得不做了git push --force因爲我remote/origin/master發散掉。

因此,我不應該重新設計和簡單地獲取並有一個實際的本地git-svn分支和合併到master?還是有什麼我失蹤?

回答

1

目前尚不清楚您的意圖是否讓GitHub回購僅僅是SVN回購的準確鏡像,或者您是否還在本地git回購中做了額外的工作,您試圖推動回收。

如果意圖僅僅是反映回購,您的流程應該正常工作。運行:

git svn fetch 
git svn rebase 

應先拉下新SVN提交到您的遠程跟蹤分支(即參/遙控器/主幹),然後僅僅做本地主參考犯下的快進。那麼你應該可以將這些新的提交推送到GitHub中,而不會有任何問題。

但是,如果您正在對本地存儲庫進行本地更改,那麼git svn rebase基本上會重寫這些本地提交。如果你已經將這些本地提交推送到了GitHub,那麼新的實際上就是一個新的分支,這會導致你分歧並且需要推動力。

另一件需要注意的事情...如果你正在進行本地提交,然後通過git svn dcommit提交回SVN,請注意,即使SVN回購在此期間沒有發散,你的本地提交實際上也會被重寫。 git-svn工具會將您的提交重寫爲包含一個唯一標識符,用於將兩個回購中的提交相關聯。當你處理SVN遙控器和git遙控器時,這可能會導致問題,具體取決於你推送的順序。如果你先向GitHub提交提交,然後再提交SVN,那麼也可能導致你分歧。從the git-scm book

這需要你已經在Subversion服務器代碼的頂部做出的提交,做了Subversion提交每個,然後重寫你的本地Git的承諾包括一個唯一的標識符。這很重要,因爲這意味着您提交的所有SHA-1校驗和都會更改。部分出於這個原因,與Subversion服務器同時使用基於Git的遠程版本的項目並不是一個好主意。

所有這一切的結果是,如果你是純粹做這個鏡像,或者如果你是非常小心的流量,你可以用具有併發SVN和git遙控器脫身。否則,事情將是一個持續的頭痛。

如果我誤解了你的問題的任何部分,請告訴我。 HTH