- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个新的 weave用于存储版本控制历史的基于数据结构。毫无疑问,当它问世时,这会引起一些关于它是否是正确的做事方式的宗教 war ,但这不是我现在的问题。
我的问题与输出 blame 有关应该给。当一行代码被多次添加、删除和合并时,并不总是清楚哪个版本应该为此负责。值得注意的是,这意味着当删除一段代码时,该段代码的所有记录都消失了,并且删除不会受到任何指责。与我讨论过这个问题的每个人都说,试图做得更好根本不值得。有时,人们会修改被删除部分后面的行,将其责任从实际内容更改为该部分被删除时的修订版本。据推测,如果该部分位于末尾,那么最后一行的责备就会发生变化,如果文件最终为空,那么责备确实会消失在以太中,因为实际上没有地方可以放置责备信息。由于各种技术原因,我不会使用这个 hack,但假设继续使用这种完全没有记录但事实上的标准实践将是没有争议的(但请随意攻击我并将其从你的系统中删除)。
继续我的实际问题。通常,对于每一行,您都会查看其在历史记录中添加和删除位置的完整历史记录,并使用三向合并(或者,在交叉合并的情况下,随机废话)并基于这些行之间的关系您可以根据其历史记录来确定该行是否应该存在,如果不应该存在,那么您可以使用当前修订版将其标记为新的。如果某一谱系出现在具有不同责任的多个祖先中,那么它会任意选择继承哪一个。再次,我认为继续这种完全没有记录但事实上的标准实践将是没有争议的。
我的新系统的不同之处在于,它不是根据整个历史记录的复杂计算来计算给定的行是否应该在当前版本中,而是简单地查看直接的行祖先,如果该血统属于其中任何一个,它就会选择任意一个来继承责任。我之所以做出这样的改变主要是出于技术原因(而且其他的指责实现完全有可能出于类似的技术原因和缺乏关心而做同样的事情),但在考虑之后,我的一部分实际上更喜欢新的行为,因为比旧的更加直观和可预测。大家觉得怎么样?
最佳答案
我实际上写了一个指责实现(我相信 Subversion 是当前的实现,除非有人在过去的一两年内替换了它)。我也帮助了其他一些人。
至少大多数指责的实现都不会执行您所描述的操作:
Usually in blame for each line you look at the complete history of where it was added and removed in the history and using three way merge (or, in the case of criss-cross merges, random bullshit) and based on the relationships between those you determine whether the line should have been there based on its history, and if it shouldn't but is then you mark it as new with the current revision. In the case where a line occurs in multiple ancestors with different blames then it picks which one to inherit arbitrarily. Again, I assume that continuing with this completely undocumented but de facto standard practice will be uncontroversial.
实际上,大多数责备远没有这那么复杂,并且根本不费心去尝试使用这些关系,但它们只是以某种任意顺序遍历父级,使用简单的增量结构(通常是相同的内部结构,无论它们采用何种 diff 算法)在将其转换为文本输出之前使用)来查看 block 是否已更改,如果是,则归咎于它,并将该行标记为已完成。
例如,Mercurial只是进行迭代深度优先搜索,直到所有行都被归咎为止。它不会尝试考虑这些关系是否使其不太可能归咎于正确的人。
Git确实做了一些更复杂的事情,但仍然不太像你描述的那样。
Subversion 的功能与 Mercurial 的功能相同,但历史图表非常简单,因此更加简单。
反过来,您所建议的实际上是他们真正所做的:
选择一个任意的祖先,然后沿着兔子洞的路径走下去,直到完成,如果它不会导致你责怪所有的行,则任意选择下一个祖先,继续,直到分配了所有的责备。
关于version-control - 'blame' 命令的简化语义是一件好事吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14077470/
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
我是一名优秀的程序员,十分优秀!