【问题标题】:what contents are converted to Git SHA-1什么内容被转换为 Git SHA-1
【发布时间】:2017-01-20 14:13:51
【问题描述】:

我对 git 操作/工作流程毫无疑问:

1. Git SHA-1 在每次提交时形成。我需要弄清楚,哪些文件用于制作该 SHA?,

  • 在该提交(或)中有更改的文件
  • 存储库中的所有文件

2.我有 Windows 机器。我单独安装了 Sourcetree(GitClient),而不是 git 软件。我在 Github.com(远程存储库)上创建了一个存储库,通过这些,我将我的工作区实现为版本控制过程。我的工作区在远程。

如果我错了,请纠正我的想法 -> “在我们的机器上不安装Git服务器,我们可以通过远程存储库实现代码版本控制。而且,如果我们需要本地存储库,我们应该需要Git服务器。”

请有人澄清我的疑问。谢谢你:)

【问题讨论】:

标签: git sha sourcetree


【解决方案1】:

SHA 计算

SHA 是父对象哈希、树哈希、作者姓名和电子邮件、时间戳、提交消息文本以及提交中涉及的文件的结果。 (以及 GPG 签名,如果有的话。)

这就是为什么如果您更改提交消息或重新提交提交,您最终会得到一个新的 SHA。

存储库中的其余文件不直接参与该 SHA,但提交的父级的 SHA 是计算的一部分,因此它们是间接参与的。

您可以使用cat-file 查看所涉及的元数据。获取提交 ID 并执行以下操作:

$ git cat-file -p 3d911c37dc7cc6d50af9cbc66aa36084158308f5
tree 487660899e53bef8b15d3e1692172f689ed965c5
parent aa3b68973e845b7a900ab164603f154c8a1ba1c5
author Dan Lowe <dan@xxxxxx.com> 1483760015 -0500
committer Dan Lowe <dan@xxxxxx.com> 1483760015 -0500

Update line number settings in vim for 7.4+

在这里,我们看到树对象、一个父对象、作者和提交者,以及提交消息文本。未显示附加的文件对象,但它们在那里。在某些情况下,还存在第二个父级(例如合并提交)。

Git 客户端和服务器

所有 git 存储库都是完整的存储库(除了浅克隆)。因此,如果您在笔记本电脑上创建一个新的存储库,它就是一个完整的存储库。您可以添加、删除、提交、变基,所有这些操作都是完全本地的。整个存储库历史记录都在您的笔记本电脑上。这就是 git 如此擅长离线工作的原因之一。

但是,大多数人认为这还不够。他们需要与其他开发人员共享代码,或将其发布以供公众使用。这是 Github、Bitbucket 等服务的目的。

这些服务只是完整存储库的另一个副本,您正在与之同步。

您可以尝试以下方法。我将使用命令行 git 而不是 SourceTree。

## Make two repositories
mkdir a && cd a && git init
cd ..
mkdir b && cd b && git init --bare

## Add some content to 'a'
cd ../a
touch a.txt && git add . && git commit -m "New content"

## Set the other repository as your remote
git remote add origin ../b

## Let's push!
git push -u origin master

## Take a look at 'b' now...
cd ../b
git log

... 你从 a 提交的内容就在那里。你刚刚做了一个 git 服务器!虽然不是最有用的,因为它就在你的磁盘上。但是如果你把一些 SSH 或 https 服务器放在中间......现在你有了 Github,只是没有花哨的 Web 界面部分。

【讨论】:

  • 嗨@Dan Lowe,非常感谢您的回复:) 对于本地存储库,我们需要在我们的机器上安装 Git 才能工作。但是,远程存储库呢? Git 服务器位于何处,用于执行 GIT 操作。
  • @LalithKumar git 服务器可以在任何地方。您可以使用 gitolite 或 Gitlab CE(或 EE)等工具托管您自己的服务,也可以使用 Github 或 Bitbucket 等托管服务。哪个选项最好取决于您想要什么。在我的公司,我们使用的是 Gitlab EE,但这取决于您的需求和预算。
  • 此外,在提交中看到的tree 哈希指定了提交的完整文件内容。它本身不是提交中任何单个文件的哈希,但它取决于每个这样的哈希。修改文件并根据结果进行新的提交,新树将具有新的不同哈希。但请注意,如果您更改文件 back 并使用与先前提交相同的内容进行另一个新提交,您将 重新使用 现有提交的树哈希(和树对象)。
猜你喜欢
  • 2021-09-25
  • 1970-01-01
  • 2011-07-06
  • 2022-01-22
  • 1970-01-01
  • 2020-05-22
  • 1970-01-01
  • 1970-01-01
  • 2017-06-25
相关资源
最近更新 更多