git svn clone忽略文件

时间:2014-10-01 10:33:23

标签: git svn git-svn

我正在尝试使用Atlassian教程(https://www.atlassian.com/git/tutorials/migrating-overview)将我的svn存储库迁移到git存储库,而且我未能正确检出我的svn存储库。克隆后,它在使用git log时具有所有历史记录,但我没有看到任何文件。我尝试使用git checkout -b trunk remotes/trunk检出其中一个远程分支,但新创建的分支主干上仍然没有文件。

迁移脚本的开头如下所示:

#!/bin/sh
#$1 - remote svn repo
#$2 - local git repo name
java -jar svn-migration-scripts.jar authors $1 > authors.txt
git svn clone --stdlayout --authors-file=authors.txt $1 $2

我发现了什么

我可以使用git svn命令获取没有历史记录的文件:

git svn clone -rHEAD $1 $2

使用此命令检出的文件将具有类似svn的结构(trunkbranches),因此不是我正在寻找的。

另一次尝试......

我尝试过使用GitHub中的svn2git,但是它使用了相同的机制,所以它也失败了......命令:

svn2git https://svn/xxx --trunk trunk/src --branches branches --notags --authors ../authors.txt 

输出:

Checked out HEAD:
https://svn/xxxx r149793

仍然没有文件,只有.git个文件夹。我试过抓,拉等等。

另一个有趣的观察

我找到了一个奇怪的存储库。有这样的文件夹结构:

* branches
  * as usual...
* tags
  * as usual...
* trunk
  * src
    * src
    * pom.xml

输出如下:

svn2git https://svn/xxx --trunk trunk
svn2git https://svn/xxx --trunk trunk/

不能工作......

svn2git https://svn/xxx --trunk trunk/src

作品。这至少非常奇怪。

1 个答案:

答案 0 :(得分:0)

我不知道究竟是什么导致了这个问题,但它与我的git版本有关。我在Ubuntu上使用了git 1.9但它失败了,但是对于OS X版本的git(1.8)上的相同命令,它运行起来了。如果您偶然发现此类问题,请尝试使用其他版本的git。

我用于迁移的脚本(svn-migration-scripts.jar是从Atlassian教程下载的jar)

#!/bin/sh

# $1 - remote svn repo (https://svn/path/to/repository)
# $2 - local git repo name (MyProject)
# $3 - remote git repo address (user@gitserver:/path/to/repository)

java -jar svn-migration-scripts.jar authors $1 > authorsTmp.txt
sed "s/mycompany\.com/youractualcompany.com/g" authorsTmp.txt > authors.txt
git svn clone -s --authors-file authors.txt $1 $2
cd $2
java -Dfile.encoding=utf-8 -jar ../svn-migration-scripts.jar clean-git --force
git remote add origin $3
git push -u origin --all

我希望有人会觉得有帮助。