git - 为什么暂存命令 git read-tree不管用
问题描述
在 O'reilly 的 Bogdan Stashchuk 的课程“完整的 Git 指南:理解和掌握 Git 和 GitHub”中。在第 3 章使用 git ls-files 读取暂存区中的文件。
我正在使用 git read-tree 命令将文件放入暂存区。但是我收到错误消息“错误:无效路径“file1.txt””。这个特定的树包含两个 blob 对象。
$ find .git/objects -type f
.git/objects/13/30b1315f618bbb92980a72304d102077a06456
.git/objects/37/0d3a4362e43ff0b8b8b44dc571a4943c2ae849
.git/objects/55/7db03de997c86a4a028e1ebd3a1ceb225be238
.git/objects/9d/85f911b64dff32d66d462086e8b13207efa4c5
.git/objects/dd/1d744af6af14449fbc727490e2b90439b27ad6
.git/objects/fe/65c715aff73bceac655b9032a26658404cdcfe
$ git cat-file -t 1330
tree
$ git read-tree 1330
error: invalid path 'file1.txt
100644 blob 9d85f911b64dff32d66d462086e8b13207efa4c5 file2.txt
'
我在桌面上创建了一个文本文件,然后使用命令 (cd nano temp-tree.txt) 我编辑了文件的内容 (100644 blob file1.txt),同样我只在该文件中编写了第二个 blob 对象。之后我进入我的 git repo 并输入命令(cat ../temp-tree.txt | git mktree -z)。然后创建了文件,我可以在隐藏文件夹中看到它。此外,所有 cat 命令都在处理这个问题。
此外,当我创建新的 git repo 、 blob object 、 tree 对象并尝试再次使用 git-read tree 命令时,没有输出。请帮忙。谢谢
解决方案
检查该树对象的内容:
git cat-file -p 1330
检查什么
git fsck
和 gitfsck --unreachable
说
从错误消息中:看起来 git 将两个单引号之间的所有内容(例如:从 3 个空行开始file1.txt...
和以 3 个空行结束的五行)解释为单个路径。
我的猜测是该树对象的原始内容中有一些可疑之处。
使用该-z
选项,mktree
期望\0
字符(而不是\n
)来分隔输入中的值。它旨在与输出字符的命令结合使用\0
,例如git ls-files -z
.
由于您手动编辑了输入,因此您没有\0
在文件中插入字符,因此mktree
将第一个哈希之后的所有内容作为单个“路径”(显然,没有对其进行检查以确认它看起来像有效路径)。
如果您真的打算使用git mktree
手动输入:删除-z
, 并阅读错误消息以尝试了解不适合的内容。
(我猜:从你的文件中删除空行,如果你的操作系统是 Windows,把你的行结尾变成“linux 风格”)
除非您试图明确了解如何使用git mktree
,否则最好使用常规创建树:
git add file1.txt file2.txt
# will create a tree and a commit :
git commit
# to get the hash of the tree :
git rev-parse HEAD^{tree}
# or
git cat-file -p HEAD # look for the 'tree <sha1>' line
或者可能:
git add file1.txt file2.txt
# will create only a tree, from the index :
git write-tree
请参阅git help write-tree
和git help mktree
以获得一些指示,以及git book以获得有关对象如何存储在 git 中的良好指导。
推荐阅读
- python - worker 中的 Python 版本不同:环境变量设置正确
- angularjs - 如何在 AngularJs 中使用 data-ng-start 和 end 条件绑定表值
- vaadin - Vaadin addComponentColumn 仅适用于最后一行
- mysql - 如何将这些行与逗号一起作为我的选择中的一列?
- database - Mongos shell 不显示在分片上创建的集合
- unix - 我的 vim 不断显示有关 diff 和 gzip 的错误
- ios - 错误:嵌入式二进制文件未使用与父应用程序相同的证书进行签名。Xcode
- c# - 如何将我的 .cs 类与我的 .aspx 类连接起来?
- android - 渐变颜色可绘制在 Android 10 上无法正常工作(旋转 90 度)
- regex - 正则表达式:只接受整数和空字符串,但不接受其他符号,如 (+ , -, . 等)