将 SVN 存储库的一部分镜像到工作副本

Posted

技术标签:

【中文标题】将 SVN 存储库的一部分镜像到工作副本【英文标题】:Mirroring Part of a SVN Repo to a Working Copy 【发布时间】:2014-11-17 12:15:34 【问题描述】:

我对第三方的 SVN 存储库具有只读访问权限,他们不时对其进行提交。我们就叫它http://foo.com/svn吧。

我想将此镜像到我控制的现有存储库中的子文件夹。让我们称之为http://bar.com/svn/myfork

我将在我自己的项目分支上工作,但我仍然想带来他们所做的更改。

我只想将第三方的更改镜像到我的工作副本,以便在提交之前手动管理任何冲突。

我该怎么做?

svnadmin dump/load 似乎想使用整个 repos。 svnrdump 想要将更改加载到 repo,而不是工作副本。 我无法应用补丁,因为我的工作副本中的修订号与补丁中的修订号不匹配。 手动复制文件取代了我的更改。

我使用的是 Windows(svn 和 TortoiseSVN)。

【问题讨论】:

【参考方案1】:

据我所知,与此最接近的功能是svn:externals;但是,这仅存储一个相对的,或者在这种情况下,是指向外部存储库的绝对 URL 指针。简而言之,文件不会存储在您的存储库中,并且对外部内容的任何提交尝试都将转到第三方存储库。

我已经在 SVN 中存储了来自其他存储库的签出,我可以从第三方存储库中带来更改,并将这些更改和我自己的更改提交到我自己的存储库(私有分支),当第三方存储库是通过 git 或 mercurial 访问。我会将第三方存储库检查到我的 SVN 工作目录中,并将所有内容提交到 SVN,包括 .hg/.git 文件夹。这种方法虽然无疑有点老套,但对我有用,如果我正确理解您的问题,它也会对您有用如果其中一个存储库是不是 SVN。

如果无法使用 git 或 mercurial 访问 foo 并且无法更改 bar 的版本控制系统,我想知道是否可以在您的计算机上设置第二个 SVN 副本使用不同的环境 - 我在想Cygwin - 并且其中一个安装将版本控制文件存储在.svn 和一个在_svn 中。我猜这会起作用,因为 Cygwin 的 svn 将是在具有自己的环境的类 Unix 文件夹树中单独安装。 (我刚刚尝试过,它应该可以工作)。

步骤可能是:

    使用 svn 和 change Cygwin svn to use _svn folders 安装 cygwin(我在 Cygwin 中通过设置环境变量 SVN_ASP_DOT_NET_HACK 进行了尝试,它有效 - 您必须在 bash 中设置环境变量,而不是在 Windows 级别不然乌龟也会捡起来的)

    使用 Cygwin svn 将第三方存储库检出到您的工作副本中

    提交第三方存储库文件,可选择将其_svn 文件夹包含到您的存储库中(我会包含它)

    您现在可以使用 Cygwin svn 更新第三方存储库并将第三方更改提交到您的存储库,此外还可以将您自己的更改提交到您自己的存储库。您也可以将更改提交回第三方存储库!

同一主题的另一个选项可能是拥有第二个设置了环境变量的 Windows 帐户,然后登录到该帐户以最初检查第三方存储库并使用 TSVN 从中删除更新。

【讨论】:

以上是关于将 SVN 存储库的一部分镜像到工作副本的主要内容,如果未能解决你的问题,请参考以下文章

可以强制 SVN 将目录视为工作副本吗?

将 SVN 存储库的一部分合并到另一个具有历史记录的存储库

Subclipse svn:忽略

SVN 错误 - 不是工作副本

子剪辑 svn:忽略

将文件添加到已设置的 svn 存储库