2017-04-12 42 views
3

我要尋找一個簡單的方法來進口一些繼承SVN代碼(儘管是在SVN的文件夾結構中含有分支/標籤和軀幹,沒有任何.svn目錄因此不包含任何歷史記錄或SVN用戶等)。我們只有整個傳統SVN代碼,沒有.svn文件夾,並且無法訪問原始SVN回購。導入SVN文件夾結構,Git的回購沒有歷史和用戶

+0

請注意,'.svn'目錄在沒有實際存儲庫的情況下完全沒有價值,因爲它們只包含足夠的數據來檢測本地更改。其他任何東西只在存儲庫中(但如果你知道URL,也許你會知道它)。 –

+0

謝謝Jan.我的選擇是使用這個現有的文件夾結構創建本地SVN回購,然後嘗試將svn-git實用程序導入到Git中?無論如何,我並不擔心歷史/用戶等。 – dchucks

+1

顛覆不會幫你一點點!就像你開始一個新項目一樣在git中導入。我會在答案中寫下命令。 –

回答

1

好吧,如果你只是擁有最新版本的沒有歷史,你能做的就是簡單地將它導入Git作爲新代碼的最佳。

你不知道的分支和標籤之間的關係,所以你可以簡單地導入每個作爲單獨的根,或者您也可以嘗試從重建像每一個版本明顯性的關係是基於以前的。

所以,你只需要創建一個空的Git倉庫,然後每個分支/標籤您:

  1. 準備適當的分支。

    • 新存儲庫以分支master開頭,沒有父分支。這就是您導入trunk的地方,但在此之前,您需要導入您知道之前的任何標籤。
    • 您使用git checkout -b新名稱創建從已知基的新分支。例如,如果你知道某個分支是基於特定版本的。
    • 您創建一個新的分支使用git checkout --orphan新名稱沒有父。對於你不知道分支是基於什麼的情況。請參閱git-checkout
  2. 刪除了以前的內容:git rm -rf .

  3. 複製在SVN分支/標籤的內容。

  4. 添加一切git add .

  5. 提交:git commit -m消息

  6. 沖洗並重復,直到完成。

如果你不關心關係,你可以很容易地編寫腳本。如果你想重建一些歷史,例如該主服務器成功發佈3,然後成功發佈2和發佈1,則必須手動排序並選擇分支。

你也可以在每個目錄只是git init + git add . + git commit,推動各下適當的名稱相同的中央回購,但不會讓你重建任何歷史。

1

.svn目錄包含在你的項目中的文件的最後簽出的版本。從概念上講,它是類似的含量HEAD上的Git提交指向。 Subversion使用這些信息來知道哪些文件被修改了(並顯示出不同之處)並將文件恢復到上次更新(檢出)版本。

既然你沒有訪問Subversion版本庫中,.svn目錄的內容幾乎是無用的。

刪除.svn目錄,那麼,在你的項目運行的根目錄:

git init 
git add . 
git commit -m "the initial import" 

與任何你想要的提交信息替換文本「初始導入」。

瞭解更多關於Git命令:https://git-scm.com/docs

+0

謝謝@axia。其實這就是我所做的,但現在我的Git「master」擁有標籤和中繼文件夾(我們沒有提供任何分支代碼)。我想要一種方法來將「trunk」轉換爲master並將SVN標籤文件夾移動到Git標籤,但我意識到沒有任何上下文信息(標籤是從哪個分支創建的),它可能不會很有用。 – dchucks

+0

Err .. 。「trunk」和「tags」目錄出現在版本庫中,你不應該把它們放在工作目錄中,你可以擁有它們,但據我記憶,這不是它們應該被使用的方式。無論如何,你的代碼應該在「trunk」目錄下,只保留這個目錄的內容,並從它創建新的Git倉庫。 – axiac

相關問題