你能解释为什么要在Git中锁定远程分支吗?

时间:2014-09-02 18:33:40

标签: git version-control tfs

当观众中有人问我如何锁定远程分支,阻止其他人推送时,我正在接受关于GIT的介绍性演示。

我理解为什么一直在使用TFS的人对此感到疑惑,但有没有理由说明为什么需要在GIT中锁定远程存储库?如果是的话,哪些?

3 个答案:

答案 0 :(得分:4)

在TFS中锁定分支使其成为只读(请参阅" Making a TFS Branch Read-Only")

Git本身无法将分支设为只读:如果您可以访问git repo,则将其全部克隆(使用其所有分支),并且可以在任何分支中提交。

您可以控制推送的内容:

这意味着你可以制定一个策略(钩子或gitolite),这将阻止修改的分支被推送到upstream repo

答案 1 :(得分:0)

在大多数情况下,git有不同的处理这种情况的方法(主要是:标记分支,删除分支)但是,为了回答你问的问题 - 你为什么要这样做? - 答案是:防止分支改变。

以下是一个有用的示例:许多SCM组织在产品接近发货时创建分支,以便分支可以受到严格的变更控制,但开发可以在master(/ main / trunk /)上继续等在其他环境中。)

所以你可能有,例如一个专门用于v2.1的分支,它在发送之前已经被发送到QA,而v2.1分支上允许的唯一变化将是管理层认为的那些变化重要的是包含在v2.1中。与此同时,团队的其他成员正在处理master,分支v2.2v2.5Experimental-feature-branch等。

然后v2.1发货。

同样,在git中,通常只标记发布的内容(SCM / SQA中的一个重要概念是始终能够从用于创建客户的完全相同的源重新创建交付的构建)但是,既然有一个具有该名称的分支,那么在它的生命周期结束时“冻结”该分支是不是很方便,以便没有人可以进一步改变它?

这主要是来自svn和类似的其他环境的剩余部分。一个以git为中心的商店可能会说“只是标记它并删除分支!”,但旧的习惯很难,人们喜欢继续使用熟悉的东西,所以他们最终会做一些事情,比如冻结分支。

这肯定是来到这个问题,寻找一种方法来冻结我的git分支! :)

答案 2 :(得分:-1)

git方法"锁定"唯一的代码状态是创建和推送标签。最常见的动机是跟踪代码的实际发布版本,例如:

git tag v0.1.37
git push --tags

现在该标签可以检出,就像它自己的分支一样。对标签有一个强大的命名约定很重要,因为你希望它绝对清楚任意状态所代表的含义。例如,如果它是应由命名约定指示的beta版本。由于git是一个分布式系统,因此技术上可以让提交者覆盖已发布的标签(使用--force),但这种行为并不常见(当然远不如重新分支一个分支)。

或者或另外,您可以使用gitosisgitloite和其他高级工具来提供更精细的安全性。