4

我在 SVN 中有一个项目,我试图用 git-svn 克隆它。我按照git-svn docs中的示例进行操作。

git svn clone  svn+ssh://host/path/trunk  project_name

命令完成,没有错误消息,但是克隆的项目不包含所有目录作为 SVN 中的项目。

在顶层,我的 SVN 项目有......

$ svn ls  svn+ssh://host/path/trunk
README
Rakefile
app/
config/
db/
doc/
lib/
log/
public/
script/
test/
tmp/
vendor/

克隆后,我在本地...

README
Rakefile
app
config
doc
public
script
test

还缺少子目录。


更新

实验性地在同一主机上克隆了另一个项目。似乎工作正常。这个有什么特别之处?除了我刚刚创建它并在克隆之前将其导入 SVN 之外,我什么都想不到。那会有什么不同吗?


尝试创建一个全新的项目,导入到 SVN 并克隆。得到相同的结果,相同的缺失目录。

4

3 回答 3

11

据我所知,git 不会跟踪空目录:

http://git.or.cz/gitwiki/GitFaq#CanIaddemptydirectories.3F

也就是说,目录永远不必添加到存储库中,并且不会自行跟踪。

这有意义吗?缺少的目录是空的吗?

于 2009-07-01T14:12:20.163 回答
1

你确定你的 SVN 没有使用一些svn:external(见评论)?
有关该过程的更多详细信息,请参阅文章“从 svn 迁移到 git”

svn-git真的应该以某种方式警告你它不支持获取外部。
我通过注意到svn log没有签入这些文件而了解到这一点,然后在我进行清理时svn checkout看到它正在为供应商/插件目录获取外部文件。

因此,我决定逐字提取 vendor/plugins 目录,分离外部引用,并在升级时移至 git 子模块。
我真正想做但不知道如何做的是将插件代码引用为 http URL 并保留为子模块,以便我可以方便地参考源位置和修订

于 2009-06-30T19:29:56.257 回答
1

你可以试试

svn2git

或者

git svn clone  svn+ssh://host/path project_name --trunk=trunk/*

git 1.6+ 中有某种形式的深度克隆,但我不确定这是否是正确的语法

于 2009-06-30T19:48:36.733 回答