Git,Git-Submodule和SVN服务器的故事

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

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

Project X将Project y引用为git子模块:

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

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

如果我想从svn服务器更新我的本地git repo,我运行git svn rebase并获取以下内容:

error: The following untracked working tree files would be overwritten by checkout

Git列出了子模块的所有文件,但我跟踪了本地仓库中的子模块.
任何想法或建议?

最佳答案 根据我的经验,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中没有这样名称的文件或目录,否则它将覆盖子模块.

点赞