何时删除版本控制分支?

时间:2014-10-01 16:21:41

标签: git svn version-control branch

我们正在玩Git,我们的一个开发人员希望从我们的存储库中删除旧的分支。这个请求的原因是'house keeping'

我来自SVN背景,并没有精通Git,但根据我对SVN的经验,你从不删除分支;从第一天开始就是经验法则。

在SVN中删除分支没有任何好处,因为它的大小相对较小,并且可能包含重要的提交/合并信息,如果删除它们将完全丢失。而且,从保持住宅的角度来看,如果这个分支过于丑陋而无法看到,它总是可以移动到另一个与常规工作流程完全不同的位置。

有没有人有任何具体理由从现代版本控制系统中删除分支?

3 个答案:

答案 0 :(得分:7)

根据S.O问题的接受答案,"Git - When to Delete Branches“:

You can safely remove a branch with git branch -d yourbranch. 
If it contains unmerged changes (ie, you would lose commits by deleting the branch), 
git will tell you and won't delete it.

然而,另一位作者继续指出:

 the disadvantage of deleting branches is that you will break any hyperlinks 
 to those branches on GitHub. 

我发现的一个最大的论点是关于删除分支的缺点,在标题为“Why I don’t like feature branches”的文章中讨论了:

 If feature branches are deleted once they are merged into master, where do bug 
 fixes go? On a new feature branch or on master? There will no longer be an easy way 
 to find a list of the commits that went into a feature.

文章Git Basics: Cleaning up excess branches展示了如何选择这样做,如何自动删除分支并使其更快捷。

如果您有任何疑问,请与我们联系!

答案 1 :(得分:4)

本答案参考Subversion。

我对在Subversion中删除过时的分支和标签没有任何悔意。它使/tags/branches目录保持清洁。而不是数百个分支和标签,只有几十个可能出现。

如果某个分支不再用于主动开发,并且没有人对该代码感兴趣,为什么不删除它?如果您的代码修订版中没有客户正在使用,且没有开发人员不再参考,为什么不删除它呢?

我通常会为分支机构提供某种时间基础。一年没有完成任何工作?他们是删除的候选人。如果开发人员不再对代码感兴趣,那么就可以了。

在Subversion中,没有任何内容被永久删除你可以随时取回它:

假设我删除了代码版本1.6的标签。突然,一大批审计员出现要求检查代码的特定版本。我可以跑:

$ svn log -q -v http://server/repo/tags | less

并且,当我删除该标签时找到:

------------------------------------------------------------------------
r76229 | smith | 2011-09-01 11:26:47 -0400
Changed paths:
   D /tags/1.6

在修订版76229中删除了1.6标记,因此我知道该标记位于我的存储库的修订版76228中。我可以恢复该标记:

$ svn cp -r76228  http://server/repo/tags/1.6@76228 http://server/repos/tags/1.6

如果我只是想这段代码,我可以在不删除标记的情况下查看它:

$ svn co -r76228  http://server/repo/tags/1.6@76228

现在,审计人员可以开始工作并且纠缠于开发人员,让我处于分片状态。

答案 2 :(得分:2)

Git中的分支(一般来说)合并后无关紧要。它们仅在指向无法通过任何其他方式访问的唯一提交时才有用。

Git甚至提供git branch --merged,记录为

--merged is used to find all branches which can be safely deleted,
       since those branches are fully contained by HEAD.