什么内容转换为Git SHA-1

时间:2017-01-20 05:05:08

标签: git sha sourcetree

我对git操作/工作流程几乎没有疑问:

1.每次提交都会形成Git SHA-1。我需要明确一下,哪些文件用于制作SHA?,

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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存储库都是完整的存储库(浅克隆除外)。因此,如果您在笔记本电脑上创建一个新存储库,它就是一个完整的存储库。您可以添加,删除,提交,rebase,所有这些操作都是完全本地的。整个存储库历史记录在您的笔记本电脑上这就是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

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