gpt4 book ai didi

git - Git、Git-Submodule 和 SVN 服务器的故事

转载 作者:太空狗 更新时间:2023-10-29 13:43:53 25 4
gpt4 key购买 nike

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

  • 项目 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 存储库,我运行 git svn rebase 并获得以下内容:

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

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

最佳答案

根据我的经验,git-svn 不能与 Git 子模块一起工作,主要是因为它向 SVN 发送更改的方式:如果你稍微调试一下,你会发现它向 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中没有同名的文件或目录,否则它会覆盖子模块。

关于git - Git、Git-Submodule 和 SVN 服务器的故事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13954907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com