我SVN結構是這樣的:如何git克隆所有分支位於根的SVN倉庫?
/
|-- Branch1
|-- Branch2
|-- Branch3
...
我如何克隆到一個Git倉庫保存的分支(即不平坦的歷史)呢?
紅利問題:如何克隆SVN分支的一個子集到一個新的git倉庫?
我SVN結構是這樣的:如何git克隆所有分支位於根的SVN倉庫?
/
|-- Branch1
|-- Branch2
|-- Branch3
...
我如何克隆到一個Git倉庫保存的分支(即不平坦的歷史)呢?
紅利問題:如何克隆SVN分支的一個子集到一個新的git倉庫?
我相信在SVN分支只是文件夾,它只是一個約定。 Git實際上與分支機構合作。有了這個方法變得更容易。
由於您需要從SVN存儲庫獲取數據,您需要爲其創建遠程數據庫。從結構看,你需要在你的git倉庫中創建分支1到3。
創建Git存儲庫。
git init
git config --local --add user.name <Username>
git config --local --add user.email <email>
echo "MASTER" > master
git add master
git commit -m "Dummy commit"
創建您的SVN分支的遠程。
git config --add svn-remote.<BranchName>.url <SVN URL>
git config --add svn-remote.<BranchName>.fetch :refs/remotes/<RemoteName>
爲分支1:
git config --add svn-remote.branch1.url https://svnhost/svn/MyRepo/Branch1
git config --add svn-remote.branch1.fetch :refs/remotes/branch1_remote
取BRANCH1的SVN數據:
git svn fetch branch1
重複此對其他兩個分支店2和店3。
如果你只是想克隆你可以在這裏停下來,除非你想使用Git倉庫,否則不需要繼續下去。 Google上的git子樹知道爲什麼這可能是你的情況下正確的解決方案。
創建子樹:
Find last commit id:
git checkout remotes/branch1_remote
git svn log -n 1 --show-commit --oneline
Output: 734713bc047d87bf7eac9674765ae793478c50d3 (This is yout LastCommitId value)
Create subtree in mainline master branch:
git checkout master
git subtree add --prefix=Branch1 <LastCommitId>
爲你加分題:試試這個
git svn clone https://svnhost/svn/MyRepo/Branch2
這一個是簡單的,另一種是按照上面的步驟,而不是在創造三個遙控器相同的存儲庫每次創建新的存儲庫,然後添加分支機構的遠程設備。根據您的要求,您可以通過不同方式進行Google搜索。
在任何分支創建之前克隆只有主幹的前幾個修訂。我假設您的分支機構並未在修訂版本5之前創建。我還假設您的中繼文件夾名爲trunk
。相應地調整。希望你已經創建了一個作者文件。這將設置本地存儲庫。
$ git svn clone https://svn.example.com/myrepo --authors-file=authors.txt -T trunk -r 1:5 myrepo
接下來,在myrepo/.git/config
類似添加branches
行這樣的:
[svn-remote "svn"]
url = https://svn.example.com/myrepo
fetch = trunk:refs/remotes/origin/trunk
branches = branches/Branch1:refs/remotes/origin/*
branches = branches/Branch2:refs/remotes/origin/*
branches = branches/Branch3:refs/remotes/origin/*
如果你的分支遵循可與就像在你的例子的圖案相匹配的命名慣例,你可以這樣做:
[svn-remote "svn"]
url = https://svn.example.com/myrepo
fetch = trunk:refs/remotes/origin/trunk
branches = branches/Branch*:refs/remotes/origin/*
有人建議在進行這些編輯後刪除myrepo/.git/svn/.metadata
。我不知道這是否有必要。
現在您只需獲取其餘修訂版。 Git svn將制定分支機構並做正確的事情。任何不符合branches
行之一的分支都將被忽略。
$ cd myrepo
$ git svn fetch
一旦完成,您可以檢查分支是否使用此命令創建。
$ git branch -r
origin/Branch1
origin/Branch2
origin/Branch3
origin/trunk
這是關於從SVN到Git的一次性轉換,然後只使用了Git,還是您想從Git回退到SVN? – Vampire
這是一次性轉換,但我希望能夠轉發更新的SVN提交到我的git回購。 – user1709708