【问题标题】:modify 3rd party code and merge updates if necessary - Git or SVN?如有必要,修改第 3 方代码并合并更新 - Git 还是 SVN?
【发布时间】:2012-01-20 09:59:27
【问题描述】:

过去几天我试图建立一个适当的本地 SVN(带有 svn:externals)以便能够:

  • 拥有本地 SVN 存储库(简单)
  • 跟踪我对第 3 方代码所做的更改(简单)
  • 不时合并官方更新(远程 SVN 仓库)

使用 SVN,可以通过将 svn:externals 设置为不时合并到主干的单独早午餐来完成。

我必须承认我在实施这个策略时仍然存在问题,但问题是:

用 Git 实现会更简单/更可取吗? 3rd 方代码也有 Git repo。 由于我现在设置了本地 CVS,因此我可以使用任何 (Git/SVN)。

你会推荐什么?如果用 git 做,我看什么命令?我在某处读到,使用 Git 更容易合并,那么它会是满足我需求的更好解决方案吗?

非常感谢您的建议。

p/s/ 我在 Linux 上。

【问题讨论】:

    标签: git svn


    【解决方案1】:

    使用 SVN,您无法跟踪对第三方存储库所做的更改。我知道没有办法做到这一点。 (除非我弄错了,svn:externals 不会那样做。svn:externals 功能只允许您从第三方存储库中选择特定版本,但如果不提交到外部存储库,则无法在其中提交更改。 )

    Git 旨在完全做到这一点——您创建一个分支,并合并来自上游的更改。事实上,Git 默认情况下就是这样做的。它不需要额外的配置。如果主项目是Git,你可以使用git submodule作为svn:externals的大致等价物。

    【讨论】:

    • 感谢您的回答。我需要建立一个本地存储库吗?或者我只是git clone path/to/3rd/party/repo myFolder 然后在那里更改我的更改?然后时不时做git pull?
    • git clone命令的目的是创建一个本地仓库,所以没有多余的步骤。您可以每隔一段时间就git pull,或者您可以git fetch 后跟git merge(这是同一件事,但允许您查看更改而不是盲目地提交它们)。
    • 只是为了确定,我不需要设置任何以后合并的分支,对吧?我只是 git clone 它,进行更改/添加文件/提交,然后执行 git pullgit fetch + merge
    • 对。如果您从具有 master 分支且没有其他分支的源克隆存储库,您将自动获得具有两个分支的存储库:masterorigin/masterorigin/master 分支不会被克隆,你也不会改变它,它是一个“远程分支”。
    • 刚刚检查我只有 1 个分支:*master 我应该在修改之前添加一个远程分支(如何?)?
    【解决方案2】:

    由于您在本地使用它,您可以使用基于文件的 SVN Tortoise...问候

    【讨论】:

      【解决方案3】:

      如果你迁移到 DVCS(merge 更智能,是的)并尝试使用第一个 DVCS,不要使用 Git,选择 Mercurial(使用 MQ 或分支 /anonymous 或 named/)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-29
        • 1970-01-01
        • 2013-09-26
        相关资源
        最近更新 更多