[英]git svn branches in a large repository
我正在使用“ git svn”與具有非標准分支約定的大型SVN存儲庫進行交互。 我看到有多種方式克隆將svn /分支機構指出這里
我看到了非常不同的行為:
說SVN回購如下:
http://svn.mycom.com/svn/Project
-->trunk
-->defects
-->uat
生產在“樹干”中,分支在“缺陷”中,當前發展在“燕麥”中。
因此,我可以做以下事情
1.克隆直接燕麥
$ git svn clone http://svn.mycom.com/svn/Project/uat
當我這樣做時,我的.git / config文件看起來像:
[svn-remote "svn"]
url = http://svn.mycom.com/svn/Project/uat
fetch = :refs/remotes/trunk
然后,我按此處所述添加分支。.git / config類似於:
[svn-remote "svn"]
url = http://svn.mycom.com/svn/Project/uat
fetch = :refs/remotes/trunk
[svn-remote "task1"]
url = http://svn.mycom.com/svn/Project/defects/task1
fetch = :refs/remotes/task1
現在當我跑步
$git log --decorate --all --graph
我看到我的新分支只有1次提交,即。 分支創建與實際掌握的歷史無關。 它顯示了自己的歷史記錄行,與先前的提交沒有任何關系。
2.用-T克隆,然后添加分支我發現的替代解決方案是:
$git svn clone http://svn.mycom.com/svn/Project/ -T uat Project --no-minimize-url
Since the "Defects" has lot many branches, and it would take hours, i then did:
[svn-remote "svn"]
url = http://svn.mycom.com/svn/Project
fetch = uat:refs/remotes/trunk
branches = defects/{task1}:refs/branches/*
這似乎工作得很好,而且我確實掌握了歷史。 我想知道,如果有什么我需要考慮從一種選擇與另一種選擇進行比較的話,那么哪種方法更好? 但是,在此選項中,如果必須添加另一個分支,則不能簡單地在逗號分隔的列表中編輯branchs部分和新的分支名稱,例如branchs = errors / {task1,task2}。 這似乎不起作用,感覺像是GIT缺陷。 然后,我在分支下面添加另一條提取行
[svn-remote "svn"]
url = http://svn.mycom.com/svn/Project
fetch = uat:refs/remotes/trunk
branches = defects/{task1}:refs/branches/*
fetch = defects/task2:refs/branches/task2
這工作正常,我得到了分支的歷史記錄,並能夠切換無問題。 但感覺就像是駭客。 我希望有一種方法可以將其附加到看起來很干凈的分支列表中。
我使用並喜歡第二種方法,這是IMO正確的方法。 通過第二種方法,您將擁有存儲庫的所有歷史記錄,並且可以輕松地在所需的分支之間切換。 我也認為,如果要在本地創建一個新分支,然后將其提交到SVN
,則第一種方法會給您帶來一些問題。
使用幾天后,最有效的選擇是選擇#2。
注意:不要為以后創建的新分支添加“獲取”行。 我發現添加新分支名稱作為列表中的第一件事就可以了。 新的分支信息被拉。
[svn-remote "svn"]
url = http://svn.mycom.com/svn/Project
fetch = uat:refs/remotes/trunk
branches = defects/{task2,task1}:refs/branches/*
如果這樣做沒有拉分支,只需刪除“ .git / svn / .metadata”文件夾並運行
git svn fetch
它基本上將再次獲取信息,但至少看起來很干凈。 添加訪存行也可以。 我個人不在乎這兩種方式。 如果您很細致,則可以如上所述添加分支。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.