git - 如何 git 将 sha 中的所有文件提取到`/tmp`?
问题描述
在寻找将特定提交(由其指定sha
)导出到目录的方法时,我得到了很多指针,每个指针都有很多答案。
这是我不想做的事情:
- 我不想克隆我的多 GB 存储库然后结帐。我想从当前 repo 结帐到一个目录。
sha
我想提取的既不是 a也不tag
是 a标记branch
。其实,sha
我想要的还是朦胧的。有几个是候选人。
实际上,简单地运行git show a1b2c3c:path/to/file/myfile.c
(从特定提交中提取特定文件)已经做了我想要的,除了:
- 我想提取一棵完整的树(从根目录),而不仅仅是一个文件。
git show
将文件发送到终端。我想保存到/tmp
.
那么我的问题是:如何提取 a sha
to中的所有文件/tmp
?
为了提供动力,让我提一下这个问题的一些用例。这些是我的问题;他们不是问题!
- 我在过去(也许很遥远)做了一个即兴演示,我想确定这个项目的重点。
- 我忽略了将给定文件添加到 repo 中,有时需要很长时间才能注意到没有添加文件。我想跟踪文件丢失的时间。
解决方案
要添加另一个用例,您可能会扪心自问: 我是专门针对这种情况进行测试的;这个测试是如何在那个提交时通过的!?.
在这种情况下,运行起来很方便:
mkdir /tmp/new_dir
git archive a1b2c3 | tar -x -C /tmp/new_dir
并在完全隔离的情况下运行测试。
与几乎可以做到的答案相比,需要注意几点:
- 如果您对 bzip/gzip/zip 存档不感兴趣,但(尽管有
archive
ingit archive
)更想要一个直接的目录副本 in/tmp
,则需要先创建用于提取的根目录。 - 如果您想知道究竟是什么
<tree-ish>
意思,您确实可以指定 asha
togit archive
。换句话说,asha
是 < tree-ish >。 tar
通常对 trailing 很挑剔/
,根据它是否存在产生不同的结果。幸运的是,在这种情况下,是否存在尾部斜杠没有区别。
为了完整起见,-x
maketar
提取,而不是存档,并且-C
是指定目录所必需的前缀。
推荐阅读
- java - 使用 Instrumentation 的 Java 对象大小:运行代理 jar 时打开 zip 文件时出错或缺少 JAR 清单
- python - Flower 无法监控使用 Redis Sentinel 而不仅仅是 Redis 作为代理的 Celery 队列
- javascript - React-Native + Firebase:如何处理实时更新
- ios - 如何在 iOS 设备上运行 webXR(AR)?
- java - 分叉进程 org/apache/commons/io/FileUtils org.apache.maven.surefire.booter.SurefireBooterForkException 出现错误
- java - 尝试导入 spigot api 时,Eclipse 中出现“JavaPlugin 不可访问”错误?
- javascript - 为什么我们不能只使用 react 库中的“useState()”而不是 redux,使用 redux 有什么好处?
- python - 用成功/失败而不是或多或少找到未知数的二分法
- python - 设置网箱,AttributeError:模块“秘密”没有属性“选择”
- go - 为什么 p 不满足 c 的接口(第 106 行)?