【问题标题】:using git read-tree without a work tree使用没有工作树的 git read-tree
【发布时间】:2015-03-07 21:52:47
【问题描述】:

我正在尝试使用带有裸仓库的 git 管道命令创建提交历史记录。我可以使用包含 blob 的单个未命名树对象创建提交,但我无法弄清楚如何让这个未命名树对象包含其他树对象。

我尝试使用git read-tree --prefix=tree_name tree_sha 它告诉我:fatal: This operation must be run in a work tree

我尝试使用git mktree(就像在this page 上显示的那样) 像这样:cat ../info.txt | git mktree

info.txt 是一个包含 1 行的文件:

040000 tree aa8c07e1371022a183b011d5d41517ef54780a17    test_tree

它告诉我:

fatal: input format error: 040000 tree aa8c07e1371022a183b011d5d41517ef54780a17    tree_name

谁能告诉我一种创建和命名树的方法?

【问题讨论】:

    标签: git git-plumbing


    【解决方案1】:

    在哈希和 test_tree 之间需要四个空格而不是一个。如果它仍然不起作用,请尝试使用选项卡。

    040000 tree aa8c07e1371022a183b011d5d41517ef54780a17    test_tree
    

    【讨论】:

    • 我不确定我是否在此处粘贴错误,但我确实在 sha 和树名 (test_tree) 之间有 4 个空格。我仔细检查并再次尝试,我仍然得到同样的错误。
    • 我知道 Git 内部是如何工作的,但我不知道大多数 git 命令的作用。您可以尝试手动操作,但这并不容易。
    • 我很抱歉,当我在假设我最初在哈希和树名之间使用制表符之前测试这个时,所以我认为这不是问题,结果是。用一个固定的选项卡替换 aa8c07e1371022a183b011d5d41517ef54780a17 和 test_tree 之间的 4 个空格。
    【解决方案2】:

    我假设你的仓库中已经存在一个哈希树aa8c07e1371022a183b011d5d41517ef54780a17?如果没有,git mktree 将失败。另外,info.txt 中有尾随换行符吗?我对文档的阅读表明这也是必需的。

    我已经成功使用git mktree这样的:

    $ cat tree.txt
    040000 tree 4d5fcadc293a348e88f777dc0920f11e7d71441c    foo
    
    $ git mktree < tree.txt
    0a7f38a609340d0b8eede2f6debf8bad4191738f
    

    其中前两个空格是空格,第三个是制表符,尾随换行符。如果有疑问,运行git ls-tree 并检查其输出,可能使用xxd

    【讨论】:

    • 我终于让它工作了!事实证明,问题在于我在哈希和名称之间使用了 4 个空格而不是制表符(我需要向 ThePyroEagle 道歉,因为他已经提出了这个建议)。此外,如果文件中有一个尾随换行符,那么当我使用“git cat-file -p ”查看树时会出现一个奇怪的工件。如果我在文件上使用带有尾随换行符的 mktree,则树名称被列为:“test_tree\r”(带有引号和 /r),但如果没有尾随换行符,它看起来很正常:test_tree(没有引号或 /r )
    • 听起来你有一个 Windows 换行符 (\r\n) 而不是 Unix 换行符 (\n)。很高兴你能解决它,也许在接受答案的同时投赞成票?
    • 只要我有至少 15 个代表,我就打算投票赞成你和他的回答。还要再次感谢您,因为您关于它是 Windows 换行符的评论是正确的,并且您帮助我解决了另一个问题。
    • 好吧,如果那棵树存在,那么再次添加 it 绝对没有意义。如果它已经存在,那么内容很可能是完全相同的。
    • @ThePyroEagle,我问的那棵树是作为新树的子树放置的,而不是新树本身。
    猜你喜欢
    • 2015-08-26
    • 2016-02-24
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    相关资源
    最近更新 更多