2011-01-09 187 views
5

我正在努力解決以下問題。當我繼續從SVN獲取修訂與git-svn無法創建一個分支來跟蹤SVN分支

git svn fetch 

,我發現了以下錯誤:

Found possible branch point: https://somecompany.com/product/trunk 
=> https://somecompany.com/product/branches/deep/branches/product-001, 72666 
Found branch parent: (refs/remotes/deep/branches/product-001) b685b7b92813885fdf 6b8e2663daf884bf504b14 
Following parent with do_switch 
Successfully followed parent 
error: 'refs/remotes/deep' exists; cannot create 'refs/remotes/deep/branches/product-001' 
fatal: Cannot lock the ref 'refs/remotes/deep/branches/product-001'. 
update-ref -m r72667 refs/remotes/deep/branches/product-001 df51920e8f0a53f26507 c2679eb6a9dbad91e0d6: command returned error: 128 

這事,因爲我是使用SVN分支默認的過濾取修訂:

[svn-remote "svn"] 
    url = https://somecompany.com/someproduct 
    fetch = trunk:refs/remotes/trunk 
    branches = branches/*:refs/remotes/* 
    tags = tags/*:refs/remotes/tags/* 

現在,我已經添加下面的行,但已經太晚了:

branches = branches/deep/branches/*:refs/remotes/deep/branches/* 

我試圖解決這個問題,通過使用git svn reset來移除所有提交。其實我可以從錯誤信息中看到git正在嘗試正確的事情,但不能因爲分支遙控器/深存在而存在。

我試圖尋找2個可能的解決方案: 1.刪除該分支(遙控器/深),但由於它被git作爲遙控器追蹤,我無法找到任何解決方案。 2.刪除與該分支有關的整個歷史記錄。沒有成功過:(

有誰知道如何處理我的問題

回答

4

我已經終於能夠通過執行以下兩個步驟來解決該問題:?

  1. 取出參/遙控器/從深填充裁判
  2. git的刪除/日誌/參/遙控器/深

但仍然有問題與獲取。我需要使用

branches = branches/*:refs/remotes/* 

正常分公司和

branches = branches/deep/branches/*:refs/remotes/deep/branches/* 

深分支機構。不幸的是,前面的規範包含了後者,所以我得到了錯誤「致命的:不能鎖定ref'refs/remotes/deep'」,因爲git-svn試圖根據第一個規範創建深度分支。

到目前爲止,我通過手動評論第一個「分支」並獲取具有深度分支的特定修訂,但這不是一個好的選擇,因爲這兩種情況都有太多的修訂。

UPD:我發現了其餘問題的簡單但不優雅的解決方案。我使用分支來指定深度分支的路徑並獲取指定第一級的每個分支。

+0

關於 1.取出參/遙控器/深盒裝-裁判 2.刪除git的/日誌/參/遙控器/深 可以請你解釋如何做到這一點? – ryenus 2011-06-21 14:44:37

+0

rm或del取決於您使用的操作系統 – 2012-01-19 14:49:29

1

我有一個非常類似的問題,發現「git svn reset」,而不是「git reset」修復了它。如果您事先沒有更新您的分支配置,一旦您檢索到通過分支點的提交,您必須備份以再次檢索它們。否則,他們沒有父母。

所以,之前更新你的分支,然後運行

git svn reset -r<revisionnum> 

,並按照你的混帳SVN獲取正常。這節省了我很多時間從SVN重建整個事情。

在你的情況下,你可能還需要調查「忽略」功能,以不追蹤你的嵌入式分支。