删除 TFS 2010 中的分支关系

2023-11-25

我刚刚接手了一个 TFS 2010 团队项目。分支层次结构是 Dev 是 Test 的子级,Test 是 Main 的子级,例如

Main

----Test

--------Dev

然而,在过去的某个时候,有人在 Dev 和 Main 之间进行了毫无根据的合并。这引起了很大的混乱,因为开发人员现在不小心将代码直接从 Dev 合并到 Main。

当代码遵循正确的流程并从测试合并到主分支时,这会导致不可预见的合并冲突,并且可能会造成未经测试的代码被提升到主分支的情况。

有没有办法在不删除分支的情况下去掉Dev和Main之间的分支关系?我想保留 Dev 分支及其与 Test 的关系。只需删除与Main的关系即可。

我尝试将分支转换为文件夹以删除关系,但这不起作用。我可以重新设置分支的父级,但似乎没有任何明显的方法可以完全消除这种关系。我可以将分支转换为文件夹,然后删除它并从测试中重新分支,但这意味着确保代码库同步,这可能很难实现。


TFS 不一定基于分支对象构建合并候选以实现向后兼容性(分支对象是 TFS 2010 中的新功能)并支持无基合并(一旦在两个路径之间执行无基合并,这些路径将与合并关系一起存储以供将来使用)合并。)

我建议在这里使用自定义签入策略,强制从开发 -> 测试或测试 -> 开发进行合并,并且不要跳过中间级别。这还允许您将 Dev 作为分支对象,因此您仍然可以获得所有不错的功能,例如分支可视化。

我可以提供一个非常粗略、非常伪代码的例子来说明我的想法。 (这很粗糙,因为我很懒,也因为我把时间花在 Java SDK 而不是 .NET SDK 上,而且我意识到大多数人都想要 .NET 签入策略。但主要是因为我很懒。)

/*
 * Create a dictionary of merge targets to allowable merge sources.
 * For an item in this list, the allowable merge sources are a whitelist.
 */
private readonly Dictionary<String, List<String>> restrictedMergeTargets =
    new Dictionary<String, List<String>>();

public static MergeWhitelistPolicy
{
    /* Only allowed merges to $/Main from $/Test. */
    List<String> mainWhitelist = new List<String>();
    mainWhitelist.add("$/Test");
    allowedMerges.put("$/Main", mainWhitelist);

    /* Only allow merges to $/Test from $/Dev. */
    List<String> testWhitelist = new List<String>();
    testWhitelist.add("$/Dev");
    allowedMerges.put("$/Test", testWhitelist);
}

public PolicyFailure[] evaluate(PolicyContext context)
{
    PendingChange[] pendingChanges = GetPendingCheckin().GetCheckedPendingChanges();

    foreach(PendingChange change : pendingChanges)
    {
        if(! change.IsMerge())
        {
            continue;
        }

        foreach(KeyValuePair<String, List<String>> restrictedTarget : restrictedMergeTargets)
        {
            if(VersionControlPath.IsChild(restrictedTarget.GetKey(), change.GetServerItem())
            {
                /* Whitelisted merge path - investigate. */
                foreach(String allowedSource : restrictedTarget.GetValue())
                {
                    foreach(MergeSource mergeSource : change.GetMergeSources())
                    {
                        if(! VersionControlPath.IsChild(allowedSource, mergeSource.GetServerItem()))
                        {
                            return new PolicyFailure("Merge from " +
                                mergeSource.GetServerItem() + " to " +
                                change.GetServerItem() + " is disallowed.");
                        }
                    }
                }
            }
        }
    }

    return null;
}

当然,这有几个问题。您当然不想将可接受的合并关系列表硬编码到策略中 - 您可以将其外部化到配置文件中,或者您可以查询服务器上的合并关系并缓存它们(如果您有特定的规则,例如只有直系后代可以)合并。 (缓存这一点很重要,因为签入策略评估经常运行并且预计会很快。它甚至可能偶尔在 UI 线程上运行(尽管我对此表示怀疑),因此您的情况可能会有所不同。)

另外,我的路径测试代码非常草率,主要只是为了节省评论中的一些空间。 (还有前面提到的我的懒惰。)

我希望这是一个好的开始。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除 TFS 2010 中的分支关系 的相关文章

  • 将 TFVC 代码从一个集合移动到另一个集合(包括历史记录)

    我需要将一些代码从一个项目集合中的 TFVC 移动到另一个集合中的项目 我还需要保留签入历史记录 我不担心更改集 ID 但确实希望保留历史记录中的评论 人物和时间以及所做的更改 被移动到的项目将是空的 这将在本地使用 TFS2017 Upd
  • 在没有 IIS 的计算机中打开设置为 IIS 目录的 Web 项目,指向嵌入式服务器

    我可以在TFS中打开一个Web项目 但是 在我的 QA 环境中 我必须将其更改为使用 IIS 在我的本地开发环境中 我没有IIS 无法安装它 新的公司规则拒绝我进行 QA 访问 并且我无法打开我的 Web 项目来在我的计算机中修复它 当我打
  • 使用 TFS 在线服务构建时,有什么方法可以签署 Clickonce 应用程序吗?

    我已在我的单击一次应用程序中启用了签名 但构建服务器 TFS在线服务 没有证书 有什么方法可以将证书包含在存储库中并让构建服务器对其进行签名 或者我是否必须禁用签名并在之后手动执行此操作 我没有从商店中挑选证书 而是签入文件并从文件中挑选
  • 忽略挂起的更改中的某些文件

    这是我的问题 我已经更改了解决方案中的某些文件 假设是 Web config 并且永远不想签入 因为这些更改仅涉及我的计算机 有没有办法在 TFS 中忽略某个文件中的更改并将其从挂起的更改窗口中删除 当然 我可以在每次签入时跳过这个文件 但
  • “解决方案的源代码控制之间似乎存在差异......”

    我们在 Visual Studio 2005 和 TFS 中经常遇到此错误 任何人都可以帮助我们查明此消息的原因吗 完整的消息是 解决方案的来源之间似乎存在差异 控制有关某些项目的信息以及 项目文件 为了解决这个差异 有必要检查 项目文件并
  • 如何使用 C# API 移动 TFS 文件?

    我一直在谷歌上搜索如何使用 TFS API 通过 C 移动文件 我们的想法是有一个文件夹 开发人员可以在其中放置数据库升级脚本 构建过程会在该文件夹中创建一个构建脚本 并将该文件夹上的所有文件移动到具有我们刚刚创建的数据库构建版本的新文件夹
  • Buid 定义:调用 COM 组件返回了错误 HRESULT E_FAIL

    当我向 TFS 添加新工作项时 构建定义会抛出异常 如下所示 Exception Message Error HRESULT E FAIL has been returned from a call to a COM component t
  • 将 git dcommits 切换到 svn 分支

    I had master dcommit到 和rebase来自 颠覆trunk 我创建了一个中间 Subversion 分支tc 合并来自 2 个不同分支的更改 使用 git branch master git svn branch tc
  • 我们是否错误地使用了 TFS 2010? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们的团队是 TFS2010 的新手 从历史上看 我们一直使用我们自己的业务需求矩阵 可追溯性矩阵 Excel 电子表格 它具有典型的列 例如
  • 使用 VSTest 代替 MSTest 运行单元测试用例

    我在 TFS2010 服务器上有一个 x64 平台 C 解决方案 VS2012 我已将一个单元测试项目 也是 x64 附加到此解决方案并创建了一个构建定义 当我对构建进行排队时 它成功了 但单元测试用例不会被执行 这是因为 MSTest 是
  • 分布式环境中的 MS Team Foundation Server - 提示所需技巧

    是否有人在地理分布的团队中使用 Team Foundation Server 我们在英国 尝试与澳大利亚的团队合作 但我们发现这非常困难 我们主要的两个问题是 事情正在向我们检查 而我们无需询问最新情况 即使使用代理 大多数事情也需要一段时
  • 如何从本地 TFS2015 获取 PAT

    我们希望将自定义步骤从 XAML 构建迁移到本地 TFS2015 中的新构建任务 我安装了 NodeJS 和 tfx cli 但是当 tfx cli 想要连接到 TFS 时 我需要提供 pat 个人访问令牌 但我找不到在哪里可以获得它 所有
  • 我可以将 Team Explorer 2010 与 Visual Studio 2008 一起使用吗?

    我觉得标题已经说得很清楚了 但我也想说一下为什么 我已经下载了 TFS 2010 和 Team explorer 2010 但我仍在使用 VS2008 短期内没有更改计划 我的问题是 我可以一起使用它们吗 另外 我的VS只是专业版 我不想下
  • 我如何知道自上次 TFS 签出以来我实际更改了哪些文件?

    我在 VS2010 中从 TFS 中检查了一堆文件 并对其中几个进行了更改 如何查看我实际更改了哪些文件 使用 TFS 电动工具 打开 Visual Studio 命令提示符 导航到您的工作区 然后键入 tfpt uu noget recu
  • 如何使用 TFS build 2015 运行自动硒测试?

    我有 NUnit 硒测试 已嵌入到单元测试中 并且我正在尝试使用 TFS Build 2015 运行它 所有测试在本地运行得很好 但不是从 TFS 服务器运行 我启用了代码覆盖率 发现 Module unittests dll 工作正常 大
  • TFS 构建 - 部署/包目标未运行

    我们设置了一个 TFS 构建定义 在其中传递以下额外的 MSBuild 参数 p DeployOnBuild true DeployTarget PipelinePreDeployCopyAllFilesToOneFolder Packag
  • Visual Studio 2015 Enterprise 附带测试自动化工具?

    管理层正在研究自动化测试 我们的 QA 主管想知道 Visual Studio 2015 Enterprise 和 Team Foundation Server 2012 是否附带了任何自动化测试工具 据我所知 微软提供了一套工具作为一个单
  • 如何从 TFS 获取类似 git 的统计信息

    我已经与 TFS 合作几个月了 希望获得一些基本统计数据并将其提供给我们的团队 在 git 中 我可以检索有关 按作者提交 和 按日期提交 等的统计信息 我想显示来自 TFS 或来自 TeamCity 的类似统计数据 这可能吗 我发现研究
  • 本地git,推送到tfs远程repo

    我厌倦了向我的队友解释使用 DVCS 相对于 CVCS 的好处 他们中的一些人害怕学习曲线 另一些人则看不出任何原因 因为对他们来说 这都是一样的 就我个人而言 我对 TFS 及其问题感到非常厌倦 每当我需要进行一些小的 修复 时 我都必须
  • 如何让 Visual Studio Team Foundation Server 查看我将代码移至其他文件夹?

    我将一些代码从 C 驱动器移至 D 驱动器 当我打开解决方案时 它告诉我 该解决方案似乎处于源代码控制之下 但其绑定 找不到信息 因为无法恢复 自动丢失信息 其绑定的项目 丢失将被视为不受源代码控制 所以我尝试永久删除绑定并下载最新版本 现

随机推荐

  • 负载平衡服务器上的 ASP.NET 表单身份验证

    在负载平衡服务器上使用默认表单身份验证 见下文 是否存在任何可能的问题 如果可以的话 我能做些什么来防止这些问题发生
  • 使用 .NET Core API 在 Angular 7 中登录 Google

    我正在尝试在我的 Angular 应用程序中实现 Google 登录 如果我尝试调用外部登录服务器的 api 端点 则会返回 405 错误代码 如下所示 访问 XMLHttpRequest https accounts google com
  • 如何在 Laravel 5.1 中编写这个(左连接、子查询)?

    如何在 Laravel 5 1 中编写此查询 SELECT p id p title p created at p updated at u name COALESCE c comments count 0 AS comments coun
  • 如何根据模板参数有条件地声明局部变量?

    我想根据模板 bool 参数有条件地在函数中声明局部变量 因此 如果这是真的 它应该在那里 否则不应该在那里 因为我不希望该变量在堆栈上分配内存或调用其构造函数 它也可以是基本类型 我无法在 constexpr if 块中声明它 因为我需要
  • 强制 Flutter 导航器在弹出时重新加载状态

    我有一个StatefulWidget在带有按钮的 Flutter 中 它将我导航到另一个StatefulWidget using Navigator push 在第二个小部件上 我正在更改全局状态 一些用户首选项 当我从第二个小部件返回到第
  • 使用 HttpModule Asp.net 重定向 URL

    我创建了一个 HttpModule 这样每当我在浏览器中输入 localhost blabla html 时 它就会将我重定向到 www google com 这只是一个示例 它实际上是重定向来自手机的请求 我的问题是 1 如何告诉IIS
  • SQL 为 null 且 = null [重复]

    这个问题在这里已经有答案了 可能的重复 什么是 null 和 IS NULL IS NULL 和 NULL 有什么区别 有什么区别 where x is null and where x null 为什么后者不起作用 在 SQL 中 比较n
  • Xamarin.Forms - 主/详细信息页面和导航历史记录问题

    我有一个应用程序 它使用 masterdetail 页面在所有页面中显示菜单 在我的应用程序中 导航以两种方式发生 一种方式来自菜单 第二种方式来自仪表板 因此 如果我导航到另一个页面 然后按 返回 按钮 它将关闭应用程序 它不记得导航历史
  • 我的 py2app 应用程序无法打开。有什么问题?

    我正在用 python pygame 和 py2app 编写一个简单的游戏 我使用 python 2 6 当我在别名模式下构建游戏时 它工作正常 但是当我构建部署时 应用程序在午餐后立即崩溃 有人知道发生了什么事吗 为了对整个问题提供更彻底
  • 连续创建位图会导致内存泄漏

    我有一个线程不断生成位图并截取另一个程序窗口的屏幕截图 现在 我的表单上有一个图片框 并且它会随着生成的位图不断更新 这是我在线程中的代码 Bitmap bitmap null while true if listBoxIndex 1 Re
  • 有没有一种可移植的方法来获取Python中的当前用户名?

    什么是获取当前用户用户名的便携方式 例如对于 Linux 和 Windows 类似的东西os getuid 会好的 gt gt gt os getuid 42 Does not currently exist in Python gt gt
  • 无法访问 p:columns 内托管 bean 中的嵌套属性

    我有以下两个简单的 POJO class Person String name Address address and of course the getter setter for the attributes class Address
  • 计算对象检测的混淆矩阵的正确方法是什么?

    我正在尝试计算我的对象检测模型的混淆矩阵 然而 我似乎偶然发现了一些陷阱 我当前的方法是将每个预测框与每个地面实况框进行比较 如果它们的 IoU gt 某个阈值 我会将预测插入到混淆矩阵中 插入后 我删除预测列表中的元素并移至下一个元素 因
  • 核心数据删除规则和多对多关系

    假设您有部门和员工 每个部门有多名员工 但每个员工也可以属于多个部门 所以员工和部门之间是多对多的关系 删除一个部门时 我想删除仅属于该部门的所有员工 并取消属于另一个部门的所有员工与该部门的关系 两个方向的级联规则可以做到这一点吗 或者级
  • 如何在DIV可见之前获取clientWidth和clientHeight

    我想获取 DIV 元素 用于在光标位置显示弹出菜单 的尺寸style display none 但是 DIV 的尺寸始终返回 0 我似乎能够获得尺寸的唯一方法是使 DIVstyle display block 0 0 然后将其移动到所需的位
  • 有条件的 gem 依赖

    是否可以在安装时有条件地设置对 gem 的依赖关系 这是我的情况 希望能澄清这个问题 我维护的 gem 依赖于 json gem 然而 我经常使用 jruby 它有一个名为 json jruby 的 json gem 端口 为了解决这个问题
  • 如何生成n个线程?

    我正在尝试编写一个多线程程序 线程数基于命令行输入 因此我无法对预先声明的线程进行硬编码 这是一种有效的做法吗 int threads 5 dynamic not hard coded int i 0 pthread t thread ma
  • 有人可以向我解释这段 ASP.NET MVC 代码吗?

    这是 ASP NET MVC2 RTM 中的当前代码System Web Mvc AuthorizeAttribute班级 public virtual void OnAuthorization AuthorizationContext f
  • styles_base.xml 文件中出现错误 - android 应用程序 - 找不到与给定名称“android:Widget.Material.ActionButton”匹配的资源

    好的 我是 Android 开发的初学者 我刚刚创建了 hello world 应用程序 但这给了我错误styles base xml文件的appcompat v7图书馆 错误 检索项目的父级时出错 找不到资源 与给定的名称匹配 andro
  • 删除 TFS 2010 中的分支关系

    我刚刚接手了一个 TFS 2010 团队项目 分支层次结构是 Dev 是 Test 的子级 Test 是 Main 的子级 例如 Main Test Dev 然而 在过去的某个时候 有人在 Dev 和 Main 之间进行了毫无根据的合并 这