根据我的经验,git-svn 不适用于 Git 子模块,主要是因为它向 SVN 发送更改的方式:如果你稍微调试一下,你会发现它会将 delta 发送到 SVN(所以像子模块这样的纯 Git 概念未翻译),然后获取刚刚发送的修订版(因此此修订版不包含子模块),并且毕竟用获取的版本替换刚刚发送的提交(因此在最好的情况下,子模块将在此过程中丢失,尽管根据我的经验它只是早些时候失败了)。因此,如果您可以只拥有一个未跟踪的目录“Project y Submodule”并手动管理它,而不是作为子模块。
或者,您可以尝试将 SubGit作为 git-svn 替代品。自 2.0 EAP 起,它允许为远程 SVN 存储库创建 Git 镜像。
$ subgit configure --svn-url http://svnhost/svnpath/projectX projectX.git
$ #adjust projectX.git/subgit/{config,authors.txt,passwd} and, if possible, enable rev-propchange-hook in SVN repository
$ subgit install projectX.git
之后,您可以克隆 projectX.git 并像使用通常的 Git 存储库一样使用它,同步将自动执行。因此,在安装后,您将Project y Submodule添加为 projectX.git 的普通 Git 子模块。
$ git submodule add git://github.com/.../projectY.git projectY
$ git commit -m "Added projectY as submodule"
$ git push
唯一要做的就是确保SVN中没有具有该名称的文件或目录,否则它将覆盖子模块。