git-svn clone fails “fatal: Not a valid object name”

匿名 (未验证) 提交于 2019-12-03 00:50:01

问题:

Whilst doing git svn clone -s https://svn.example.com/repo/ I received the following output:

r3073 = a6132f3a937b632015e66d694250da9f606b8333 (refs/remotes/trunk) Found possible branch point: https://svn.example.com/repo/trunk => https://svn.example.com/repo/branches/v1.3, 3073 W: Refspec glob conflict (ref: refs/remotes/trunk): expected path: repo/branches/trunk     real path: repo/trunk Continuing ahead with repo/trunk W: Refspec glob conflict (ref: refs/remotes/trunk): expected path: repo/branches/trunk     real path: repo/trunk Continuing ahead with repo/trunk W: Refspec glob conflict (ref: refs/remotes/trunk): expected path: repo/branches/trunk     real path: repo/trunk Continuing ahead with repo/trunk W: Refspec glob conflict (ref: refs/remotes/trunk): expected path: repo/branches/trunk     real path: repo/trunk Continuing ahead with repo/trunk fatal: Not a valid object name refs/remotes/tags/Sync Controllers cat-file commit refs/remotes/tags/Sync Controllers: command returned error: 128 

Running git branch -a gives:

remotes/tags/Sync%20Controllers remotes/tags/v1.1 remotes/trunk remotes/v1.2 

I think the problem is that "remotes/tags/Sync Controllers" != "remotes/tags/Sync%20Controllers".

回答1:

The tag on SVN has a space in it, but the tag in git had this space converted to %20 (URL encoded). To solve it just manually add a new tag with the verbatim name:

cd .git/refs/remotes/tags/ mv Sync%20Controllers Sync\ Controllers 

Then run the git svn clone command again.

(Normally you'd do this with git tag OLDTAG NEWTAG but git was not allowing me to define a tag with a space in. The tag files are simply text files containing the hash of the relevant commit.)



回答2:

You may use git-svn server-side alternative, SubGit in order to avoid many of git-svn translation problems.

I'm a SubGit developer and could say that we worked a lot to resolve character translation issues like the one above; in this particular case tag would be translated to a refs/tags/Sync+Controllers tag.

Note also, that git-svn has translated Subversion tag as a branch instead of a tag.



回答3:

I ran into this issue today, and considered this branch which contains a pace in it is not important, i just run

git branch -r -d partialPayment%202.4 

And re-run git svn fetch It skipped current branch and continue grabbing the next one.



回答4:

I believe the problem with spaces is fixed in Git >= 1.8.0 (See: #786942).

So you should upgrade it.

I've tested it and it seems to work in the recent version of git.

See GitHub Home page: https://github.com/git/git



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!