在Git中,tree ish是什么意思?

在Git中,tree ish是什么意思?,git,git-archive,Git,Git Archive,我对如何使用git archive感到非常困惑 我有一个git存储库,顶层有Foo、Bar和Baz文件夹。我需要以SVN-ish的方式导出文件夹Foo,以便快速部署测试 我了解到我可以在一个简单的环境中使用git归档 但事情是这样的,以下方法很好: git archive master | tar -x -C ~/destination 它会在目标文件夹中生成Foo、Bar、Baz文件夹 但是,如果不是有效的对象名称,则以下内容将出错: git archive master/foo | tar

我对如何使用git archive感到非常困惑

我有一个git存储库,顶层有Foo、Bar和Baz文件夹。我需要以SVN-ish的方式导出文件夹Foo,以便快速部署测试

我了解到我可以在一个简单的环境中使用
git归档

但事情是这样的,以下方法很好:

git archive master | tar -x -C ~/destination
它会在目标文件夹中生成Foo、Bar、Baz文件夹

但是,如果
不是有效的对象名称,则以下内容将出错

git archive master/foo | tar -x -C ~/destination
文件 查看
git archive
程序的概要,我发现它可以将
[path]
作为参数(概要总结到相关部分):

git存档[路径…]
如果
master/foo
不是
tree-ish
,那么什么是?您可能想要的

git archive master foo | tar -x -C ~/destination
表达式
master/foo
没有意义:
master
是一个分支名,
foo
是一个目录名,我猜是这样的


编辑:(已删除断开的链接。请参阅注释)。

树ish是一种命名特定树的方法,可以是以下之一:

  • 参考资料如:
    • 标签
    • 分支机构名称
    • 带有遥控器的分支名称,如
      origin/somebranch
  • 散列
  • 短散列
除此之外,上述任何一项都可以附加
^
~
。对于某些附加功能,参考还可以使用
@{}
符号:

  • HEAD^
    HEAD^1
    将解析为HEAD的第一个父级
  • 头^2
    将解析为第二个父级
  • HEAD^3
    将解析为第三个父级,以此类推,这是更为罕见的,也是
  • HEAD~
    HEAD~1
    将解析为HEAD的第一个父级
  • HEAD~2
    将解析为HEAD的第一个父级的第一个父级。这与
    HEAD^^
  • HEAD@{0}
    将解析为当前HEAD
  • HEAD@{1}
    将解析为前一个HEAD。这只能由引用使用,因为它使用引用日志。在
    HEAD
    的情况下,每次提交、合并、签出都会更改HEAD的值,从而将其添加到日志中
    git reflog HEAD
    将显示参考日志,您可以在其中看到HEAD的所有移动以及
    @{1}
    等将正确解析的内容
只要在您的存储库中有意义,以上大部分内容都可以进一步组合,例如:
HEAD@{2}~3
somebranch^2~4
c00e66e~4^2
另一个分支^ ^ ^

因此,上述任何一种,及其组合,在文档中都是指树ish,这只是说明哪些树(或修订版)应该用于大多数git命令的一种方式

有关
的定义,请参阅手册页。你必须搜索这些术语。一般来说,
表示对git树对象的引用,但如果您传递引用树的对象类型(如提交或分支),git将自动使用引用的树。

简短答案(TL;DR) “Tree-ish”是指最终指向(子)目录的任何标识符(如中所述) 树(Git将目录称为“树”和“树对象”)

在原始海报中,
foo
是他想要的目录 具体说明在Git中指定(子)目录的正确方法是使用 “树型”语法(第15项来自):

,例如
标题:自述文件
:自述文件
主文件:./README

后缀
后跟一个路径,将指定路径中的blob或树命名为 由冒号前面的部分命名的树对象

因此,换句话说,
master:foo
是正确的语法,而不是
master/foo

其他“树型”(加上提交型) 以下是提交ish和树ish标识符的完整列表(来自,):

指示树对象名称

<commit>
<tree-ish>

指示提交对象名称

<commit>
<tree-ish>

指示树、提交或标记对象名称。接受
参数最终希望对
对象进行操作,但会自动执行 取消引用
和指向
对象

<commit-ish>

指示提交或标记对象名称。接受
参数最终希望对
对象进行操作,但会自动执行 解除指向
对象的引用

<commit-ish>
不能用作提交ish的树ish标识符集是

  • ,它直接将引导到目录树,而不是提交 物体。例如,
    HEAD:subdirectory

  • Sha1目录树对象的标识符


  • 我是源代码管理和git的新手。这就是我所知道的。树是存储库中文件的结构。它类似于文件系统中的目录。请参阅-

    树的意思是像树一样。它引用树的一部分或提交。您可以使用以下任意一种引用提交:提交的SHA-1散列的全部或部分、头指针、分支引用、标记引用。另一种方法使用上述任何方法以及提交的祖先或父级。例如: 从树上看 “树对象或可递归解除对树对象引用的对象。” commit、HEAD和tag是树型对象的示例。

    master