git svn dcommit 无需变基

问题描述 投票:0回答:2

我们公司使用(并且支持!)SVN,但我倾向于使用 git。我想尝试的是拥有 git 存储库 - 每个项目一个,项目开发人员将能够从这个存储库中提取(当然,如果他们愿意的话,也可以互相提取)。但我仍然想将所有更改推送到 SVN,因为 SVN 是由我们的技术支持维护的。

我正在使用以下存储库测试该场景:

  1. SVN 存储库 - 这是由我们公司维护的,我们的团队应该在某个时候将所有更改推送到那里
  2. git-svn-clone - 这是从上面的 SVN 克隆的 git 存储库 - 所有项目开发人员都应该在这里推送他们的提交
  3. git-dev-clone - 这是开发人员的 git 存储库。

我注意到直接使用“git svn rebase”和“git svn dcommit”的唯一问题是,每次从开发人员的 git 存储库推送到 git-svn-clone 存储库后,我必须尽快重新设置开发人员存储库的基址更改将传播到 SVN 并重新设置基础。我想要实现的是避免每次推送后重新定位。

请注意,我假设每个项目开发人员都只会使用 git 存储库,没有人会直接使用 SVN。

我能够在推送后通过在“git-svn-clone”存储库中一一检查每个 git 提交并使用 SVN 客户端将这些更改提交到 SVN 来手动实现此行为。我相信“git svn dcommit”会做同样的事情,但它也会从 SVN 同步回来并更改提交 SHA 标识符,这迫使我重新设置基准。

P.S.:

--no-rebase
git svn dcommit
选项没有帮助,因为在第一次提交传播到 SVN 后,
git svn dcommit
不允许我向 SVN 提交更多更改,直到前一个被重新设置。我已经尝试过这种行为一次,可能会忽略一些东西。

svn git git-svn rebase
2个回答
7
投票

实际上比这更糟糕... dcommit 会更改上传到 SVN 的提交(添加 git-svn-id 行、更改作者信息等),即使您破解 dcommit 不尝试重新设置基准。

基本上,如果不进行变基,git-svn 就无法从 SVN 同步回来。正在开发一个新的 git<->SVN 界面,可能会消除此限制,但尚未准备就绪。

恐怕如果您想与 SVN 存储库保持同步,如果现在不进行变基,您的场景将无法工作。


0
投票

这个答案意味着使用

--no-metadata
将从提交消息中删除svn信息。 可能使 dcommit 使用相同的提交,但我尚未验证:

举个例子,如果我从本地 file: URL git svn init 一个存储库,然后从 https: URL 中拉取,则存储库中的每个提交都将被重复,因为所有带有 git-svn-id: file: 的提交都将被重复。 ///... 将作为 git-svn-id: https:///... 获取并使用新的 SHA1 进行编码。

如果我指定 --no-metadata 那么提交消息和这个 sha1 将是相同的,我可以从本地文件系统或 subversion 服务器获取,因为 git 中只会有任何给定 svn 提交的单个副本回购。

您可能还需要

--authors-file
以确保 git 和 svn 用户名完全匹配。

© www.soinside.com 2019 - 2024. All rights reserved.