SVN 将基本代码分支到更新的项目中

SVN branching base code into a project that updates

首先,如果有任何重复的问题,我深表歉意。我确实(有点)尝试找到它,但没有成功。

场景:

假设您已经编写了自己的 PHP 框架(正如您所做的那样),就目前而言,它是一个 shell 没有作用域(应该如此)的框架。然后你有一个项目,只需在这里和那里添加一些文件就可以让你的魔法发生,对吧?

我有存储库 A(框架),其中包含我所有重新发明轮子的革命性源代码。我想要存储库 B(项目),它应该包含完整的框架(可能是 Repo A 的一个分支)以及使奇迹发生的几个项目文件。我希望 Repo B 更新对 Repo A 所做的任何修改,但对项目的任何更改仅限于 Repo B(因此不提交 A)

我的初步想法:

使用分支创建框架的副本,然后添加我的项目文件,无意合并。这样做的问题是分支不会更新复制后所做的任何更改,因为 SVN 计划稍后合并更改。我还尝试将框架保存在一个文件夹中(checkout repo A),并将项目特定的代码保存在另一个文件夹中(checkout repo B),但这不是一个很好的解决方案,因为这意味着我不能使用 1 个庞大的文件夹。

我的实际问题:

有没有办法让一个存储库扩展(仅更新)另一个存储库,或者以分支副本(项目)在复制后跟踪修订的方式进行分支。

要明确:

  1. 我不想在子文件夹中单独存储库,例如 Symfony 使用 src/A 和 src/B 和 vendor/C 等

  2. 我知道冲突,因为项目可能会到处覆盖框架文件。在解决任何更改时,归结为尽职调查

  3. 到"just use git"不是答案。我的 SVN 服务器需要数周的时间才能设置和更改,这将是一场噩梦,所以不是一个选择。

我的设置: 在我的本地开发网络中,我在 windows 上使用 Tortoise,在 linux 上使用 svn。回购服务器是远程的 运行 CentOS 6 上的 SVN 1.5.2(如果你问我为什么是 1.5.2,你最好留出 3 个小时)

我真的希望我在 SVN 世界中遗漏了一些东西。我只分支过几次,所以希望我只是不知道我在做什么,有人可以说 "Here, dumb ass"。非常感谢任何反馈,干杯。

如果您将通用代码视为第 3 方代码,那么您所描述的内容听起来像是 Subversion Vendor Branch strategy(实际上并不是特定于 SVN 的)

来自 SVN 文档:

The solution to this problem is to use vendor branches. A vendor branch is a directory tree in your own version control system that contains information provided by a third-party entity, or vendor. Each version of the vendor's data that you decide to absorb into your project is called a vendor drop.

Vendor branches provide two benefits. First, by storing the currently supported vendor drop in your own version control system, you ensure that the members of your project never need to question whether they have the right version of the vendor's data. They simply receive that correct version as part of their regular working copy updates. Second, because the data lives in your own Subversion repository, you can store your custom changes to it in-place—you have no more need of an automated (or worse, manual) method for swapping in your customizations.

但是,您也可以考虑像管理第 3 方库或包一样管理您的通用代码。这样做将允许您使用其他包管理工具——而不仅仅是源代码控制系统。例如,考虑 Composer.