创建一个本地SVN分支

19
我正在使用SVN仓库,不想创建新的SVN分支。相反,我想在本地创建一个分支,这可以通过Git轻松完成。
但我目前正在使用SVN,并需要从已修改的SVN版本中分支出来。实质上,我想要以下内容:
svn_repo_version = 2259 working_copy = modified 2259 new_local_svn_branch = 基于修改后的2259
最好的方法是什么?

4
虽然这并不是对你问题的直接回答,但你可以使用 git-svn 桥接器,从而能够在本地使用 git 与 SVN 服务器通信,这通常是我处理此类情况的方式。这样你就可以拥有本地分支了。详见:https://dev59.com/DlXTa4cB1Zd3GeqPxw33#5247542 - vcsjones
2
你需要在本地进行修订追踪吗?这在svn中不可能实现。 - Mike Miller
@vcsjones:我以前做过这个。我正在考虑去做。但是我想先检查一下我们是否可以直接在 svn 上进行处理。谢谢。 - agent.smith
@Mike:我的计算机会被本地副本覆盖。这就是我探索这个选项的原因。 - agent.smith
@vcjones - 我认为这实际上是原帖想听到的,而不是他们即将得到的答案。您应该把这作为一个答案。 - vickirk
@vickirk 我也考虑过这个问题,但是David W.写得比我更加深入思考,所以我给了他一个+1。 - vcsjones
2个回答

21

Subversion是一种集中式版本控制系统。集中式系统的一些优点在于它迫使每个人都使用相同的代码库。你不能将你的工作隐藏数月时间,然后突然在主要发布前两天贡献出来。不好的地方在于你无法真正拥有私有分支并且不让它出现在代码库中。

你完全可以创建自己的分支。事实上,我曾经为我们的开发人员提供一个特殊的“私有”目录,让他们可以放置自己的代码,进行私有分支。我有一个预提交脚本,只允许分支所有者进行更改,尽管我已经设置好了让任何人都能看到它。

如果你担心你的私有分支可能会堆积在“分支”目录中,请记住,当你完成时可以从“分支”目录中删除分支。或者,你可以请求一个并行的“私有”目录,在那里你可以放置你的东西。

如果你真的想创建一个真正的私有区域,可以在其中使用Subversion和检入代码而不出现在主要代码库中,我知道有两个选择:

  • SVK:这是一种使用Subversion作为后端的前端分布式版本控制系统。你可以创建自己的Subversion仓库,并在本地仓库和主仓库之间来回发布更改。

  • Git:Git配备了一个叫做“git-svn”的工具,它允许你将数据从Subversion存储库拉取到本地Git存储库中。然后你可以使用本地的Git存储库进行分支,稍后将更改推回到Subversion。甚至有一个名为TortoiseGit的Git版本。

唯一的注意事项是你需要用这两个工具中的命令行接口。


还有Mercurial,它可以使用subversion插件与SVN服务器进行接口交互 - 对于那些不太喜欢命令行的人,也有TortoiseHg可供选择。 - Steve Barnes
我正处于完全相同的位置,我正在使用一个私有的git svn存储库进行这些操作。当我完成一个功能后,我会在主(远程)分支上git rebase我的本地更改,并执行git svn dcommit。我已经像这样工作了很长时间。额外的好处是:您可以在家中没有连接到Subversion服务器时继续工作。 - hochl
2
你完全有能力创建自己的分支,但是在我的工作中我们被禁止这么做(因此我才来到这里...)。 - Vanity Slug

4
我很抱歉,您需要创建一个新的分支并不断合并任何更改。唯一的选择是简单地检出分支,保持更新并且不提交(或在提交之前切换)直到完成。如果您需要在原始分支/主干上工作,可以始终拥有两个工作副本。这远非理想,但这就是SVN的工作方式,考虑到当时的替代方案仍然非常好。

如果您需要管理本地历史记录,我个人通过我的IDE(Eclipse)进行管理。


当然,如果你是唯一在那个分支上工作的人,那么这并不是一个大问题,只需在提交之前切换到该分支。假设你不依赖svn来进行备份(这是不好的!)。 - vickirk
这又类似于有太多本地副本。我正在进行一些彼此不相关的小实验。因此,我需要单独的副本。但最终,我需要将它们全部合并。这就是为什么我在探索这个选项。我认为我需要使用svn-git。谢谢。 - agent.smith
@agent.smith 我认为你这么做是对的。当然,如果它们是实验性质的话,应该(遵循svn的理念)成为单独的分支。如果你愿意,并且你的质量程序允许的话,我会选择使用git-svn。;-) - vickirk
你说对了。这就是为什么我不想走这条路。我试图让svn客户端指向我的本地副本作为主要repo。但它不喜欢那样。 :( - agent.smith
1
@agent.smith 就我个人而言,如果这些只是我的实验,我会依赖于工作副本,并在本地使用任何我认为合适的工具(如eclipse本地历史记录、git-svn等)。如果它们需要演示、共享或记录,我会创建分支。你可以考虑推动转移到git!祝你好运;-) - vickirk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接