同一个svn存储库的不同git svn克隆是否能够共享更改,然后git svn DCOMIT?

同一个svn存储库的不同git svn克隆是否能够共享更改,然后git svn DCOMIT?,svn,git,git-svn,code-sharing,Svn,Git,Git Svn,Code Sharing,我在网上读了很多“从svn转到git”和其他“git svn工作流”的文章,但我仍然认为它们经常处理过于简单的情况。他们的目标通常是那些只想在本地使用git和hack的人,而没有使用git的全部功能,比如多个开发人员之间的pull、fetch、merge等,这些开发人员都会使用git svn克隆svn存储库,然后仍然希望能够随时将他们的更改推送到(官方)svn存储库,回到git工作,分享他们的东西等等 每当这些文章承认你不能在纯git中做所有你想做的事情时,后果和可能的错误永远不会被清楚地解释(

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

每当这些文章承认你不能在纯git中做所有你想做的事情时,后果和可能的错误永远不会被清楚地解释(或者可能只是我?)。甚至git svn手册页也提到了注意事项,但并不是以广泛的方式

根据我所读到的,我觉得以那种特定的方式使用git svn可能会有问题,我将在下面描述。有人能告诉我这件事是否正确吗

以下是“想要”的做事方式:

  • 我们在svn存储库中有一个项目
  • 开发一个git svn克隆的svn repo。他开始在本地进行黑客攻击
  • 开发人员B git svn clone的svn repo相同。他开始自己动手做事情
  • 在这样做了一段时间之后,可能会添加devs C/D/…,并让其他开发人员对原始repo进行“标准”svn提交,git用户将希望共享他们的代码并执行各种git魔术
  • 这些git用户中的任何一个都希望能够将现在合并的更改推送到svn(dcommit?)
  • 我的问题是:我在做梦吗?我不久前在一本git书籍中读到,git svn clone可以创建git存储库,这当然是svn repo的“镜像”,但不同开发人员以这种方式创建的git repo将具有不同的“ID”,提交将具有不同的哈希。所以我的理解是,这些git repo不会共享任何共同的git祖先,因此无法使用您需要的所有git命令来共享、合并等等。这是真的吗?我们是否将面临此工作流的问题

    有时我读到这是可以做到的,至少使用一个“官方”的裸git存储库,这将是唯一一个被git svn克隆的存储库,所有git用户都必须从这个存储库开始。然后,您需要一个负责这个中心git回购的人,在将所有内容提交给svn回购之前,收集git开发人员之间的更改。这将是git用户“不知道”原来的git repo来自svn的唯一方法,并允许他们随意使用所有git命令。唯一需要精通git和svn(并了解git-svn的注意事项)的人是“合并经理”(或者他叫什么名字)


    我是否完全误解了git svn的警告?有更简单的方法吗?

    我以前做的是创建一个初始的git svn克隆,然后在使用git的开发人员之间共享he.git,所以我们有完全相同的引用。

    它似乎工作正常,因为我们能够在git用户之间使用“特定的git功能”,只要我们停留在一个线性树中(即重定基址而不是合并)。

    一旦您进入“分布式”问题,您最好在开发人员之间克隆一个简单的git repo。
    关于向公共SVN回购的导出-导入阶段,供其他人使用,脚本
    可以帮助封装魔法


    在Git和SVN回购中工作时的其他注意事项可以在问题中找到。问题当然是步骤4。dcommit尝试向服务器重播本地历史记录。Dcommit假装您是SVN客户。现在,如果您要提交的代码不仅仅来自您,那么很难将其提交给SVN

    以下是政府对此事的评论:

    • 为了简单性和与SVN的互操作性,它是 建议所有git svn用户 直接从中克隆、获取和提交数据 SVN服务器(远程SVN 存储库),并避免所有 git克隆/拉/合并/推操作 在git存储库和分支之间 可以通过git svn检索 克隆和,它们也用于推送 将变更集返回到远程SVN 存储库
    • git分支之间交换代码的推荐方法 而用户是git格式的补丁和git am,或只是向svn提交git svn数据 存储库
    • 由于git svn dcommit在内部使用git svn rebase,因此任何git分支 git svn数据提交之前的git推送到 它们将需要强制覆盖 远程服务器上现有ref的 存储库。这通常是 被认为是不好的做法,请参见 有关详细信息,请参阅git推送文档
    • 不建议在我们计划创建的分支上运行git merge或git pull git svn数据提交自。SVN没有 以任何合理或合理的方式代表合并 有用的时尚让用户使用SVN 无法看到我们进行的任何合并。 此外,如果我们使用git merge或git 从作为 SVN分支的镜像,git SVN D委员会可能会犯错误 分支机构
    • git clone不克隆refs/remotes/hierarchy或 任何git svn元数据或配置。所以 使用创建和管理的存储库 使用git svn应该使用 对于克隆,如果要进行克隆 一点也不
    • 我们不应该在需要更改时使用git commit的--amend选项 已经提交了。它是 被认为是不好的做法--修改 我们已经推到了一个 其他用户的远程存储库,以及 与SVN的dcommit类似。 有关这方面的更多信息,请参见 在修改单个提交和
    我发现这建议保留一个单独的分支,以便与Subversion存储库同步,这样它仍然可以
    $ subgit configure $SVN_REPOS
    # Adjust $SVN_REPOS/conf/subgit.conf to specify branches, tags and other options;
    # Adjust $SVN_REPOS/conf/authors.txt to specify git & svn authors mapping
    $ subgit install $SVN_REPOS
    ...
    $ INSTALLATION SUCCESSFUL