- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道将带有历史记录的源代码从一个团队项目移动到另一个团队项目的最佳方法是什么。我不关心工作项、报告或 SharePoint 站点,因为我们要从中恢复的系统没有使用这些功能。想要转移到不同团队项目的原因还在于原始实现(从第三方维护的备份中恢复)使用了我们不希望使用的第三方流程模板向前走。我们希望在迁移完成后开始利用工作项跟踪和报告。
TFS Integration Platform这似乎是一种可能的情况。根据文档,它可用于更改流程模板。但是,我很好奇 tf.exe 移动语法是否有效?像这样的东西:
tf.exe 移动 $/ProjectA $/ProjectB
据我了解,此命令的操作非常类似于重命名操作,而使用源代码管理资源管理器中的“移动”上下文菜单项进行移动更像是删除和添加操作。另外,假设 $/ProjectA 是一个项目的根源代码控制文件夹,$/ProjectB 是另一个项目的根源代码控制文件夹,tf.exe 移动路径实际上是否会将文件夹下的代码与相应的团队项目相关联?关键是如果可能的话,能够保留历史记录。
任何建议或提示将不胜感激!
编辑 - 可以分支到另一个项目来处理这种情况 - 就像 Microsoft 在 Branching Guidance 中讨论的那样文档?我认为这可能是答案,因为历史可能会与分支一起保存。但是,我目前无法访问 Team Foundation Server 2008 实例来对其进行测试。
最佳答案
移动和重命名是别名。在任何版本的 TFS 中,无论是命令行还是 UI,绝对没有区别。
它们都保存了历史。至少在 2005/2008 年,无论名称和/或父路径更改的频率或程度如何,您都会在 VersionedItem 表中保留相同的物理项目。实际上,如果您不进行大量手动工作,就无法获得“假”重命名(删除+添加)。
然而,虽然这个版本控制模型在理论上非常纯粹,但它有一些实际问题。由于不同的项目可以在不同的时间点占用相同的名称,因此 TFS 需要全名 + 版本来唯一标识您发送给它的任何输入。通常你不会注意到这个限制,但是一旦你重命名了系统中的项目,如果你说 tf [doSomething] $/newname -version:oldversion 那么它会变得困惑并且抛出错误或对您可能无意的项目进行操作。您必须小心传递有效的组合(新名称+新版本或旧名称+旧版本),以确保命令按照您想要的方式运行。
TFS 2010 稍微改变了情况:它是幕后的分支+删除,导致 itemID 发生变化。即便如此,像 Get 和 History 这样的日常命令还是可以很好地“伪造”的。老客户端兼容率达到95%左右。优点是,当您在系统中进行多个重命名并且基于路径的项目查找开始变得不明确(如上面提到的)时,服务器将简单地接受您指定的名称并使用它运行。这提高了整体系统性能并消除了不熟悉的用户经常陷入的几个陷阱,但代价是不够灵活并且不能以 100% 的精度保留历史记录(例如,当两个分支合并期间出现名称冲突时)。
回到手头的问题......
这并不像说tf rename $/projectA $/projectB那么简单。源代码管理树中的顶级文件夹是为团队项目创建向导保留的;您无法对它们运行标准 tf 命令。您需要的是这样的脚本:
Get-TfsChildItem $/ProjectA |
select -Skip 1 | # skip the root dir
foreach {
tf rename $_.serveritem $_.serveritem.replace("$/ProjectA", "$/ProjectB")
}
【当然,如果$/ProjectA下子节点不是太多,也可以手工完成】
就我提到的陷阱而言,我现在将详细说明一个问题,因为查找旧历史对您来说似乎非常重要。一旦您 checkin 重命名,tf History $/ProjectA/somefile.cs 将不起作用。默认情况下,tf 命令假定版本 =“最新”。这些替代方案中的任何一个都将是您想要的完整历史记录:
出于完整性和调试目的的最终替代方案:
(在 TFS 2010 中,“槽模式”是默认行为;有一个 -ItemMode 选项可以请求跨历史记录跟踪您的查找,就像 2008 年一样,而不是基于路径。)
编辑 - 不,分支不是一个很好的选择。虽然分支确实在系统中留下了足够的元数据来跟踪 ProjectB 的完整历史记录,但在 2008 年,它对用户来说并不是非常友好。计划花大量时间学习 tf merges 命令(没有等效的 UI) )。 2010 极大地提高了您可视化跨多个分支的更改的能力,但它仍然不是您从重命名中获得的干净统一的体验。
关于version-control - Team Foundation Server - 随历史移动源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2215593/
Yii::$app->runAction('new_controller/new_action', $params); 我相信这可以用来从另一个 Controller 调用 Controller Ac
这个问题类似于 this ,但我需要访问父成员(不是控制)。我不知道是否可以不使用依赖注入(inject)。 例如,我有一个父级,有一个成员调用用户,我需要从子 Controller 访问用户。 最佳
我有包含 2 个布局的根布局:- 选项面板- 绘制区域 我正在尝试的是访问 OptionsPaneController 中的 DrawAreaController 以调用其绘制方法。下面是 Optio
我的应用程序的 View Controller 层次结构设置如下: UIViewController | UITabBarController | UINavigationCo
我的应用程序的 View Controller 层次结构设置如下: UITabBarController | UINavigationController | | |
当我第一次为我目前在 Storyboard 中开发的应用程序创建基础布局时,我分两步完成: 选择我的 View Controller 并使用 Editor->Embed In->Navigation
设计要求: 显示用户可以选择的项目列表 选择一个项目后,使用后退按钮将用户带到一个新 View 。新 View 应在底部包含第一个屏幕中不存在的选项卡列表 单击选项卡中的项目时,应出现一个带有后退按钮
将父 Controller 设置为“parentCtrl as vm”,并将子 Controller 设置为“childCtrl as vmc”,以避免名称冲突,并且效果良好。 如何在子 Contro
我已经阅读了一些答案,例如关闭当前的 ViewController,但我的情况有所不同,因为我正在展示另一个 ViewController。 虽然我无法访问它的属性,但此代码显示了带有导航 Contr
如我所见,如果我们要实例化一个Model(例如,名为Post),我们只需调用: $post = new Post(); 现在,我还想实例化一个Controller(例如,名为Post,并为此 Cont
我已经疯狂地在整个网络上搜索解决我的问题的方法,但目前还没有。我的问题是我必须检查是否在 HTTP 请求中获得特定文本,该请求在一个 while 循环中,如果我这样做了,那么我应该离开循环并继续线程,
我想用this.get('controllers.pack.query');要得到App.PackQueryController在 App.PackController ,但失败了。 我认为问题是 E
我刚开始使用 Laravel。当我使用 codeigniter 或 zend 框架时,我可以将我的 Controller 组织到一个单独的目录中。例如,我可以创建“user/permission.ph
在 emberjs 前 2 我们可以从另一个 Controller 访问 Controller 或 Controller 中的任何方法 以下方式: App.get('router').get('nav
这可能是非常简单的实现,但我是 iOS 编程的新手,我似乎被卡住了。 所以,基本上,我有一个选项卡式应用程序。我决定除了标签栏之外还需要一个导航栏。为此,我放置了标签栏 Controller ,然后添
我有这个列表 Controller , define([ 'jquery', 'app' ], function ($,app) { app.controller("ListC
我有 3 个 Controller :RootController、FirstController 和 SecondController。我想从 RootController -> FirstCont
我有以下 Controller : /controllers/api/base_controller.rb /controllers/api/v1/articles_controller.rb 当为文
我是 Angular JS 的新手,尝试在另一个 Controller 中调用一个 Controller ,但出现以下错误。 ionic.bundle.js:21157 TypeError: $con
我有一个标签栏 Controller 和它的 3 个 child ,我还有另一个 View ,我制作了一个从 child 到 View Controller 的自定义转场,还有一个从 View Con
我是一名优秀的程序员,十分优秀!