Visual studio TFS 2010禁止直接编辑阶段分支(仅允许从开发人员合并)

Visual studio TFS 2010禁止直接编辑阶段分支(仅允许从开发人员合并),visual-studio,tfs,merge,Visual Studio,Tfs,Merge,我有以下情况: 我有一个开发和阶段分支 代码被检入到Dev中,并且在某个时刻,来自Dev的变更集被合并到Stage中 没有直接编辑/签入发生在stage上(除了来自dev的合并之外) 我想做的是确定/验证没有新代码直接引入到stage分支中,这些代码不是来自Dev中的变更集 似乎不可能(从源代码管理的角度)确保Stage只允许从dev签入合并(因为在执行合并后,所有操作似乎都是merge,edit),所以我想我可以做的是创建一个TFS签入策略,尝试将合并的更改与其源代码进行比较 我创建了一个

我有以下情况:

  • 我有一个开发和阶段分支
  • 代码被检入到Dev中,并且在某个时刻,来自Dev的变更集被合并到Stage中
  • 没有直接编辑/签入发生在stage上(除了来自dev的合并之外)
我想做的是确定/验证没有新代码直接引入到stage分支中,这些代码不是来自Dev中的变更集

似乎不可能(从源代码管理的角度)确保Stage只允许从dev签入合并(因为在执行合并后,所有操作似乎都是
merge,edit
),所以我想我可以做的是创建一个TFS签入策略,尝试将合并的更改与其源代码进行比较

我创建了一个从
PolicyBase
派生的类,它超越了
Evaluate
方法。在
Evaluate
方法中,我旋转
this.PendingCheckin.PendingChanges.CheckedPendingChanges
并检查
.IsMerge
属性和
.ServerItem
属性,以查看所讨论的项是否是合并项,是否要发送给我的Stage分支

然而,当我仔细研究每一个更改时,我看不到跟踪其沿袭的方法,也看不到从它可能起源的地方访问父级的方法(即:Dev分支版本)


如何只允许合并,而不允许对我的后台分支进行直接编辑?

在TFVC中实现这一点的唯一方法是让您拥有所有合并的所有权。如果您进行合并,那么您就拥有了控制权。许多具有这些严格策略的组织都会创建一个自动脚本来进行合并,如果存在任何冲突,就会拒绝。这样,在通过web门户请求合并之前,开发人员被迫从暂存拉到开发人员并解决所有冲突。如果合并成功,则它是由单个服务帐户在服务器上执行的,并且编码人员不需要任何类型的登台权限

然而,这是不正常的。要么你不信任你的程序员,要么他们没有足够的能力在你的代码库中工作


另一种方法可能是在TFS中移动到Git进行源代码控制。在Git中,合并是不可编辑的,并且作为单个操作执行,而不是在TFVC中进行合并/编辑

看起来您正在寻找:它包括页面底部的源代码。@jessehouwing我实际上已经实现了类似的代码。这段代码本身并不能防止有人在合并文件的后台“偷偷地”进行更改。从本地工作区的Dev分支完成合并后,在签入之前,开发人员可以编辑执行合并的源文件并添加其他代码。这是可能的,因为来自Dev的合并操作会导致对工作区中的Stage文件执行“merge,edit”操作。但是,这段代码在阻止未合并文件的Stage分支上的直接签入(编辑)方面确实非常有效。因为人们总是需要解决合并冲突的能力。只要您需要支持合并冲突解决,您就需要允许这样做。这不是我的政策;然而,我被要求想出一个办法来执行它。谢谢你的意见。公司之所以这样对待他们的代码和员工,唯一的原因是我们允许他们这样做。是的,给每个人签出权限,但撤销签入权限,只有少数人例外。这是一个很好的方法,可以导致挫折感、延迟集成、瓶颈和不信任。