svn - 同一个 svn 存储库的不同 git-svn 克隆是否期望能够共享更改然后 git svn dcommit?

标签 svn git git-svn code-sharing

我在网上阅读了大量“从 svn 到 git”和其他“git-svn 工作流”文章,但我仍然认为它们经常处理过于简单的情况。他们通常针对那些只想在本地使用 git 和 hack,而不使用 git 的全部功能的人,例如 pull、fetch、merge 等多个开发人员之间的类似操作,这些开发人员都会使用 git-svn 克隆 svn 存储库,然后仍然希望能够随时将他们的更改推送到(官方)svn 存储库,并返回到 git 中工作并共享他们的东西等。

每当这些文章承认您不能在纯 git 中做所有事情时,后果和可能出现的错误从未得到明确解释(或者也许只有我?)。即使是 git-svn 手册页也提到了注意事项,但并不是很广泛。

根据我所读到的内容,我觉得以这种特定方式使用 git-svn 时可能会出现问题,我将在下面进行描述。谁能告诉我我的看法是否正确?

这是“想要”的做事方式:

  1. 我们在 svn 存储库中有一个项目
  2. 开发人员 A git-svn-clone 是 svn 存储库。他开始在本地进行黑客攻击
  3. 开发人员 B git-svn-clone 的同一个 svn 仓库。他开始自己破解东西。
  4. 这样做一段时间后,可能会添加开发人员 C/D/...,并让其他开发“标准”svn 的开发人员提交到原始存储库,git 用户会想要共享他们的代码并进行各种操作git 魔法。
  5. 这些 git 用户中的任何一个都希望能够将现在 merge 的更改推送到 svn(dcommit?)

我的问题是:我是在做梦吗?我前段时间在一本 git 书中读到,git-svn-clone 可以创建 git 存储库,它们当然是 svn 存储库的“镜像”,但是不同开发人员以这种方式创建的 git 存储库会有不同的“ids"和提交会有不同的哈希值。所以我的理解是那些 git 存储库不会共享任何共同的 git 祖先,因此将无法使用您需要共享、 merge 等的所有 git 命令。是真的吗,我们会在这个工作流程中遇到问题吗?

有时我读到这可以做到,至少使用一个“官方”裸 git 存储库,这将是唯一一个被 git-svn-clone 的存储库,所有 git 用户都必须从这个开始。然后你需要有人负责这个中央 git 仓库,并在将所有内容提交到 svn 仓库之前收集 git 开发人员之间的更改。这将是 git 用户“不知道”原始 git repo 来自 svn 的唯一方法,并让他们随心所欲地使用所有 git 命令。唯一需要精通 git 和 svn(并了解 git-svn 警告)的人是“merge 经理”(或他的称呼)。

我是否完全误解了 git-svn 警告?有没有更简单的方法来做到这一点?

最佳答案

我最近对此进行了很多试验,并认为我设法想出了一个有点管用的设置。是的,这是一个严格的 rebase-only 制度,是的,它很复杂,但您确实可以使用 Git 在本地工作(速度、历史、存储、索引等)。

我认为,当您与团队中的其他 Git 用户协作时,您可以在幕后使用分支,但我个人并没有对此进行太多试验。只要在提交之前将日志线性化,它就可以工作。

这是简短的版本(重复了很多已经说过的话):

  1. 将 Subversion 存储库克隆到中央服务器上的“获取”存储库中
  2. 在同一台服务器上初始化一个“裸”仓库
  3. 从fecthing repo推送到bare repo
  4. 让开发人员克隆原始代码库,然后
    1. git svn init svnurl 配置 git-svn 远程,和
    2. git update-ref refs/remotes/git-svn refs/remotes/origin/master 所以 git-svn 有一个指向修订的指针
  5. 自动(提交 Hook )拥有“获取”repo svn rebase,并推送到裸 repo
  6. 开发人员使用 git pull --rebase
  7. 从裸仓库中 pull 数据
  8. 运行 git svn dcommit 的开发人员首先必须重复上面的 update-ref,以防来自 SVN 的更新版本。

有一个 illustration of the workflow on this page (我需要更多的声望点才能内联图像)。更新:我们开始:

关于svn - 同一个 svn 存储库的不同 git-svn 克隆是否期望能够共享更改然后 git svn dcommit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1880405/

相关文章:

svn - 有谁知道类似SVN Time-Lapse View的Git工具

checkout 最新版本的 repo 后,vb.net 服务器出现 '/' 应用程序错误

eclipse - SVN:本次同步涉及的所有模型类型都被禁用

git - 如何在 `git log` 中的每个提交中显示分支名称

git - SVN-GIT 获取时无法连接到存储库

git - git-svn 的钩子(Hook)

SVN:为旧修订创建一个文件夹

GIT fatal error : Authentication failed in Visual Studio

git - 别名 git stash poop to pop?

git - 为什么 'git' 有效,但 'git-svn' 无效,我该如何解决?