- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 git 存储库(涵盖了或多或少的项目历史)和独立的源代码(只有很少文件的 tarball),它们在一段时间前(实际上是在 2004 年或 2005 年的某个地方) fork 。
来自 tarball 的源代码已经发生了很多变化,我想从中 merge 一些。现在的问题是 - 如何找出已更改源的实际分支点,以获得那里发生的事情的最小差异。
所以我基本上想要的是在 git 历史中找到一个地方,那里的代码与我拥有的源代码的 tarball 最相似。我不想手动执行此操作。
还值得一提的是,更改后的源仅包含文件的子集,并将一些文件拆分为更多文件。然而,其中的代码似乎只进行了少量修改和一些添加。
如果你想自己玩,源码包是here Git 托管在 Gitorious : git://gitorious.org/gammu/mainline.git
最佳答案
在一般情况下,您实际上必须检查每一个提交,因为您无法知道是否有一个巨大差异,下一个差异小,然后是另一个巨大差异,然后是中等差异...
您最好的选择可能是限制自己使用特定文件。如果您只考虑一个文件,则应该不会花很长时间来遍历该文件的所有版本(使用 git rev-list <path>
获取列表,因此您不必测试每个提交)。对于修改文件的每个提交,您可以检查差异的大小,并很快找到最小值。对少数文件执行此操作,希望他们会同意!
为差异设置自己的最佳方法是通过简单地复制到您的 tarball 中进行临时提交,这样您就可以拥有一个名为 tarball
的分支。进行比较。这样,您可以这样做:
git rev-list path/to/file | while read hash; do echo -n "$hash "; git diff --numstat tarball $hash path/to/file; done
获取所有提交及其差异大小的漂亮列表(前三列将是 SHA1、添加的行数和删除的行数)。然后你可以将它通过管道传输到 awk '{print $1,$2+$3}' | sort -n -k 2
中,您将得到一个排序的提交列表及其差异大小!
如果您不能将自己限制在少数几个文件上进行测试,我可能会想手动实现类似于 git-bisect
的东西- 试着将你的方式缩小到一个小的差异,假设很可能,接近你最好的情况的提交也会有较小的差异,而远离它的提交会有较大的差异。 (可能介于牛顿法和完整的二进制/网格搜索之间?)
编辑:另一种可能性,在 Douglas' answer 中提出,如果您认为某些文件可能与某些提交中的文件相同,则使用 git-hash-object
对它们进行哈希处理,然后查看历史记录中的哪些提交具有该 blob。有一个 question with some excellent answers关于如何做到这一点。如果您对少量文件执行此操作 - 最好是那些经常更改的文件 - 您可能能够非常快速地缩小目标提交范围。
关于git - 查找 source 从 git 分支的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3103221/
这些指针之间有区别吗?每次通话到底发生了什么。 *p++ (*p)++, *(p)++ 最佳答案 1和3是一样的。 请记住 ++ 的后缀和一元形式。和 --有一个结果和一个副作用: x++ 的结果是
这个问题已经有答案了: difference between grep Vs cat and grep (5 个回答) 已关闭 8 年前。 我看到一个例子,其中有人这样做: cat source.tx
它曾经有效。现在,当我添加一个断点时: saveSnippet: (title, imageUrl, role) => { debugger; ... chrome (
开发.Net Web应用程序时,如果生成运行时错误,则会显示一些在Exception类中找不到的“额外”调试信息。 它显示了“源错误”部分,其中显示了代码摘录,其中行号准确显示了错误的产生位置,并显示
Firefox 中的“源”和“生成的源”有什么区别? 请举例说明。 编辑: 7 月 3 日 “搜索引擎”使用哪个来源,生成的还是生成前的? 最佳答案 Source 将显示页面加载的源(由服务器提供)。
对于具有两个不同工作表的Excel文件,我有两个OLE DB源。工作表A和工作表B。工作表A单元格I6包含日期,我想组合这两个源并在工作表B中添加一列,以将该值设置为工作表A的日期值。有可能做到吗?任
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
这是我的代码: import speech_recognition as sr r = sr.Recognizer() with sr.Microphone() as source: prin
我是 mysql 新手。我正在尝试 setter 工示例数据库 我尝试了 stackoverflow 中提到的一些方法,但没有帮助 谁能告诉我如何解决这个问题 SELECT 'LOADING depa
在终端中,我启动程序如下: 1) source env.sh 2) source activate enviroment 3) program --args 除了在 Pycharm 中并调试代码之外,
IntelliJ 如何知道目录是“源”还是“测试源”?如何始终将目录标记为“测试源”? build.gradle 1 apply plugin: 'java' apply plugin: 'idea'
这个问题类似于Source script to separate environment in R, not the global environment , 但有一个关键的转折。 考虑一个源另一个脚
和有什么区别--devtool source-map & eval-source-map ? 最佳答案 webpack 文档有一个方便的图表,说明这些不同的选项可能适合哪些情况。 他们显示eval-s
这个问题已经有答案了: Issue with virtualenv - cannot activate (36 个回答) 已关闭 4 年前。 venv) C:\Users\Sunil\PycharmP
在以前版本的 Akka Streams 中,groupBy 返回一个 Source 的 Source 可以具体化为一个 Source[Seq [A]]. 在 Akka Streams 2.4 中,我看
这个问题已经有答案了: Issue with virtualenv - cannot activate (36 个回答) 已关闭 4 年前。 venv) C:\Users\Sunil\PycharmP
是否可以获取 Bash 片段的源代码,但仅在特定条件成立时才实际提供其中的函数? 所以我要问的是,我可以无条件地获取目录中的所有文件,但获取的文件包含是否向采购外壳提供功能的逻辑。 例子: .bash
我无法查看 JavaCore.class 源代码,但我可以很好地使用代码。 例如,要查看方法JavaCore.create(..) 的源代码,我ctrl - click(或按f3) 在 JavaCor
-- Sample employee database -- See changelog table for details -- Copyright (C) 2007,2008, MySQL
当我在我的 IDE 中编译项目时它工作正常但是当我在 bamboo 中编译时它给我以下错误。 我已经检查过我在任务中配置的 jdk 版本是 1.6,我还尝试从 pom 中的 maven 插件强制执行
我是一名优秀的程序员,十分优秀!