2014-01-27 54 views
0

我做了一個code.google項目的svn checkout(git svn clone,我不記得)並開始使用git代替。如何更新svn項目如果.svn文件夾被刪除而不會丟失歷史

我在master git分支中保留了原始項目,並且在一個名爲threadSafe的額外分支中完成了所有更改。但是,我沒有.svn文件夾了。

現在,我需要更新項目並從原始項目中引入更改,而不會丟失我的更改。所以,從svn項目更新我的git master分支,然後合併git分支。

如果我刪除了.svn文件夾,可以這樣做嗎?像svn更新

我在stackoverflow中讀到,「您可以在同一位置再次結帳,並且如果沒有新更新,svn將版本化所有文件而無需下載。」我試過這個,但它不起作用,因爲它收到一條消息,說有相同名稱的文件夾。

@ flopo的建議後,我最好的拍攝是: 1.使用svn再次檢出項目到另一個位置。 2.將新結帳複製到我的代碼上,覆蓋文件。 3.現在我擁有最新版本的git master分支以及帶有我的更改的threadSafe git分支。使用git合併分支。

但是,如果我這樣做,我失去了svn存儲庫的歷史。因爲我根據git顯示所有更改的作者。

謝謝!

回答

0

當然,有一個更好的方法來做到這一點,但我可以通過創建一箇中間存儲庫,從svn存儲庫更新到我的git存儲庫。像這樣做,我可以保留原始項目的歷史樹。

(謝謝你所有的答案)

//Clone the svn repository using git svn and upload as a new github repository 
cd src 
git svn clone http://XX.googlecode.com/svn/trunk/model XX_svn 
cd XX_svn 
git remote add origin [email protected]:account/XX_svn.git 
git push -u origin master 

//add a new remote into my git project to fetch from XX_svn 
cd ../XX 
git remote add svnClone git://github.com/account/XX_svn.git 
git fetch svnClone 
* [new branch]  master  -> svnClone/master 

//merge changes as needed: merge the latest changes from the remote project to my master branch (that was an out of data copy of the original project) 
git checkout master 
git merge svnClone/master 

//Now, I have the latest changes from the svn repository in my git master branch --> I can merge or cherry pick as needed. For example 

git checkout thread-safe 
git merge master 
0

刪除.svn文件夾後,您無法進行更新,因爲您沒有所需的信息來執行此操作。

恐怕您必須在另一個目錄中進行全新結帳。您無法使用現有文件在目錄中結帳。

1
  1. 使用SVN再次簽出項目到其他位置。

  2. 將您的代碼複製到此新的結帳中,覆蓋文件。

  3. 同步代碼現在你有.svn文件夾。

+0

眼下這是最接近我可以得到的。但以相反的方式來做,因爲我仍然需要使用git。 1.使用svn再次檢出項目到另一個位置。 2.將新結帳複製到我的代碼上,覆蓋文件。 3.現在,我擁有最新版本的git master分支以及帶有我的更改的線程安全git分支。使用git合併分支。 – tetrarquis

+0

唯一的問題是,我放棄了原來的項目的歷史,因爲所有的變化都表現爲一個大的承諾。好像我是作者。 – tetrarquis

+0

想想舊歷史對git變化的重要性。如果舊的svn歷史很重要,我的方法會保留svn歷史,失去git部分:您將保留svn歷史記錄,然後您將對所有新更改進行新的提交。 – dbermudez

0

檢出您的存儲庫在一個新鮮的文件夾,然後將根.svn目錄複製到您的舊的根文件夾。這應該工作。

1

使用--force選項進行結帳。

SVN 1.7 checkout documentation

此前1.7版本,如果您嘗試 簽出目錄包含 文件或子目錄的現有目錄之上,該結賬本身就已經創造顛覆默認會抱怨。 Subversion 1.7以不同的方式處理這種情況,允許 簽出進行,但將任何阻塞對象標記爲樹 衝突。使用--force選項可覆蓋此保護措施。如果您使用--force選項簽出 ,那麼 結帳目標樹中任何通常會阻止結帳的未受版本控制的文件仍將變爲版本控制,但Subversion將原樣保留其內容 。如果這些內容與 (作爲結帳的一部分下載)中的存儲庫文件不同,則文件將出現 以進行本地修改 - 將檢出的 版本文件轉換爲未版本控制文件所需的更改退房前有 - 結帳時間結束。

+0

使用--force的問題是它帶來了新文件,但它不會改變現有的文件。 – tetrarquis

+0

@tetrarquis這就是要點 - 你不想改變現有的文件。如果你想簽出一個完全新鮮的副本,在不同的目錄下執行(然後根據需要重命名目錄) – gbjbaanb

+0

@gbjbaanb,我不介意更改git master分支中的文件,因爲我的更改位於另一個git中科。但是,如果我在不同的文件夾中進行全新複製,那麼我沒有.git文件夾並且存在相同的問題。我正在調查git svn是否有助於避免svn歷史丟失。謝謝! – tetrarquis

0

如果您運行的是svn status命令,並且您看到帶有「!」的文件夾或文件,在他們面前,請按照下列步驟來糾正問題:

$ svn status 
!  foo/ 
$ svn update foo/ 
$ git checkout -- foo/ 
$ svn status 

現在你的.svn目錄應該是回來了,事情妥善顯示爲修改或刪除當您運行svn status

重要!如果沒有,您需要首先將.svn添加到.gitignore文件中。

相關問題