我们正在玩Git,我们的一个开发人员希望从我们的存储库中删除旧的分支。这个请求的原因是'house keeping'。
我来自SVN背景,并没有精通Git,但根据我对SVN的经验,你从不删除分支;从第一天开始就是经验法则。
在SVN中删除分支没有任何好处,因为它的大小相对较小,并且可能包含重要的提交/合并信息,如果删除它们将完全丢失。而且,从保持住宅的角度来看,如果这个分支过于丑陋而无法看到,它总是可以移动到另一个与常规工作流程完全不同的位置。
有没有人有任何具体理由从现代版本控制系统中删除分支?
答案 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中删除过时的分支和标签没有任何悔意。它使/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.