Github是否存储了对回购生命中所有对回购的承诺?

时间:2014-01-22 07:28:24

标签: git github

我的大部分源代码控制经验都是Subversion和那里(除非你使用管理模式删除功能,你通常不这样做)所有对存储库的提交都会在存储库的生命周期内保留。

我不确定Github也是如此。例如,this post talks about some reflog thing和某些 prune 可能会以不可撤销的方式删除某些数据。

假设没有删除提交被推送的repo,我可以确定提交永远不会以不可撤销的方式丢失吗?

1 个答案:

答案 0 :(得分:1)

提交完成后,一旦你将提交推送到GitHub仓库,它就会有一个sha1。

并且该GitHub仓库的任何克隆都能够找到相同的SHA1 确定此提交仍然存在。

Git Basics中:

  

Git中的所有内容在存储之前都会进行检查求和,然后由该校验和引用。这意味着如果没有Git知道它,就不可能改变任何文件或目录的内容。这个功能在最低级别内置于Git中,并且是其理念的组成部分。如果Git无法检测到信息,您就不会丢失传输中的信息或导致文件损坏。

     

Git用于此校验和的机制称为SHA-1哈希   这是一个40个字符的字符串,由十六进制字符(0–9a–f组成),并根据Git中文件或目录结构的内容计算。
  SHA-1哈希看起来像这样:

24b9da6552252987aa493b52f8696cd6d3b00373

实际上,提交的SHA1也基于所述提交的父级:您不能在不影响所有后续提交的情况下更改过去的历史记录。


如果您使用reflog 覆盖 GitHub上的历史记录,则只会出现

git push --force。 在这种情况下,GitHub支持可以访问GitHub仓库的本地reflog,并且可以恢复任何分支或标记不再引用的提交(因此它存在于reflog中)。

更新:或 repo所有者可以查询GitHub事件API
请参阅“Does GitHub remember commit IDs?