流行的源代码控制系统如何区分二进制文件和文本文件

2024-03-31

寻找有关不同源代码控制系统如何区分(或检测)文件类型(二进制与文本)的文章、文档或直观知识。特别令人感兴趣的是 Git 与 Mercurial 相比是如何做到这一点的。

他们是否看: 文件扩展名? 文件签名或内容(即该文件是否为 UTF8)? 各种东西的混合?


SVN:

当您第一次将文件添加或导入到 Subversion 中时,系统会检查该文件以确定它是否是二进制文件。目前,Subversion 只查看文件的前 1024 个字节;如果任何字节为零,或者超过 15% 不是 ASCII 打印字符,则 Subversion 将该文件称为二进制文件。然而,这种启发式将来可能会得到改进。

http://subversion.apache.org/faq.html#binary-files http://subversion.apache.org/faq.html#binary-files

Git 以类似的方式工作。 Git 通常通过检查内容的开头来正确猜测 blob 是否包含文本或二进制数据 - 它检查前 8000 字节中是否出现零字节(NUL“字符”)。

http://git-scm.com/docs/gitattributes http://git-scm.com/docs/gitattributes

来自 Git 源代码:

 #define FIRST_FEW_BYTES 8000
 int buffer_is_binary(const char *ptr, unsigned long size)
 {
         if (FIRST_FEW_BYTES < size)
                 size = FIRST_FEW_BYTES;
         return !!memchr(ptr, 0, size);
 }

http://git.kernel.org/?p=git​​/git.git;a=blob;f=xdiff-interface.c;h=0e2c169227ad29b5bf546c6c1b97e1a1d8ed7409;hb=HEAD http://git.kernel.org/?p=git/git.git;a=blob;f=xdiff-interface.c;h=0e2c169227ad29b5bf546c6c1b97e1a1d8ed7409;hb=HEAD

@tonfa 提出了一个很好的观点:“另请注意,它关心文件是文本还是二进制的唯一地方是用于显示差异和进行合并。存储格式不关心它。”

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

流行的源代码控制系统如何区分二进制文件和文本文件 的相关文章

  • 无法从 Sourcetree 拉取 Git 远程存储库

    我生成了 ssh 密钥并配置了我的 git 和 SourceTree 我可以 git pull 并从 Git bash 执行其他操作 注意 我在 bashrc 中添加了以下内容以使其正常工作 eval ssh agent ssh add 然
  • 如何在 macOS 上将 Git 升级到最新版本?

    我刚刚购买了一台装有 OS X Lion 的新 Mac 我在终端中检查了默认安装的 git 版本 我得到了答案 git version gt git version 1 7 5 4 我想将 git 升级到最新版本 1 7 8 3 因此我下载
  • 创建一个空分支?

    我有一个包含项目的 git 存储库 我现在要对这个项目进行大规模的修改 如何为这次大修创建一个空白的新分支 然后当完成时 如何将这个分支切换到master 使用 checkout orphan 命令 git checkout orphan
  • 将bitbucket发布到数字海洋

    我本质上是试图使用 bitbucket 来理解 git 的概念 我一直在通过修改本地帐户和 bitbucket 帐户之间的文件来练习版本控制 事实证明这很有帮助 现在我正在尝试弄清楚如何将文件从 bitbucket 或者我猜是 GitHub
  • git 排除与忽略

    I use Tower http www git tower com 用于在 Mac 中使用 Git Tower 中的设置具有创建 gitignore 的 忽略 部分 但它还有另一个名为 排除 的部分 似乎可以将排除与 git ls fil
  • 如何减少 Bitbucket 上的 git repo 大小?

    我的问题摘要 在我向两个现有文件添加了几百个字节后 我在 Bitbucket 上的一个私人存储库的大小突然增加了一倍多 该存储库现在超过 2GB 这导致 Bitbucket 将其置于只读模式 因为它处于只读模式 所以我无法推送会减少存储库大
  • 使用 gitignore 嵌套存储库。

    我想嵌套 2 个 git 存储库 我一直在阅读子模块 有一段时间我认为它很棒 我想我可能想要其他东西 这是我的情况 首先 我想我应该提到我的所有服务器都托管网站 并以 staging domain com 和 domain com 实时 模
  • 忽略 Mercurial hook 中的某些 Mercurial 命令

    我有一个像这样的善变钩子 hooks pretxncommit myhook python path to file myhook 代码如下所示 def myhook ui repo kwargs do some stuff 但在我的例子中
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • 将构建日期放入“关于”框中

    我有一个带有 关于 框的 C WinForms 应用程序 我使用以下方法将版本号放入 关于 框中 FileVersionInfo GetVersionInfo Assembly GetExecutingAssembly Location F
  • git merge 冲突的不同场景

    我试图了解 git 合并后可能发生 git 冲突的情况以及如何避免它们 我创建了一个 git 存储库并向其中添加了一个文本文件 我已将 1 添加到文本文件中并将其提交给 master 我已经从 master 创建了一个新分支 分支 2 并将
  • 有没有一个简单的命令可以将分支转换为标签?

    我即将完成将 哑快照 转换为 git 的繁琐过程 这个过程进展得非常顺利 感谢这个重命名过程 https stackoverflow com questions 6628539 how to tell git that its the sa
  • Gerrit 和 Active Directory

    我正在尝试设置 Gerrit 以使用我们的公司 Active Directory 进行身份验证 我知道很多人都设法让它发挥作用 但它对我来说不起作用 如果我运行一个ldapsearch命令如下我得到了正确的结果 所以我知道我的搜索字符串是正
  • Phonegap使用命令行工具添加插件

    我是phonegap的新手 我按照phonegap官方网站中定义的步骤使用命令行工具创建项目 nodejs 我成功创建项目并添加平台 但是 当我尝试添加插件时出现以下错误 命令 cordova plugin add https git wi
  • MSysGit 与 Windows 版 Git

    我无法确定MSysGit 和 Windows 版 Git 之间的区别 http msysgit github com 它们有何不同 为什么我会选择其中之一而不是另一个 它们不是同一个东西吗 On http msysgit github co
  • 是否可以检测 http git 远程是智能还是愚蠢?

    我正在我的应用程序中实现一个选项来使用 depth 1制作 git repo 的最小功能克隆 我刚刚意识到愚蠢的 http 传输不支持 depth 我想自动检测 http 远程是愚蠢的还是聪明的 这样我就可以省略 depth与哑 http
  • 如何恢复 CVS 中的重大更改?

    我的一位同事完全搞乱了我们主 CVS 存储库中目录的内容 我需要将整个模块恢复到去年年底的状态 请问执行此操作的 CVS 命令是什么 他添加和删除了数百个文件 因此简单的 从旧签出和提交中复制文件 是不够的 我有 RTFM 和 STFW 我
  • 使用 Windows 网络共享目录时 Hg 存储库损坏

    我希望我能在这里得到一些帮助 因为 SO UX 比 Mercurial 邮件列表更好 多年来我一直在家里愉快地使用 Mercurial 我还将它与 Bitbucket Cloud 一起用于一些更严肃 但仍然是爱好 的项目 去年 我将我的团队
  • 如何创建名称中带有正斜杠的标签

    当我已经有了类似的标签时 有什么方法可以创建名称中带有正斜杠的 git 标签吗 假设我有 1 16 0 标签 并且我想创建 1 16 0 1 0 0 标签 git tag 1 16 0 1 0 0 error refs tags 1 16
  • 为 RHEL 6 安装/构建 git-svn

    我无权访问 RHEL6 存储库 那么在 RedHat Enterprise Linux 6 上构建和 或安装 git svn 工具的最佳方法是什么 通过卸载现有的 yum擦除git 并从源安装最新的来设法安装git和git svn 1 7

随机推荐

  • 使用正则表达式从字符串中删除日期

    好的 我有一个字符串 title string 它可能类似于以下任何一个 title string 20 08 12 First Test Event title string First Test event 20 08 12 title
  • 为什么 Python 中字典中的项目顺序会改变? [复制]

    这个问题在这里已经有答案了 我正在尝试从一些教程中学习Python 这是我遇到的一个让我困惑的简单例子 gt gt gt d server mpilgrim database master uid sa pwd secret gt gt g
  • Web Worker 和 Canvas 数据

    我看过很多关于网络工作者的帖子
  • 带按钮控件的 DataGridView - 删除行

    我想要在每行的末尾有一个删除按钮DataGridView通过单击我想从绑定列表中删除所需的行 该绑定列表是我的网格的数据源 但我似乎无法做到这一点 我在产品类中创建了一个按钮对象 并使用唯一的 id 实例化它以从列表中删除该对象 但按钮未显
  • 如何桥接 JavaScript(参差不齐)数组和 std::vector> 对象?

    在 JavaScript 中 我有一个 线 列表 每条线都由不定数量的 点 组成 每个点都有以下形式 x y 所以它是一个 3D 参差不齐的数组 现在我需要在 emscripten 的帮助下将它传递给我的 C 代码 embind https
  • Nuget Push 总是返回 404(未找到)

    我尝试将 nuget 包发布到我的 GitHub Packages 帐户 但在所有情况下我都会遇到 404 错误 我已按照 GitHub 网站上的要求进行操作 nuget source Add Name GitHub Source http
  • 限制异步任务

    我想运行一堆异步任务 并限制在任何给定时间可以等待完成的任务数量 假设您有 1000 个 URL 并且您只想一次打开 50 个请求 但是 一旦一个请求完成 您就会打开与列表中下一个 URL 的连接 这样 每次始终打开 50 个连接 直到 U
  • Spring Security 使用有效的 JWT 返回 403

    我正在使用 Postman 来测试我在 Spring Boot 2 2 6 中使用 Spring Security 创建的简单 OAuth2 API 我在请求新用户凭据时成功收到 JWT 但当我尝试使用标头中的此令牌访问它们时 我的所有端点
  • 如何使用2个sql请求和数据集中的2个数据表在水晶报表中显示数据?

    我有一个包含 2 个数据表 a 的数据集 我需要使用 2 个 sql 请求在水晶报表中显示数据 因此 我在数据集中创建了 2 个数据表 DataTable1 和 dataTable2 我尝试了这段代码 但它总是执行第二个 sql 请求 co
  • 给定两个表,从一个表中选择所有数据,并仅从另一个表中选择最新的数据

    我正在尝试构建一个论坛网站 该网站使用 PHP 和 MySQL 数据库来存储其类别和主题内容 在主页上 我想要一个表格 显示所有类别的列表以及每个类别中最近发布的主题 我想编写一个查询 该查询返回类别表中的所有类别 并且仅返回主题表中每个类
  • Illuminate\Support\MessageBag::has() 缺少参数 1

    当我访问我的 Laravel 项目时 它返回以下错误 如何解决它 Missing argument 1 for Illuminate Support MessageBag has called in var www laravel vend
  • MySQL SUM 多列

    我还有一个关于总和的问题 我想对一支棒球队的得分进行求和 将作为本地球员打球时的得分与作为访客打球时的得分相加 匹配表是这样的 Baseball matches Id IdTeamHome IdTeamAway ScoreHome Scor
  • 正则表达式匹配字符串的一部分,但不匹配整个字符串

    这是我用来验证可以包含小写和大写字母 数字和破折号的字符串的正则表达式 a zA Z0 9 其结果如下 abd 火柴 abcd 火柴 abcd0 火柴 abcd0 火柴 abc 不匹配 正确 abc efg 匹配 不正确 不应该 我究竟做错
  • 在 Windows 上编译 Erlang 代码

    我安装了 Erlang 13B 并尝试按照教程进行操作 每次我到达c tut 我得到一个错误而不是 ok tut 所以看起来没有安装任何模块 有人能指出我正确的方向吗 我尝试过 Emacs 但我真的不知道如何使用它 甚至还没有接近让 Erl
  • OpenGL ES 2.0 中的 glTexGen

    我已经尝试了几个小时来用 GL OBJECT LINEAR 实现 glTexGen 的 GLSL 替换 对于 OpenGL ES 2 0 在 Ogl GLSL 中 有 gl TextureMatrix 使这变得更容易 但这在 OpenGL
  • 将对象直接流式传输到 std::string

    给定某种可流式传输的类型 struct X int i friend std ostream operator lt lt std ostream os X const x return os lt lt X lt lt x i lt lt
  • 在 Python 中嵌套函数会产生开销吗?

    在Python中 如果我在父函数中有一个子函数 那么每次调用父函数时子函数是否都会 初始化 创建 将一个函数嵌套在另一个函数中是否会产生任何性能开销 代码对象是预编译的 因此该部分没有开销 函数对象在每次调用时构建 它将函数名称绑定到代码对
  • 在 WPF 中仅画刷椭圆的部分

    我无法找到绘制以下形状的最佳方法 我正在使用下面的代码来绘制Ellipse在视觉层上 但我怎么可能只刷宿舍呢 我认为可以使用LinearGradientBrush or RadialGradientBrush但我不知道如何使用它 var c
  • ActiveMQ NMS:当代理关闭时,connection.start() 会因故障转移协议而挂起

    我有使用 nms activemq 1 5 0 的 C 应用程序 当我的应用程序启动时 它尝试使用故障转移协议连接到代理 我有两个主从配置的代理 如果两个经纪人都关闭了 我的应用程序就会因为以下原因而陷入等待状态 connection st
  • 流行的源代码控制系统如何区分二进制文件和文本文件

    寻找有关不同源代码控制系统如何区分 或检测 文件类型 二进制与文本 的文章 文档或直观知识 特别令人感兴趣的是 Git 与 Mercurial 相比是如何做到这一点的 他们是否看 文件扩展名 文件签名或内容 即该文件是否为 UTF8 各种东