这可能永远不会发生在现实世界中,并且可能永远不会发生,但让我们考虑一下:假设您有一个git存储库,进行提交,并且变得非常不幸:其中一个blob最终拥有相同的SHA-1另一个已存在于您的存储库中.问题是,Git将如何处理这个?简直失败了?找到一种方法来链接两个blob并根据上下文检查哪一个需要?
更多的是脑筋急转弯而非实际问题,但我发现这个问题很有趣.
将代码保存在gitlab和github中是危险的吗?
我听说将代码提交给gitlab和github是相当安全的.
原因是每个代码都经过哈希处理,并且每个人都不可能在不使用git工具的情况下更改代码.
这是真的?
我读到了有关如何修改提交消息的内容.接受的答案是:
如果您已经将提交推送到远程分支,那么您需要强制推送提交
git push <remote> <branch> --force.
这是我的理解(也来自已接受的答案)git push --force将覆盖远程分支上的所有数据与本地数据.
为什么在更改提交消息后强制推送是必要的?如果我修改提交消息并试图在没有-f或者推送的情况下会发生什么--force?
我看过这篇文章,它提到 Git 对我正在使用的版本使用 SHA-1 哈希。然而,当我将 的输出git hash-object与熟悉的进行比较时sha1sum,我得到了不同的结果。例如:
$ git --version
git version 2.17.1
$ git hash-object data/letter.txt
2e65efe2a145dda7ee51d1741299f848e5bf752e
$ sha1sum data/letter.txt
86f7e437faa5a7fce15d1ddcb9eaeaea377667b8 data/letter.txt
Run Code Online (Sandbox Code Playgroud)
我正在关注这个帖子。该文件letter.txt包含一个字母“a”。
为什么这些命令会产生不同的结果?
当在github上使用来自未知第三方的代码时,我总是确保检查代码中没有可能危及系统安全性的明显后门存在.
我正在审查的存储库的特定状态可能绑定到git标记和提交哈希.众所周知,git标签的内容很容易改变.因此,再次下载源代码并基于版本标记信任它绝对不安全.
我的问题是:在下载新的源代码下载时,我是否可以相信,如果我根据它的完整提交哈希签出特定提交,那么这与我之前审查过的代码完全相同?
这个问题的焦点不在于完全发生sha1碰撞的可能性(因为碰撞比计算特定的sha1散列更容易计算 - 有希望 - 目前几乎不可能?),但是是否每个每个文件都是此sha1 sum的一部分,因此更改将始终触发不同的哈希.