我正在查看一个支持“插件”的 SVN 项目,我想在其中 fork 与该项目一起打包的插件之一。如何只在 svn 树中分叉该子目录?如果可能的话,我希望能够将以后的更改合并到上游。(我猜这可能是不可能的,没有意义。)。获取历史记录会很好,但是是可选的。
特别是我最擅长管理 hg 存储库,尽管我也使用过 bzr、git 和 darcs。
关于如何组织存储库有两个主要的 SVN 约定(请注意,这些只是约定,不必这样做):
repo_root -
trunk - Project1
- Project2
...
branches -
- branch1
- Project1
- Project2
...
- branch2
- Project1
- Project2
...
...
tags -
- tag1
- Project1
- Project2
...
- tag2
- Project1
- Project2
...
...
或者:
repo_root -
- Project1
- trunk -
- branches -
- branch1 -
...
- tags -
...
- Project2
...
如果您的存储库已经以第二种方式组织并且您的插件是一个单独的项目 - 那么您只需将其分支(svn copy repo_root/Project/trunk repo_root/Project/new_branch
- 插入 http、svn 等,如适用)。
如果您的存储库以第一种方式组织,甚至以第二种方式组织,但您的插件不是具有自己的主干/分支/标签的单独项目,您可以创建一个仅包含插件的分支:svn copy --parents repo_root/trunk/[path_prefix]/plugin repo_root/branches/new_branch/[path_prefix]/plugin
.
然后,您必须小心从主干(或其他分支)合并到此分支,仅对插件所做的更改(例如 not svn merge repo_root/trunk ...
, but svn merge repo_root/trunk/[path_prefix]/plugin ...
)。
您应该不会遇到比通常(例如完整的主干或分支)SVN 分支和合并更多的问题。
一个重要的注意事项:如果插件依赖于项目的其他部分(很可能是这种情况),则在分支上开发时必须维护一个混合工作副本:检查主干,cd 到插件目录,然后运行svn switch ^/branches/new_branch/[path_prefix]/plugin
.