- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
关于它们是如何工作的,我想知道低级工作的东西:
关于安全性,说实话,巨大的 Linux 内核存储库是其安全性的证明。但我想知道以下几点:
好的,我正在编辑,因为问题含糊不清,答案没有解决细节问题。
Git 似乎默认使用的统一差异格式基本上输出三样东西:更改、更改周围的上下文以及与上下文相关的行号。这些事情中的每一个可能会或可能不会同时发生变化,因此 Git 基本上必须处理 8 种可能的情况。
例如,如果在上下文之前添加或删除了行,行号将不同;但是如果上下文和更改仍然相同,那么 diff 可以使用上下文本身来对齐文本并应用补丁(我不知道这是否确实发生了)。现在,其他情况会发生什么?我想知道 Git 如何决定自动应用更改以及何时决定发出错误并让用户解决冲突的详细信息。
我非常确定 Git 是完全可靠的,因为它确实拥有完整的提交历史记录并且可以遍历历史记录。我想要的是一些关于学术研究和引用的指示,如果它们存在的话。
仍然与这个主题有点相关,我们知道 Git/diff 将文件视为通用文本文件并在行上工作。此外,diff 采用的 LCS 算法将生成一个补丁,尽量减少更改的数量。
所以这里有一些我也想知道的事情:
同样,这些话题可能很大,欢迎发表学术文章。
最佳答案
What will trigger a merge conflict?
我们来看最简单的git的merge strategies ,递归,首先:当 merge 两个分支时,比如说a和b,它们有一个共同的祖先c, git 创建一个补丁,从提交 c 到 a 头部的提交广告,并尝试将该补丁应用于 b .如果补丁失败,那就是 merge 冲突。
git 默认使用递归 策略,3-way merge .总体思路是相同的:如果链接中描述的 3 向 merge 算法失败,因为来自不同分支的两个提交更改了相同的行,那就是 merge 冲突。
Is the context also used by the tools in order to apply the patch?
是的。如果补丁没有应用到 diff 文件中存储的确切行号,补丁会根据上下文尝试找到与原始行相邻几行的正确行。
How do they deal with changes that do not actually modify source code behavior? For example, swapping function definition places.
补丁不是智能的,它不能区分这样的变化。它将移动的函数视为几行添加和几行删除。如果一个分支上的提交改变了一个函数,而另一个分支上的提交移动了未改变的部分,那么 merge 的尝试总是会给你带来 merge 冲突。
Are there any caveats/limitations regarding the tools that the user should be aware of?
至于 patch 和 diff:否。两者都使用自 1970 年代初就存在的算法,并且非常稳健。只要他们不提示,您就可以相当确定他们按照您的意愿行事。
也就是说:git merge
尝试自行解决 merge 冲突。在极少数情况下,这里的事情可能会出错 - this page有一个接近尾声的例子。
Have the algorithms been proven to not generate wrong results? If not, are there implementations/papers proposing integration testing that at least prove them to be error-free empirically?
“错误的结果”在这种情况下是一个相当不明确的术语;我会声称它无法被证明。经验证明,将 diff a b
生成的补丁应用于文件 a
无论如何都会生成文件 b
。
Source code, even when changed, will not change much (specially because of the algorithm implemented and syntax restrictions), but can the safety be generalized to generic text files?
同样,diff/patch/git 不区分源代码和其他文本文件。 git 在通用文本文件上的表现与在源代码上的表现一样好。
I'm pretty much sure the Git is fully reliable since it do have the full history of commits and can traverse history. What I would like is some pointers to academic research and references regarding this, if they exist.
git 中的提交是带有元数据的树的快照,而不是与相邻版本的差异。 patch 和 diff 根本不参与修订遍历。 (但是在表面之下一层,git 然后在 pack files that do use a delta compression algorithm 中组织 blob。这里的错误很容易发现,因为 git 在内部使用 sha1 总和来识别文件,如果发生错误,总和会改变。)
Why is LCS used instead of other string metric algorithms?
git 默认使用 Myers 算法。 The original paper解释了为什么它以这种方式工作。 (它不是纯粹的濒海战斗舰。)
关于git - 差异/补丁如何工作以及它们的安全性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33545654/
我从NVIDIA手册Eg中复制了以下代码:__threadfence()。他们为什么有 在以下代码中使用了__threadfence()。我认为使用__syncthreads()而不是__thread
我在使用 SVN 更改列表和 svn diff 时遇到了一些麻烦.特别是我想获取特定修订范围的特定文件列表的更改历史记录。 SVN 变更列表似乎是完美的解决方案,所以我的方法是: svn change
我有两个 IP 地址列表。我需要将它们合并到三个文件中,交集,仅来自 list1 的文件和仅来自 list2 的文件。 我可以用 awk/diff 或任何其他简单的 unix 命令来做到这一点吗?如何
假设自上次更新(恢复)到我的 a.b 文件以来我做了一些更改。 此 a.b 文件也在存储库中更改。 现在我想将我所做的更改与 repos 更改进行比较。 如果我 svn revert 文件,我可以看到
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
我使用的是 openssl 1.0.1c , linux x86_64 我正在创建包含“hello”的文件(没有换行符) openssl dgst -sha256 hello_file i get :
假设我们有几个库。 有什么区别核心和 普通 图书馆?他们应该如何被认可,我们是否组织了两者的职责? +Common -Class1 +Core -Class2 +Lib1 has : Comm
如何在 SQLite 中计算以毫秒为单位的最小时间间隔? 好的,提供一些背景信息, 这是我的 table 的样子: link_budget table 所以有这个时间列,我想发出一个请求,以毫秒为单位
我想知道,乐观并发控制 (OCC) 和多版本并发控制 (MVCC) 之间的区别是什么? 到目前为止,我知道两者都是基于更新的版本检查。 在 OCC 中,我读到了没有获取读取访问锁的事务,仅适用于以后的
说到 SignalR,我有点菜鸟。刚刚开始四处探索和谷歌搜索它,我想知道是否有人可以向我解释完成的事情之间的一些差异。 在我见过的一些示例中,人们需要创建一个 Startup 类并定义 app.Map
我在 Ogre 工作,但这是一个一般的四元数问题。 我有一个对象,我最初对其应用旋转四元数 Q1。后来,我想让它看起来好像我最初通过不同的四元数 Q2 旋转了对象。 我如何计算四元数,该四元数将采用已
我了解 javascript 模块模式,但我使用两种类型的模块模式,并且想从架构 Angular 了解它们之间的区别。 // PATTERN ONE var module = (function()
我有两个具有完全相同键的 JSON。 val json1 = """{ 'name': 'Henry', 'age' : 26, 'activities' : {
我发现使用 VBA 在 Excel 中复制单个文件有两种不同的方法。一是文件复制: FileCopy (originalPath), (pathToCopyTo) 另一个是名称: Name (orig
我想知道查找两个 float 组之间差异的绝对值的最有效方法是什么? 是否是以下内容: private float absDifference(float[] vector1, float[] vec
我有一个关于 wicket getApplication 的问题。 getApplication() 和 getSession().getApplication 有什么区别? 部署 wicket 应用
我刚刚开始使用activemq,我有一个关于追溯消费者的问题,为了启用这个功能,你需要有一个持久的订阅。但是在主题上启用和不启用追溯的持久订阅有什么区别? activemq 文档说。 http://a
我有两个具有完全相同键的 JSON。 val json1 = """{ 'name': 'Henry', 'age' : 26, 'activities' : {
得到另一个 Erlang 二进制表示查询('因为这就是我最近正在阅读的内容,并且需要二进制协议(protocol)实现)。 如果我正确理解了类型说明符,那么对于“浮点”类型值,8 字节表示似乎很好(这
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
我是一名优秀的程序员,十分优秀!