是否正在努力开发具有文件自动更改检测功能的面向构建的文件系统?

2024-01-25

我最近开始使用 Git。 我发现的有趣功能之一是使用哈希来快速检测更改。

另一方面,我看到构建工具(如 make、ant、javac 等)尝试通过检查文件的时间戳来检测源文件中的更改。

这种方法的问题是:

  1. 如果您从事不止一项工作 机器,你必须确保所有 时钟是同步的,否则, 可以考虑新文件 不变,因为另一台机器的时钟给了它相对于构建机器的过去的时间戳。
  2. 在大型项目中,您必须扫描所有文件的时间戳才能检测更改。

我想知道是否有人已经采用了 Git 方法来处理这些问题:

  1. 每个文件都有一个唯一的哈希值,具体取决于其内容,而不是时间戳。
  2. 每个目录也有其哈希值,具体取决于目录中的文件及其哈希值。
  3. 由于上述规则,即使是源代码树内部的简单更改也会导致根目录具有不同的哈希值

这种机制可以帮助使构建工具更快,因为检测源树中的更改是哈希比较的简单操作。如果源树根目录的哈希值发生了变化,则意味着源树中发生了更深层的变化,因此继续递归地扫描树以查找变化——就像 Git 检测变化一样。

这并不一定意味着这个源代码树必须由 Git 管理。 我的想法是,文件系统将自动提供文件的哈希码作为其属性/元数据之一,因此构建工具可以依赖于此而不是时间戳。此外,目录哈希会自动反映其中文件的状态。

我已经阅读了一些有关 Sun ZFS 的内容,但我不确定它是否是一个可以加快构建速度的完整解决方案。

你觉得这个想法怎么样? 已经有这样的文件系统了吗? 已经有这样的构建工具了吗?


我认为你试图解决的问题实际上不是问题:

使用 NTP 可以很大程度上避免时钟偏差问题。

当然,完全消除时钟偏差问题固然很好,但我们可能会同意,使用相当复杂的内容跟踪系统来解决该问题是矫枉过正的。

关于性能,扫描整个树在实践中往往不是问题。stat速度快得离谱(只要你不是使用 Windows)--ls -lR > /dev/null在我的系统上,遍历整个 Linux 内核树(38k 文件)需要 350 毫秒。

事实上,如果对所有文件进行统计是一个问题,那么您的版本控制系统将会变得很慢,这将是一个比构建性能更大的问题。每一个git status or git diff,例如,统计all工作副本中的文件来检查它们的修改时间,因此您最好希望速度很快。

所以如果你想加快速度make,不看文件系统;与实际消耗构建时间的任何事情相比,它很可能微不足道。

希望能让您放心!

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

是否正在努力开发具有文件自动更改检测功能的面向构建的文件系统? 的相关文章

  • 如何使用 .gitattributes 避免在 git root 中包含文件夹,但在 zip 的 dist 文件夹中包含同名文件夹

    我有一个名为lib在存储库的根目录和另一个名为lib在 dist 文件夹中 我正在尝试使用 gitattributes文件排除除 dist 之外的所有文件夹和文件 以便任何下载为 zip 或 tarball 的人都只会 git 分发文件 我
  • 将 Python 中的 SHA 哈希计算转换为 C#

    有人可以帮我将以下两行 python 代码转换为 C 代码吗 hash hmac new secret data digestmod hashlib sha1 key hash hexdigest 8 如果您有兴趣 其余的看起来像这样 us
  • NodeJS 在目录中递归地哈希文件

    我能够实现目录中的递归文件遍历 即探索目录中的所有子目录和文件 为此我使用了answer https stackoverflow com questions 5827612 node js fs readdir recursive dire
  • git subtree pull -P 不管 总是合并冲突

    问题 即使我没有进行任何更改 每次尝试拉入子树时 我都会遇到合并冲突 我在做什么 In 子树仓库 Make some changes git commit am Changes made git push origin master In
  • 无法使用 git 配置文件进行 ssh

    我知道它被问了很多次 但我无法得到我的问题的答案 我正在尝试使用配置文件 ssh 到系统 配置文件是 Host qa HostName 10 218 70 345 User user IdentityFile C Users bean ss
  • 忽略 git 中的本地配置文件

    Rails 应用程序中有一些本地文件 属于我们存储库的一部分 我希望 git 忽略它们 基本上 我希望 git 忽略我对 config environments 目录和 config application rb 文件中的任何内容所做的所有
  • 远程测试时如何搭建git开发环境

    这似乎是一个愚蠢的问题 但我觉得我对 GIT 相当了解 但我似乎无法按照我的意愿设置我的开发环境 我要么错过了一些非常简单的东西 要么我做错了 我在我的服务器上初始化了一个裸 git 存储库 将其克隆到我的本地计算机 提交我的文件并推送到原
  • 如何在 Jenkins 中安排构建?

    如何安排 Jenkins 构建 使其只能在每天的特定时间进行构建 例如下午 4 点开始 0 16 1 7 我理解为 每个月周一到周日下午 0 分钟 下午 4 点 但是它每分钟都会构建 如果有任何建议 我将不胜感激 谢谢 Update 请阅读
  • Maven:从构建中排除测试

    我在项目的 src test java 文件夹中有一些类用作测试 当我使用标准 Maven 编译插件运行 Maven 时 这些项目被编译成 class 文件 并包含在打包编译代码的 jar 中 在运行 Maven 和构建我的版本之前 我已经
  • 使用 Jenkins API 促进构建

    给定一个具有不同升级作业的 Jenkins 构建作业 即 将构建升级到不同的环境 如何使用 Jenkins API 触发特定构建的特定升级作业 综合不同来源的答案得出 Username Username APItoken 12345 Cre
  • 自动将所有 GitHub 存储库镜像到 gitlab

    对于 GitLab 必须手动为每个存储库设置拉 推镜像 我想知道那里有any way可以自动将所有 Github 存储库同步到 GitLab 这样 当您在 GitHub 中创建新的存储库时 GitLab 中的存储库将自动创建 并充当拉取镜像
  • 格里特:! [远程拒绝] HEAD -> refs/publish/master (没有新的更改)

    我做了一些更改 提交了它们并将分支推送到 Gerrit git push gerrit 现在我的更改没有出现在 Gerrit 中 我认为这是因为我手动推送更改而不是使用git 审查 https github com openstack in
  • 致命:.git/info/refs 无效:这是一个 git 存储库吗?

    我有一个托管在 Assembla 上的 Git 存储库 我正在尝试执行以下操作 git push u origin master 我一遍又一遍地收到以下错误 fatal https url repo name git info refs n
  • 默认情况下 git merge -Xignore-space-change

    我该如何设置该选项ignore space change对于所有合并使用git config 我也许可以使用别名merge 但因为我希望该设置应用于git stash pop git stash apply git pull and git
  • VS 2015 + Bower:在防火墙后面不起作用

    Problem 在 Visual Studio 2015 中 使用 Bower 我的包在防火墙后面时恢复失败 并出现类似以下内容的错误 ECMDERR 无法执行 git ls remote tags heads git github com
  • 在 Perl 中使用数据引用的正确方法

    我有一组想要处理的数据 为了简化我的代码 最好通过指向原始数据的引用数组来访问我的数据的某些子集 比解释更好的是 我写下了这个例子 它还没有工作 最后 我想更新原始数据 而不必更新所有子集 用 Perl 可以做这样的事情吗 usr bin
  • 将构建参数传递给 .wxs 文件以动态构建 wix 安装程序

    我是一名学生开发人员 我已经为我现在工作的公司构建了几个安装程序 所以我对WIX还是比较熟悉的 我们最近决定拥有一个构建服务器来自动构建我们的解决方案 它构建调试和发布以及混淆 和非混淆 项目 你真的不需要理解这些 您需要了解的是 我有相同
  • 在 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
  • 如何将工作树与提交进行比较?

    我在用着 git diff mycommit 用于比较我的工作树mycommit 但它似乎忽略当前索引中不存在的文件 您可以按如下方式重现它 git init echo A gt A txt git add git commit m A g

随机推荐

  • rolling.apply 应用于需要多列数据帧以减少单列的自定义函数

    我正在尝试为我的内容创建一个附加列df newc 通过滚动 申请df cond 具有自定义功能 自定义函数需要两列df 我不知道如何让它发挥作用 I tried df newc df cond rolling 4 apply T corre
  • 检查资源中是否存在 ID (R.id.something)

    因此 我有代码使用 AtomicInteger 为多个元素生成 ID 该 AtomicInteger 默认设置为 Integer MAX VALUE 并且随着分配 ID 的每个视图从那里递减 所以第一个带有生成 ID 的视图将是Intege
  • “django 视图中出现未知列‘user_id’错误

    我遇到一个错误 我不确定是什么原因造成的 这是错误 Exception Type OperationalError Exception Value 1054 Unknown column user id in field list 有谁知道
  • Spring Data Mongo @Column 等效注释(@Property?)

    是否有与 JPA Column 注释等效的 SpringData Mongo 基本上 我有一个 POJO 其中有一个属性 我想用不同的名称将其存储在 Mongo 中 因此 以下对象 public class Pojo Property ba
  • 使用 imagemagick montage 命令将平铺图像粘合在一起,无需调整大小

    这似乎是一个相当常见的问题 所以我将使用我能想到的尽可能多的关键字来问它 我有一堆 嗯 九个 平铺 jpeg 带有标准平铺文件名 每个 jpeg 均为 220x175 像素 top row tile 1 0 0 jpg tile 1 1 0
  • 显示吸气剂

    我正在研究getters setters 一般的想法是它们是邪恶的 应该避免 您应该让对象完成工作并产生结果 阅读材料 为什么 getter 和 setter 方法是邪恶的 https www javaworld com article 2
  • ASP.NET,如何管理不同类型角色的用户

    我想创建一个包含不同用户的网站 用户可以有不同的角色 管理员和用户 这是一个有据可查的情况 但我还想根据用户的位置对用户进行分组 因此在每个位置我都可以拥有管理员和用户 多维角色系统 原因是 德国用户应该有权访问一组特定的文档 而意大利用户
  • 访问数组内的对象

    I m trying to access values inside Firebase array gt object 当我尝试访问 v for 内部的值时 它运行良好 但我不能这样做 postDetail author 它返回未定义 解决
  • 无法阻止 Visual Studio 2015 在 JS 文件中滞后数秒,提示“JavaScript 语言服务正在后台处理您的请求...”?

    在状态栏中 当我输入 Js 文件时 它会在键盘上显示此消息 并且编辑器挂起 2 或 3 秒 这大概当我将一些 Js 文件移动到类别文件夹中时突然开始发生但我不确定这是原因 我不知道是什么问题 在出现问题之前 所有 js 文件都位于同一文件夹
  • 如何访问 jquery ajax 调用返回的数据? $.ajax(...) 之外;

    我如何访问 jquery ajax 调用返回的数据 在 ajax 之外 Reloads the inital page function jobexist jobname var dataString jobname jobname var
  • Android O Gradle 构建因 travis ci 失败

    我正在尝试将 Travis CI 用于我的 Android 项目 但我的构建不断失败 但可以在本地构建上运行 我正在使用 Android Studio Preview 3 和 gradle 3 alpha 3 我在下面收到此错误 找不到 c
  • 如何删除正在执行的jar文件

    我创建了一个应用程序 在该应用程序中 它根据操作修改 jar 内的属性文件 我可以使用更新的更改创建一个新的临时 jar 但无法将 jar 文件重命名为现有的 jar 文件名 由于它正在运行 我无法删除和重命名它 任何人都可以提出任何操作或
  • data.table 中的条件连接?

    我有以下数据表 dtgrouped2 MonthNo Unique Total 1 1 AAA 10 2 1 BBB 0 3 2 CCC 3 4 2 DDD 0 5 3 AAA 0 6 3 BBB 35 7 4 CCC 15 8 4 AAA
  • Spark Select 与 Scala 列列表

    我正在尝试找到一种使用 List Column 进行火花选择的好方法 我正在爆炸一列 而不是通过爆炸列传回我感兴趣的所有列 var columns getColumns x Returns a List Column tempDf sele
  • 如何在 Seaborn 热图旁边添加列

    鉴于下面的代码会生成热图 我如何获得 D 列 总列 要在热图右侧显示为无颜色的列 只需对齐每个单元格的总值 我还试图将标签移到顶部 我不介意左侧的标签是水平的 因为我的实际数据不会出现这种情况 import matplotlib pyplo
  • len() 是 python 中的函数还是方法?

    在面向对象编程的上下文中 函数不同于方法 当我检查帮助文档时 这段代码 len outputs Signature len obj Docstring Return the number of items in a container Ty
  • 如何将 .gif 转换为 byte[][]?

    我正在使用一个有方法的 API public void setImage byte newImage API 参考中给出的唯一信息是 该图像的格式是简单的原始2D array字节数 每个字节代表灰度black 0 to white 255
  • 在 Windows 上的 Cmake 中链接不同的库以进行调试和发布构建?

    因此 我有一个正在编译的库 我需要链接不同的第三方内容 具体取决于它是调试还是发布版本 特别是这些库的发布或调试版本 在 Cmake 中有一个简单的方法可以做到这一点吗 编辑 我应该注意我正在使用 Visual Studio 根据CMake
  • Debian httpredir 镜像系统在 Docker 中不可靠/不可用?

    简洁版本 Debian 的httpredir debian org镜像服务导致我的 Docker 构建经常失败 因为 apt get 无法下载包或连接到服务器或类似的东西 我是唯一一个有这个问题的人吗 问题是我的 Debian 的还是 Do
  • 是否正在努力开发具有文件自动更改检测功能的面向构建的文件系统?

    我最近开始使用 Git 我发现的有趣功能之一是使用哈希来快速检测更改 另一方面 我看到构建工具 如 make ant javac 等 尝试通过检查文件的时间戳来检测源文件中的更改 这种方法的问题是 如果您从事不止一项工作 机器 你必须确保所