2009-08-13 45 views

回答

29

(發佈乍得的「問題」作爲回答,固定的格式和拼寫錯誤。)

有幾個原因此錯誤消息。

第一,是最常見的。你的git倉庫中有兩個不相交的歷史記錄:你在git中創建的歷史記錄,以及來自遠程svn倉庫的歷史記錄。

爲了解決這個問題,你需要讓你的git倉庫和svn倉庫共享一個共同的祖先,這樣git可以確定哪些提交改變了什麼。

以下Article,討論如何解決這個問題:

問題的第二個原因可能是,如果你有git的(可能的,窗戶msysGit包)的早期版本,你剛剛創建了一個新的git與遠程svn存儲庫進行通信的存儲庫。

例如:

git svn init svn://svn.xxx.xxx/xxx/trunk 
git svn fetch -r BASE:10 

git clone svn://svn.xxx.xxx/xxx/trunk // Adds all the files in the revision... 

,你會得到如下錯誤信息,使用下面的命令時。

git svn info 

無法從工作樹或

確定上游SVN信息
git svn rebase 

無法確定工作樹歷史或

git svn dcommit 

無法確定從HEAD歷史

上游SVN信息上游SVN信息

如果你得到上面的錯誤信息,f第一步是檢查你的git版本。如果你使用(msysGit)運行舊版git版本< = 1.6.3.3。*,那麼解決這個問題最簡單的方法就是更新到最新版本的git,比如1.6.4。*。

以下Article更詳細地討論了該問題。

+0

感謝編輯bstpierre – Chad 2010-08-10 01:32:41

+0

感謝您的文章鏈接,讓我做一個開關做一個不同的svn存儲庫,現在我又回來了! – 2011-05-05 00:20:05

+1

對於第一種常見情況,本文中的說明已過時。這裏的海報更新了git初學者的說明http://stackoverflow.com/questions/457694/how-to-commit-a-git-repo-to-an-empty-repo-svn-server/981765#981765 – James 2011-07-12 18:05:43

24

我收到此消息是因爲克隆svn回購--no-metadata選項。也許你的問題就是這樣。

當沒有這個選項克隆時,一切都很好。

--no-metadata選項是爲了在新的git克隆將來成爲規範來源時克隆SVN存儲庫。它缺乏向上遊提交SVN的能力,因爲它無法追蹤git克隆和SVN上游之間的差異。

+0

這就是我所做的。 – 2016-07-05 17:08:20

9

我得到這個消息後,我錯誤地添加的-s/--stdlayout參數到git svn clone命令對於沒有一個Subversion回購具有trunktags,和branches相對路徑「標準的Subversion佈局」。我通常克隆的Subversion回購確實有標準的相對路徑,所以當我克隆了一個Subversion回購,但沒有使用我的通常的git svn clone命令時,我得到了這個神祕的消息,消息是100%正確的,但試圖找出問題時幾乎100%無用)。

+0

我遇到了這個問題,因爲我用'-s'選項執行'git svn clone'時,在svn url中添加了/ trunk。所以儘管與你的情況不完全相同,但你的評論幫助我發現了我的錯誤。謝謝! – jeroen 2011-11-30 08:44:35

2

此問題的另一個原因是錯誤的svn-remote.svn.rewriteRoot選項(請參閱this answer以獲取有關使用此指令的說明)。

從Subversion導入的提交中的git-svn-id行必須與rewriteRoot URL匹配(如果已設置)。

+1

從鏈接的答案這裏簡單的svn URL switcheroo工作! – lkraav 2015-08-05 15:28:00

14

就我而言,svn repo的HEAD應該與git repo的HEAD匹配。 This應該解決的問題:

git update-ref refs/remotes/git-svn refs/remotes/origin/master 
+4

這並沒有解決我的問題。 – 2015-01-02 04:44:56

+1

這解決了我的問題。 – 2016-09-24 03:30:08

2

我得到這個消息,因爲我使用的FQDN爲git svn init命令,但預先存在的混帳SVN一體化是隻使用主機名。

例如grep git-svn-id表明:

git-svn-id: svn://host/repo/... 

但我所做的:(我們有一個機器,定期同步與SVN一個混帳回購協議,那麼其他人有git config --add remote.origin.fetch refs/remotes/*:refs/remotes/*去取下來SVN同步分支)

git svn init -Ttrunk svn://host.domain.com/repo 

+0

你是怎麼修復它的? – jpaugh 2016-02-29 17:30:06

+0

@jpaugh,運行帶有與'git-svn-id'值完全匹配的URL的'git svn init'。 – 2016-03-03 14:31:44

+0

那麼,你的意思是你無法修復它?你必須重建倉庫? – jpaugh 2016-03-03 14:35:36

7

當您結賬新創建的SVN回購時,您也可能會收到此錯誤。

我已經

  1. 首先解決了這個操作的方式通過svn命令的初始提交
  2. 然後用git svn的命令克隆回購。
8

得到了同樣的問題,在這裏是基於http://eikke.com/importing-a-git-tree-into-a-subversion-repository/文章的解決方案:

$ git svn init http://server.com/svn/project/trunk/prototypes/proto1/ 
$ git svn fetch 
    W: Ignoring error from SVN, path probably does not exist: (160013): Filesystem has no item: '/svn/!svn/bc/100/dcom/trunk/prototypes/ws' path not found 
    W: Do not be alarmed at the above message git-svn is just searching aggressively for old history. 
    This may take a while on large repositories 
    r147367 = 37c9910f794cb9cff7ca0d5d2eb26e1f0dabbc4d (refs/remotes/git-svn) 
$ svn log http://server.com/svn/project/trunk/prototypes/proto1/ 
    ------------------------------------------------------------------------ 
    r147367 | user | 2014-01-16 18:02:43 +0100 (Thu, 16 Jan 2014) | 1 line 
    proto1 home 
    ------------------------------------------------------------------------ 
$ git log --pretty=oneline master | tail -n1 
    71ceab2f4776089ddbc882b8636aacec1ba5e832 Creating template 
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #1 

$ git show-ref git-svn 
    37c9910f794cb9cff7ca0d5d2eb26e1f0dabbc4d refs/remotes/git-svn 
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #2 

$ echo "71ceab2f4776089ddbc882b8636aacec1ba5e832 37c9910f794cb9cff7ca0d5d2eb26e1f0dabbc4d" >> .git/info/grafts 

$ git svn dcommit 
    Committing to http://server.com/svn/project/trunk/prototypes/proto1 ... 
    A README.md 
    A pom.xml 
A src/main/java/.gitkeep 
A src/main/resources/.gitkeep 
A src/main/webapp/WEB-INF/web.xml 
A src/main/webapp/index.html 
A webapps/.gitkeep 
    Committed r147419 
    A README.md 
    A pom.xml 
A src/main/java/.gitkeep 
A src/main/resources/.gitkeep 
A src/main/webapp/WEB-INF/web.xml 
A src/main/webapp/index.html 
A webapps/.gitkeep 
    r147419 = 6a8bda7262739306d0a6e17eaad2802737dedc35 (refs/remotes/git-svn) 
    No changes between current HEAD and refs/remotes/git-svn 
    Resetting to the latest refs/remotes/git-svn 
    Unstaged changes after reset: 
    M pom.xml 
    M src/main/webapp/index.html 
    A .gitignore 
    Committed r147420 
    M pom.xml 
    M src/main/webapp/index.html 
    A .gitignore 
    r147420 = 749b5acec55c341672bca08d07de8c336b5a4701 (refs/remotes/git-svn) 
    No changes between current HEAD and refs/remotes/git-svn 
    Resetting to the latest refs/remotes/git-svn 
    ...etc... 
0

另一個可能的原因:如果你有一個SVN-remote..rewriteUUID配置設置,混帳SVN可能有麻煩定位存儲庫的右側元數據。例如,你可能有這樣的事情(見的git - svn的手冊頁,你爲什麼會想討論這樣做):

[svn-remote "svn"] 
    url = svn://read-write.test.org 
    fetch = trunk/project:refs/remotes/trunk 
    rewriteRoot = http://read-only.test.org/svn 
    rewriteUUID = 1234-abcd 

...其中1234-ABCD是讀的UUID - 僅鏡子。當你混帳SVN取',你最終可能會與本​​文件:

.git/svn/refs/remotes/trunk/.rev_map.5678-dcba 

...其中56780-DCBA是讀寫存儲庫的UUID。解決方法是:

$ mv .git/svn/refs/remotes/trunk/.rev_map.5678-dcba \ 
    .git/svn/refs/remotes/trunk/.rev_map.1234-abcd 

不能肯定說這是否是一個持久的解決辦法,即,它可能會混淆下次你'git的SVN獲取的時間。可能嘗試一個符號鏈接而不是'mv',我沒有嘗試過。

相關問題