4

首先,我想向您展示我的项目设置,我有两个项目

  • 项目 X:使用 git svn clone从远程 svn 服务器克隆
  • 项目 y:位于GitHub

项目 X 引用项目 y 作为 git 子模块:

-- Project X
  -- src/
    -- myCode1/
    -- *Project y Submodule*
    -- myCode2/
  -- .git/
  -- ...

现在我想用git svn dcommit将本地完成的提交“推送”到远程 svn 服务器。
谁能向我解释该项目结构的正确工作流程?


如果我想从我运行的 svn 服务器更新我的本地 git repogit svn rebase并获得以下信息:

错误:以下未跟踪的工作树文件将被结帐覆盖

Git 列出了子模块的所有文件,但我已经在本地仓库中跟踪了子模块。
有什么想法或建议吗?

4

1 回答 1

2

根据我的经验,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中没有具有该名称的文件或目录,否则它将覆盖子模块。

于 2012-12-19T16:51:34.973 回答