首页 > 解决方案 > 如何 git 将 sha 中的所有文件提取到`/tmp`?

问题描述

在寻找将特定提交(由其指定sha)导出到目录的方法时,我得到了很多指针,每个指针都有很多答案。

可能是因为此类问题 指定,因此可能 多个答案。

这是我不想做的事情:

实际上,简单地运行git show a1b2c3c:path/to/file/myfile.c(从特定提交中提取特定文件)已经做了我想要的,除了:

那么我的问题是:如何提取 a shato中的所有文件/tmp

为了提供动力,让我提一下这个问题的一些用例。这些是我的问题;他们不是问题!

标签: git

解决方案


正如Joachim所建议的,这个答案几乎可以解决问题。

要添加另一个用例,您可能会扪心自问: 我是专门针对这种情况进行测试的;这个测试是如何在那个提交时通过的!?.

在这种情况下,运行起来很方便:

mkdir /tmp/new_dir
git archive a1b2c3 | tar -x -C /tmp/new_dir

并在完全隔离的情况下运行测试。

与几乎可以做到的答案相比,需要注意几点:

  • 如果您对 bzip/gzip/zip 存档不感兴趣,但(尽管有archivein git archive)更想要一个直接的目录副本 in /tmp,则需要先创建用于提取的根目录。
  • 如果您想知道究竟是什么<tree-ish>意思,您确实可以指定 a shato git archive。换句话说,asha是 < tree-ish >。
  • tar通常对 trailing 很挑剔/,根据它是否存在产生不同的结果。幸运的是,在这种情况下,是否存在尾部斜杠没有区别。

为了完整起见,-xmaketar提取,而不是存档,并且-C是指定目录所必需的前缀。


推荐阅读