我有我的Git存储库,它在根目录下有两个子目录:
/finisht
/static
Run Code Online (Sandbox Code Playgroud)
当这是在SVN,/finisht在一个地方签出,而/static在其他地方查出来,像这样:
svn co svn+ssh://admin@domain.com/home/admin/repos/finisht/static static
Run Code Online (Sandbox Code Playgroud)
有没有办法用Git做到这一点?
存储在树对象git ls-tree中的SHA1哈希值(由返回的sha1sum)与文件内容的SHA1哈希值不匹配(由返回)
$ git cat-file blob 4716ca912495c805b94a88ef6dc3fb4aff46bf3c | sha1sum
de20247992af0f949ae8df4fa9a37e4a03d7063e -
Run Code Online (Sandbox Code Playgroud)
git如何计算文件哈希值?它是否在计算哈希值之前压缩内容?
我正在寻找DEFLATE算法的命令行包装器.
我有一个使用DEFLATE压缩的文件(git blob),我想解压缩它.gzip命令似乎没有直接使用DEFLATE算法的选项,而不是gzip格式.
理想情况下,我正在寻找可以做到这一点的标准Unix/Linux工具.
编辑:这是我尝试使用gzip解决我的问题时得到的输出:
$ cat .git/objects/c0/fb67ab3fda7909000da003f4b2ce50a53f43e7 | gunzip
gzip: stdin: not in gzip format
Run Code Online (Sandbox Code Playgroud) 我试图理解git如何计算refs的哈希值.
$ git ls-remote https://github.com/git/git
....
29932f3915935d773dc8d52c292cadd81c81071d refs/tags/v2.4.2
9eabf5b536662000f79978c4d1b6e4eff5c8d785 refs/tags/v2.4.2^{}
....
Run Code Online (Sandbox Code Playgroud)
在本地克隆回购.refs/tags/v2.4.2^{}通过sha 检查ref
$ git cat-file -p 9eabf5b536662000f79978c4d1b6e4eff5c8d785
tree 655a20f99af32926cbf6d8fab092506ddd70e49c
parent df08eb357dd7f432c3dcbe0ef4b3212a38b4aeff
author Junio C Hamano <gitster@pobox.com> 1432673399 -0700
committer Junio C Hamano <gitster@pobox.com> 1432673399 -0700
Git 2.4.2
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Run Code Online (Sandbox Code Playgroud)
复制解压缩的内容,以便我们可以散列它.(AFAIK git在散列时使用未压缩的版本)
git cat-file -p 9eabf5b536662000f79978c4d1b6e4eff5c8d785 > fi
Run Code Online (Sandbox Code Playgroud)
让我们使用git自己的哈希命令对内容进行SHA-1
git hash-object fi
3cf741bbdbcdeed65e5371912742e854a035e665
Run Code Online (Sandbox Code Playgroud)
为什么输出不是[9e]abf5b536662000f79978c4d1b6e4eff5c8d785?我理解前两个字符(9e)是十六进制的长度.我该如何散列内容fi以便我可以获得git ref abf5b536662000f79978c4d1b6e4eff5c8d785?
有没有人有一个在目录上使用git hash-object的例子?它在文件上很容易工作*但是不能像我期望的那样工作**
*: git hash-object c:\somefile.txt
**: git hash-object -t tree c:\somedirectory
Run Code Online (Sandbox Code Playgroud)
当我尝试在目录中使用hash-object时,它会抱怨"致命:无法打开'C:\ someDirectory':权限被拒绝"
上下文:我希望能够通过我的git提交消息和提交进行搜索而无需经历令人费解的复杂git grep命令,因此我决定看看如何存储git commit消息.
我看了一下.git文件夹,它看起来像是存储的提交
.git/objects
Run Code Online (Sandbox Code Playgroud)
.git对象文件夹包含一堆名称为a6和9b的文件夹.这些文件夹中的每个文件夹都包含一个名称类似于提交的文件2f29598814b07fea915514cfc4d05129967bf7.当我在文本编辑器中打开其中一个文件时,我会感到胡言乱语.
在这个git commit日志中,文件夹9b包含一个commit sha
aed8a9f773efb2f498f19c31f8603b6cb2a4bc
Run Code Online (Sandbox Code Playgroud)
为什么,并且是否存在多个提交sha将存储在文件9b中的情况?
有没有办法将这个乱码转换成纯文本,以便我可以在文本编辑器中混淆提交?
Git(Kraken)仍然是新手。如果我的逻辑板坏了,不得不从备份中恢复存储库,重新安装软件,然后重新启动并在临时机器上运行,直到我可以从商店取回原件。
现在我在 Gitkraken 中打开了 repo,这告诉我我的修补程序分支上有 2,224 个文件更改——显然所有文件。如果我单击其中任何一个,“差异视图”面板将显示消息“文件模式从 217 更改为 14001”和“文件内容不变”。
我能够在文件 permissions.com 上翻译 217 八进制值,但没有找到 14001。
我不是文件权限方面的专家,但 217(大概是我之前机器上的默认设置,因为我不记得更改它)似乎不太理想,只有用户的写访问权限,组的执行访问权限,以及其他的完全访问权限。
谁能告诉我这个 14001 设置是关于什么的(这是一个全新的 MacBook Pro,与正在修复的 2015 型号相比)?这个设置是否比 217 更可取(它几乎必须是......?)?哪些设置适合静态网站文件,推送这些文件模式更改是好/坏/中立?
在回答关于Git的树对象的内部格式问题,获取对存储在包的一个特定的树对象,我用解压所有的对象在存储库的打包文件git unpack-objects.这似乎有点矫枉过正.是的,我知道这样的命令git show --raw,git ls-tree或git cat-file将获得接近的内部格式.
如何使git的输出在其内部格式的单个对象-完整的blob,tree,commit,或tag头-无论它是否存储在松动或压缩格式?
以下命令不会产生相同的输出:
cat .git/objects/96/d0745960850e8ac97406311f3288b6d035cefc
git show --raw 96d0745960850e8ac97406311f3288b6d035cefc
Run Code Online (Sandbox Code Playgroud)
我已经尝试了各种选项git show和git cat-file,但我似乎无法让事情匹配。我觉得应该以某种方式支持这一点。
具体来说,我想要文档格式。也就是说,我希望看到标题、空字节等。
如果我运行:
cat .git/objects/96/d0745960850e8ac97406311f3288b6d035cefc | zlib-deflate | hexdump
Run Code Online (Sandbox Code Playgroud)
我看到该行开头为:
0000000 62 6c 6f 62
Run Code Online (Sandbox Code Playgroud)
正如我所期望的那样,它对应于“b”“l”“o”“b”。
如果你好奇,我的zlib-deflate脚本的内容是:
#!/usr/bin/env python
# Deflates a stream of bytes compressed via zlib that are passed to stdin.
import io
import sys
import zlib
# /sf/ask/424562141/
reader = io.open(sys.stdin.fileno(), mode='rb', closefd=False)
data = reader.read()
print zlib.decompress(data)
Run Code Online (Sandbox Code Playgroud) 我正在关注本教程(https://jwiegley.github.io/git-from-the-bottom-up/1-Repository/3-blobs-are-stored-in-trees.html)了解git体系结构。
命令
$ git cat-file commit HEAD
Run Code Online (Sandbox Code Playgroud)
给我哈希表引用的树的哈希值,“ 0563f77d884e4f79ce95117e2d686d7d6e282887”。现在,我尝试在中找到此哈希.git:
$ find .git/ | xargs grep "0563f77"
Run Code Online (Sandbox Code Playgroud)
为什么什么都没出现?这个哈希值不存储在任何地方吗?
git ×11
hash ×3
blob ×1
checksum ×1
chmod ×1
deflate ×1
git-clone ×1
git-hash ×1
gitkraken ×1
octal ×1
permissions ×1
repository ×1
sha1 ×1
subdirectory ×1