- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在寻找一个版本控制系统,它能够检测函数是否在文件中移动。例如,有一个文件“Foo.java”,其中包含函数“a()”、“b()”和“c()”。
public class Foo
{
void a()
{
}
void c()
{
}
void b()
{
}
}
现在,如果用户 A 更改方法“c()”以实际执行某些操作:
void c()
{
System.out.println("Function c is called");
}
用户 B 看到函数的顺序应该不同,将“c()”移到“b()”下:
public class Foo
{
void a()
{
}
void b()
{
}
void c()
{
}
}
现在,如果他们都推送到中央存储库,我希望结果是:
public class Foo
{
void a()
{
}
void b()
{
}
void c()
{
System.out.println("Function c is called");
}
}
现在发生了冲突,用户 A 或用户 B 必须手动解决。在我看来,这应该自动处理或以某种方式显示。如果文件“不是那么大”但包含 800 多行的文件不是那么清晰,则手动解析不是问题。
现在我已经测试了 git 和 mercurial,但两者都无法以我想要的方式解决这个问题。我以前使用过 subversion,知道这没有得到处理,而且我的使用还有一些缺点,所以我更喜欢 DVCS。
编辑:我(主要)试图完成的是保留函数的历史记录。我知道 Git 例如可以显示某些行的历史记录。然而,如果一个函数被移动,人们很容易将移动混淆为函数的起源。 DVCS 应该检测到这个移动,因为它必须知道历史,比如文件的移动。 Linus 曾经说过,应该(在移动的情况下)只移动而不修改文件,以便 Git 可以“看到”移动。我想到 Git 也许能够以同样的方式跟踪 block 的移动。
最佳答案
正如 Mark 已经说过的 - 这不是 SCM 本身的问题,而是在其中使用了 Merge-Compare 工具,它们(或多或少)都是面向差异样式的(即使用 strings,不是逻辑代码块)
关于 (Linux)diff tool that recognizes block movement 中提到的,我无话可说。 BeyondCompare,但在 Windows 世界中 CompareIT!完美地检测(并显示)移动的字符串 block (并且,在某种程度上 - 内部略有移动和变化)。但是:
我还听到一些谣言,SmartSVN Professional 中的冲突解决器也能够检测移动的代码块
关于git - DVCS 检测代码块移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9957475/
阅读内置帮助后,在我看来,这两个命令都可用于修改工作区以匹配某个修订版。但我不明白更新和结帐之间的区别。请在您的答案中包含一些琐碎的工作流程,以显示何时更新/结帐是合适的。 最佳答案 第一个主要区别是
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
是否可以使用 Fossil 重命名目录?我试过明显的命令: fossil mv oldname newname Fossil 然后告诉我它做了一些事情: RENAME oldname newname
所以我一直在做一个相当大的项目,并像 VCS 一样使用 PlasticSCM。我将它与 DVCS 模型一起使用,但到目前为止,我几乎只是在我的办公机器和家庭之间进行同步。 现在我们正在让其他人参与该项
还有一个thread在 StackOverflow 上,处理多久提交一次对源代码控制的更改。我想把它放在使用 git 或 mercurial 之类的 DVCS 的上下文中。 你多久提交一次? 您是否仅
情况是这样的:在我的小办公室里,因为我们喜欢保持移动并且偶尔在家工作,所以我们没有中央文件服务器,而是将所有办公室文档都放在一个 SVN 存储库中,并且每个人都在他们自己的笔记本电脑。结帐重约 3GB
我最近问了一个关于 DVCS 是否适合企业环境的问题,这引发了我的另一个问题。 DVCS 的优点之一似乎是您可以轻松地分支和尝试新事物。当我开始考虑数据库更改时,我的问题就开始了。我一直发现将 DB
有没有办法明确删除“丢失”文件而不必使用 fossil rm 删除它们逐个? 我最近创建了一个存储库,其中有一个 Flash XFL 文件夹,Flash 似乎有点随意地删除和创建了一些二进制文件。每次
TFS 2010 是否有 SVN 提交后事件?每次开发人员 checkin 某些内容时,我都想运行脚本或应用程序或做一些事情。我浏览了互联网,但没有找到相关信息。 最佳答案 您将需要创建(并发布)一个
我正在寻找一个版本控制系统,它能够检测函数是否在文件中移动。例如,有一个文件“Foo.java”,其中包含函数“a()”、“b()”和“c()”。 public class Foo { voi
我的工作场所正在考虑转向现代 (D)VCS,这是我正在 push 的事情。 我的老板有这个想法,目前的工作流程是有一个集中的存储库,每个人都可以在任务完成后提交/merge 他们的更改,在处理任务时,
我最近开始在一个个人项目中使用 Git,我可以看到 DVCS 如何使我们在工作中受益(这是一家大型企业软件公司,目前正在运行 Perforce)。例如,我团队中的功能工作主要由开发人员创建自己的分支组
在使用 DVCS 近两年之后,似乎一个固有的“缺陷”是意外数据丢失:我丢失了未被推送的代码,我知道其他人也丢失了。 我可以看到一些原因:异地数据复制(即“提交必须转到远程主机”)不是内置的,存储库与代
还是传统的客户端 - 服务器 VCS 更合适?我目前正在使用 TortoiseSVN,但我对 DVCS 感兴趣,但我不确定尝试使用类似的东西是否是一个好主意。 最佳答案 由于您仍然可以推送到另一台运行
我希望在初学者的快速入门指南中对此进行解释,因为几乎每个从化石开始的人都会有他想要开始用化石管理的项目。但我在文档中找不到任何解释。 (我来自 git,这对于我的需求来说太重了,但至少在现有文件夹中创
我在一家公司工作,我们创建了许多特定于客户的小型应用程序。我们有几个开发人员,但大多数时候每个项目只有一名开发人员。 Customer1 ProjectX App
如何从 Bazaar 工作区中删除所有未版本控制的文件?我希望执行与 hg purge --all 或 git clean -fd 相同的操作。 最佳答案 我只在 BzrTools 中看到过这个,作为
我在这里和那里看到暗示直接从 DVCS 克隆运行实时部署是不好的,最好导出一个干净的树或 tarball 并部署它。在我看来,直接从 DVCS 克隆运行有几个优点: 无需在每次部署时传输整个代码库。
Smalltalk 令人讨厌的事情之一是,由于它管理源代码的方式,它(通常)需要自己的 VCS。 Squeak 和 Gemstone(至少在其 GLASS 版本中)有一个名为 Monticello 的
我想知道是否可以使用 nuget 在版本控制中仅存储对所需包的引用(仅 package.config 并忽略 packages 文件夹)。 有没有办法告诉 nuget(重新)下载各种 package.
我是一名优秀的程序员,十分优秀!