查找源代码从 git 分支的位置

2023-11-26

我有一个 git 存储库(或多或少涵盖了项目历史)和单独的源代码(只是一个只有几个文件的 tarball),它们在不久前(实际上是在 2004 年或 2005 年的某个地方)分叉了。

tarball 的源代码已经发生了相当多的变化,我想从中合并一些。现在的问题是 - 如何找出更改源的实际分支点,以获得那里发生的情况的最小差异。

所以我基本上想要的是在 git 历史记录中找到代码与我拥有的源代码包最相似的位置。我不想手动执行此操作。

还值得一提的是,更改的源仅包括文件的子集,并将一些文件拆分为更多文件。然而,其中的代码似乎只进行了小的修改和一些添加。

如果你想自己玩一下,带有源代码的 tarball 是hereGit 托管于吉托里斯: 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- 只是尝试将范围缩小到一个小的差异,并假设接近最佳情况的提交也很可能具有较小的差异,而远离最佳情况的提交将具有较大的差异。 (可能介于牛顿法和完整的二分/网格搜索之间?)

编辑:另一种可能性,建议道格拉斯的回答,如果您认为某些文件可能是完全相同的对于某些提交中的那些人来说,就是使用git-hash-object,然后查看历史记录中的哪些提交有该 blob。有一个问题有一些很好的答案关于如何做到这一点。如果您对少数文件(最好是经常更改的文件)执行此操作,您可能能够很快缩小目标提交范围。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找源代码从 git 分支的位置 的相关文章

  • 有谁知道类似于 SVN Time-Lapse View 的 Git 工具 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 SVN Time Lapse View 是一个跨平台查看器 可以下载文件的所有修订版本 并允许您通过拖
  • git Push over sshfs 失败,并显示“关闭 sha1 文件时出错:错误的文件描述符”

    我们使用 sshfs 通过 SSH 安装文件系统 并将其用作 git 存储库协作的远程存储 Mac OSX 10 6 6 到 RHEL 3 服务器 SSHFS 版本 2 2 MacFUSE SSHFS 2 2 0 MacFUSE 库版本 F
  • 自动将所有 GitHub 存储库镜像到 gitlab

    对于 GitLab 必须手动为每个存储库设置拉 推镜像 我想知道那里有any way可以自动将所有 Github 存储库同步到 GitLab 这样 当您在 GitHub 中创建新的存储库时 GitLab 中的存储库将自动创建 并充当拉取镜像
  • Git:发送电子邮件而不提交

    我有一个项目 我做了更改 并想使用 git send email 功能将它们发送给另一个用户 我发现它可以通过发送补丁来工作 由git format patch每次提交 是否可以只发送diff的 我不想先提交 然后发送补丁 是否有gitfo
  • 丢失了我在 GIT 中的提交。你会不小心删除提交吗?

    我正在使用 git gui 但看不到我的分支 我知道我今天检查了一些东西 在完成提交并使用分支查看器验证后 我更改为较早的分支 我对之前的分支进行了更改 然后想返回到当前的分支 但我再也看不到它了 任何帮助都会很棒 回答你的问题 在大多数情
  • VS 2015 + Bower:在防火墙后面不起作用

    Problem 在 Visual Studio 2015 中 使用 Bower 我的包在防火墙后面时恢复失败 并出现类似以下内容的错误 ECMDERR 无法执行 git ls remote tags heads git github com
  • 在 Windows 7 上的 Sourcetree 中比较 Word docx 文件

    我一直在尝试获取在 Windows 7 上的 Sourcetree 中工作的 Word docx 文件的文本差异 我已按照此处的说明进行操作将 Microsoft Word 与 git 结合使用 http blog martinfenner
  • Netbeans 和 Git,.obj 文件被忽略

    我正在开发一个涉及 obj 文件的小型 git 项目 当我查看 项目选项卡 时 我发现它们被忽略了 但如果我查看我的 gitignore 我无法理解为什么 DepthPeeling nbproject private DepthPeelin
  • JAVA:如何搜索地图?

    我有一个 Map 其键为字符串 其值为集合 包含整数 假设我的钥匙看起来像 苹果 香蕉 橙色 等 用户输入文本 我将其保存为字符串变量 如何在我的地图中搜索相同的密钥 因此 如果用户输入 apple 我如何将该字符串提供给方法并让该方法在我
  • `git Reset HEAD file` 是否也检查该文件?

    我错误地向 git 添加了一个目录 当我按照提示操作时here https stackoverflow com questions 348170 undo git add通过执行以下操作来撤消添加git reset HEAD
  • 当 .gitattributes 中的 EOL 设置为 CRLF 时,Git diff 认为行结尾为 LF

    当我恢复对带有 Windows 行结尾的文件的更改并且 gitattributes 将 EOL 定义为 CRLF 时 git 认为行结尾已更改为 LR 即使十六进制编辑器显示 CRLF 仅当 gitattributes 定义 EOL 字符时
  • Git 将一个分支合并到所有其他分支中

    我知道这个问题已经在这里被问过 https stackoverflow com questions 2329716 merging changes from master into all branches using git https
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件
  • 为所有子文件夹设置 git 配置值

    我知道可以设置每个存储库的配置来覆盖用户级配置 即 path to my repo gitconfig覆盖 gitconfig 是否可以设置 git 配置来覆盖给定文件夹的所有子文件夹的用户级设置 即 我有 topLevelFolder1
  • Android 存储库初始化失败

    我想我非常仔细地遵循该网站的说明 http source android com source downloading html http source android com source downloading html 但是当我尝试这
  • Git 到 TFS 源代码管理迁移

    我想看看 TFS 如何为我的命令工作 所以我想将我们当前的 GIT 存储库移动到 TFS 数据库 我们使用 GIT 来获得普遍的分支支持 因此我想使用 TFS 2010 来解决该问题 现在的问题是 如何将 GIT 存储库导出到 TFS 显然
  • 如何让 Aptana Studio 记住 git ssh 密码

    我找不到任何有关如何获得 Aptana Studio 的内置 git 支持来记住执行推 拉操作的 ssh 密码的指南 信息 有人有什么想法吗 Aptana Studio 实际上是内置的 GIT 程序 它将在 Windows 上的 C Use
  • git 排除与忽略

    I use Tower http www git tower com 用于在 Mac 中使用 Git Tower 中的设置具有创建 gitignore 的 忽略 部分 但它还有另一个名为 排除 的部分 似乎可以将排除与 git ls fil
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • git 2.32 git push -u origin master 没有任何反应

    I ve starting to use git github and I m stucked on how to push my codes to github I m following some tutorials and when

随机推荐

  • 使用 Powershell 将 XML 转换为哈希表

    我想转换 XML
  • 扩展打字稿接口

    在 TypeScript 中扩展 Express Request 接口时 我遇到了这个问题 我想使用外部库定义 但无法导入外部库 因为它会导致错误 gt 错误 4 28 TS1147 内部模块中的导入声明无法引用外部模块 编辑 这是一个 d
  • ReferenceError:未定义要求

    我目前正在开发 Mozilla Firefox 插件 我已经设置了一个面板并附加了一个内容脚本 我需要在内容脚本和 main js 之间进行通信 我为此使用 addon sdk 的端口 api 然而由于某种原因 我什至无法在两者之间传递简单
  • 向量储备 C++

    我有一个非常大的多维向量 其大小一直在变化 当我只知道大小的近似值时 使用 vector reserve 函数有什么意义吗 所以基本上我有一个向量 A 256 256 x y 其中 程序中的每次迭代 x 都会从 0 变化到 50 然后再次变
  • Spark 数据帧的 null 值和 countDistinct

    我有一个非常简单的数据框 df spark createDataFrame None 1 3 2 1 3 2 1 3 a b c a b c null 1 3 2 1 3 2 1 3 当我申请一个countDistinct在此数据框上 我发
  • UISearchDisplayController 自动释放如何导致不同视图控制器崩溃?

    我有两个视图控制器 A 和 B 从 A 我导航到视图控制器 B 如下所示 in View Controller A navigateToB method void navigateToB BViewController bViewContr
  • 我可以避免 .NET 中的 JIT 吗?

    假设我的代码是否始终在特定处理器上运行 并且如果我在安装过程中拥有此信息 我是否有机会避免 JIT Use NGEN 本机映像生成器 Ngen exe 是一种可提高托管应用程序性能的工具 Ngen exe 创建本机映像 这些映像是包含已编译
  • 如何让 Internet Explorer 8 支持第 n 个 child() CSS 元素?

    我想为我的表格行提供斑马条纹效果 在所有其他浏览器中 可以使用 CSS 第 n 个子元素来完成 但我也想在 IE 8 上这样做 那么我该怎么做呢 使用填充 选择性就足够好了 没有polyfill 由于IE8支持第一个孩子 你可以欺骗它来支持
  • Cookie 中允许使用哪些字符?

    Cookie 名称和值中允许使用哪些字符 它们与 URL 或某些公共子集相同吗 我问的原因是我最近遇到了一些奇怪的 cookie 行为 这些行为 以他们的名字命名 我只是想知道这是否是特定于浏览器的 或者我的代码是否有问题 根据古老的网景c
  • find 缺少选项 -printf,现在怎么办?

    我还没有找到Mac的find没有 printf选项的原因 苹果通常会决定去掉与其他命令不正交的选项 如何在 Mac 中达到与以下命令相同的结果没有 coreutils find printf i n command in Ubuntu 这并
  • 如何在eclipse中导入com.sun.javadoc.*?

    导入 com sun javadoc eclipse 向我报告此错误 导入 com sun javadoc 无法解析 似乎未安装该包 查看网站http download oracle com javase 1 5 0 docs guide
  • 如果构造函数的参数非法,则阻止类的实例化?

    我有一个公共构造函数 它接受一个参数 int Age 来创建一个对象 我想检查传递的参数是否合法 例如年龄不能为负数 如果非法 则不要创建对象 实例 如果合法的话没问题 我只能想到一种方法来做到这一点 将构造函数设为私有 创建一个带有参数
  • 什么是未定义的引用/未解析的外部符号错误以及如何修复它?

    什么是未定义的引用 未解析的外部符号错误 常见原因有哪些 如何修复和预防这些错误 假设您有以下代码 a cpp int get return 0 b cpp int get usually one doesn t write this di
  • JQuery 检测标签是否自关闭

    有没有办法像图像标签一样使用 JQuery 检测标签是否自动关闭 动态的东西不仅仅是图像标签 if selector 0 tagName toLowerCase img do something jQuery 在内部使用这个列表 area
  • Flutter - 未处理的异常:FormatException:意外的字符(在字符 1 处)|响应实例

    当我获取 api 时 控制台显示如下错误 E flutter 10838 错误 flutter lib ui ui dart state cc 157 未处理的异常 FormatException 意外的字符 在字符 1 处 E flutt
  • Git 错误:[远程拒绝] master -> master(缺少必要的对象)

    我对 git 有一个相当令人担忧的问题 几天前 当服务器 git 出现蓝屏时 我正在提交一些更改 我们认为这实际上是由 git 引起的 从那时起 我无法向存储库提交任何更改 而其他人可以 我无法再对服务器崩溃时提交的文件提交更改 但是我可以
  • 如何不硬编码密码?

    在我的最后一个问题 用于存储秘密的便携式数据库 中迄今为止最好的答案告诉使用 sqlite crypt 阅读 sqlite crypt 文档 打开数据库的新参数是密码 当然 我不想对密码进行硬编码 所以我在想存储密码的最佳 简单且快速的方法
  • 让 CMake 声明一个虚假目标

    我想生成一些compile时间常数 这第一个答案另一个问题让我非常接近 来自我的 CMakeLists txt add library PROJECT NAME STATIC CXX SRCS compile time hpp add cu
  • 在 java/swing 中关闭窗口时采取的正确操作是什么?

    我刚刚在我的 CustomUIPanel 类中编写了这个测试代码 public static void main String args final JDialog dialog CustomUIPanel createDialog nul
  • 查找源代码从 git 分支的位置

    我有一个 git 存储库 或多或少涵盖了项目历史 和单独的源代码 只是一个只有几个文件的 tarball 它们在不久前 实际上是在 2004 年或 2005 年的某个地方 分叉了 tarball 的源代码已经发生了相当多的变化 我想从中合并