垂直门户网站的盈利模式探讨,怎么制作微信链接网页,网站推广广告词,修改Wordpress账号密码java 语义与任何程序员交谈#xff0c;并询问他应该如何进行合并#xff1a;“它应该理解代码#xff0c;对其进行解析#xff0c;然后根据结构进行合并” –他很可能会说。 而这恰恰是SemanticMerge for Java所做的#xff1a;它解析要合并的文件#xff08;加上祖先或… java 语义 与任何程序员交谈并询问他应该如何进行合并“它应该理解代码对其进行解析然后根据结构进行合并” –他很可能会说。 而这恰恰是SemanticMerge for Java所做的它解析要合并的文件加上祖先或“文件在更改之前的状态”并根据该信息进行操作。 为什么所有关于合并的嗡嗡声 开发软件是一个协作过程。 如果您在团队中工作迟早会有两个开发人员修改同一个文件。 每当发生这种情况 您必须合并。 实际上合并并不仅限于创建分支很多人会说而是合并到处理相同文件的开发人员即使他们在同一分支上进行合并如果两个人在同一分支同一文件上工作他们将必须在签到时合并-或在Git行话中“提交”。 在合并方面新一代的分布式版本控制系统DVCS比上一代做得更好。 这就是为什么许多人从SVNCVS和较早的替代产品跳入Git的原因。 下一步不仅是在如何处理文件方面的更好算法下一步是创建一种更好的机制来合并“文件内部”这正是SemanticMerge的全部意义所在。 SemanticMerge旨在降低保持代码干净的成本 在开发合并工具时我们始终牢记两个图形1981年的Barry Bohem的更改成本和20年后的Kent Beck的相同图形 一代又一代的开发人员被教导“波西姆原理”“进行生产变更与分析阶段引入的相同变更相比这将花费您一笔巨款”。 然后贝克提出了类似的建议“保持代码干净更改成本将保持不变”这是敏捷方法背后的基石。 而这恰恰是SemanticMerge背后的口头禅保持代码干净。 为什么 因为它有回报。 通常您会看到需要重新布置的类“放下这两个私有方法将公共构造函数上移将私有字段移到底部……”但是您不这样做的原因是也许有人触摸该文件合并将变得地狱。 这正是SemanticMerge所解决的问题它“知道”您移动了一个方法因此不会被它所愚弄。 语义合并 现在让我们研究一个典型的语义合并案例。 假设您有一个带有几种方法的类。 第一个开发人员将其中一个方法移动到类中的其他位置并且还修改了该方法。 同时第二个开发人员在原始位置修改了该方法。 查看下图 常规的基于文本的合并工具将无法处理这种情况但是SemanticMerge能够识别该方法发生了什么并提出以下合并情况 如您所见它标识方法“ onBuildHeaders”已被并行修改检查打印方法名称的栏两边的“ c”图标并已移至其中一个贡献者选中“ m”图标。 现在进行合并的开发人员可以在“ onBuildHeaders”方法上运行“合并”该方法将仅合并冲突的方法并保留新位置。 SemanticMerge如何工作 您可能会猜到SemanticMerge首先解析所涉及的3个文件的代码原始文件加上两个贡献者然后计算每个文件的结构这是树的代码表示形式。 完成此操作后SemanticMerge开始使用3棵树首先计算一个贡献者与原始版本之间的差异然后与另一个贡献者重复该过程。 第三步是合并计算本身它将遍历两对差异并检查它们是否碰撞。 如果它们这样做则存在合并冲突。 如果相同的方法已被移动或修改两次以此类推则可能发生这种情况。 计算稍微复杂一点因为不仅必须在冲突相同方法时还要计算冲突而且还必须在其容器中存在冲突时计算冲突例如在父类之间进行“有区别的”重命名等。 还值得补充的是为了在重命名方法或字段属性等时跟踪它们SemanticMerge计算“相似性索引”以查看方法主体之间的接近程度以及匹配度何时良好它假定它是相同的元素。 一些数字 我们重新运行了约4万个合并下载了将近500个开源项目。 这意味着我们拉出存储库找到所有合并然后通过SemanticMerge工具再次运行它们。 这样做我们发现了以下数字 当前的合并中有23是“语义”的这意味着它们具有的内容不是“变-变”冲突。 它可以是代码移动在同一位置添加多个方法移动和更改方法等等。 在这4万次合并中我们发现1.54的合并从手动变为全自动。 这不是一个很大的数字这意味着一旦团队开始使用SemanticMerge它就会增长。 这些数字是使用与当前语言无关的合并工具重新运行合并的结果因此开发人员倾向于避免对文件进行复杂的更改。 在通过SemanticMerge和传统的基于文本的合并工具运行代码时我们计算了合并冲突中涉及的行数我们发现使用SemanticMerge冲突中涉及的代码行减少了97……这意味着工作量减少了去做 免费开源 在测试SemanticMerge时我们提取了约500个长期运行狂热的开放源代码存储库然后我们“重放”了所有合并。 在列表中有像hibernateopenjdkapache-lucenejbosmonodevelopmonomonomacmonogamenhibernate之类的存储库这确实很有帮助。 因此我们决定免费为对开源项目做出贡献的开发人员免费使用SemanticMerge因为我们相信可以回馈。 您可以在这里查看 参考我们的JCG合作伙伴 Pablo Santos在SemanticMerge博客上对Java文件合并进行了语义化 。 翻译自: https://www.javacodegeeks.com/2013/06/java-file-merging-goes-semantic.htmljava 语义