我正在Windows 10上使用GIT Bash学习GIT,我正在学习创建一个GIT树对象。所以,我所做的是用下面的哈希值创建两个blob:
4400aae52a27341314f423095846b1f215a7cf08
b7aec520dec0a7516c18eb4c68b64ae1eb9b5a5e
两个blob都有权限100644。现在我在桌面上创建了一个文件temp-tree.txt,并添加了以下blob,其各自的参数为:
100644 blob b7aec520dec0a7516c18eb4c68b64ae1eb9b5a5e file1.txt
100644 blob 4400aae52a27341314f423095846b1f215a7cf08 file2.txt
将其保存为temp-tree.txt。现在,在GIT Bash终端的主文件夹中,我给出了以下命令:
cat ../temp-tree.txt | git mktree
其表现为:
fatal: input format error: 100644 blob b7aec520dec0a7516c18eb4c68b64ae1eb9b5a5e file1.txt
请建议我如何更正它。我使用了Udemy的Bodgan的完整Git和GitHub指南课程。如果你想要的话,我可以给予你那部分的截图。但是,我现在不添加它,因为它可能对一些渲染不起作用。谢谢你的时间和努力。
更新1:我尝试使用TAB,但是,它给出了以下输出:
cat ../temp-tree.txt
100644 blob b7aec520dec0a7516c18eb4c68b64ae1eb9b5a5e file1.txt
100644 blob 4400aae52a27341314f423095846b1f215a7cf08 file2.txt
cat ../temp-tree.txt | git mktree
fatal: input format error: (blank line only valid in batch mode)
6条答案
按热度按时间q9rjltbz1#
tl;dr:在哈希和文件名之间使用制表符,并确保文件具有Unix风格(
\n
)的行尾。git mktree
的手册页指出:以非递归ls-tree输出格式读取标准输入
并且
git ls-tree
的手册页指出这种格式是:<mode> SP <type> SP <object> TAB <file>
您的文件看起来像是在
<object>
和<file>
之间有一个SP
(空格),而不是TAB
。你还说你“创建了这个文件”,但没有提供更多的细节。如果你是用-比如说- Notepad创建的,那么这个文件几乎肯定有DOS风格的(
\r\n
)行尾。您需要使用
dos2unix
(包含在Git for Windows中)或文本编辑器(在vim中,您可以使用:set ff=unix
,然后保存文件并使用:wq
退出)将此文件转换为Unix风格的行尾。ubby3x7f2#
我通过键入以下内容创建了一个树:目录号.../临时树. txt|git mktree -z.成功了!我意识到输出是一个2个数字的“文件”,而不是一个字符和一个数字,反之亦然。
Blob的标准方法是:6 b,c7,我想没有。
使用-z标志后,树对象将以数字开始:五十六或四十二。
树肯定在那里。但是,当你输入git read-tree + hash,比如56 a7时,它会抛出一个错误。我想我向前移动了一步。棘手的部分仍然在暂存区?
希望我的回答能继续下去!
7kjnsjlb3#
删除内容顶部的空格。输入信息的顶部和底部不应有空格。
um6iljoc4#
我也面临着同样的问题,我所做的是在工作目录中创建两个名为
file1.txt
和file2.txt
的文件,提交到暂存区,然后git使用这些文件为我创建树对象。哈希生成后,我删除了工作目录中的文件,并使用
git read-tree
将文件从git仓库移动到暂存区,使用命令git checkout-index -a
将文件从暂存区移动到工作目录。我之所以选择这个解决方案,是因为我们需要在git repo中创建树对象,并将文件从git repo移动到暂存目录和工作目录,如果我们在创建树对象时遇到了问题,那么就允许git为我们创建对象,并应用我们在git上学到的东西。
希望我的回答回答了你的问题
lmvvr0a85#
当使用我的vs代码编辑器编辑文件时,遇到了同样的问题:
在观察命令输出时
,tab被4个空格替换,这导致了使用记事本或记事本++编辑文件时出现的问题,tab被替换为\t,并且可以正常工作。
axkjgtzd6#
像这样试一下,它起作用了。
第一步:
第二步:
步骤三: