从指定的提交到今天,Git 将文件导出为 zip/tar

标签 git bash

所以我想导出从特定提交 ID 开始到今天的所有文件(可能包括后续提交),所以我这样做:

git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT $commitId | xargs tar -rf 输出.tar

但是,似乎此输出文件仅在指定的提交 ID ($commitId) 中被修改。

虽然我正在寻找的是它应该导出从指定提交 ID 开始到今天的所有文件(包括在此期间可能发生的任何进一步提交)。

最佳答案

git diff -z --name-only --diff-filter ACMRT ${commitId}~ HEAD | xargs -0 tar -rf output.tar
  1. git diff足够了;您不需要使用 git diff-tree 来查找提交范围内已更改文件名的列表。
  2. git diff 中的 -z 选项和 xargs 中的 -0 确保使用 NUL 输出字段终止符,否则任何带空格的路径/文件名都会导致您的命令中断。
  3. ${commitId}~ HEAD 列出 ${commitId} 的父提交之间的更改(因此包括该提交中的更改)和最近的提交(HEAD)。

关于从指定的提交到今天,Git 将文件导出为 zip/tar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41482984/

相关文章:

linux - 如何一起使用 git log 和 grep?

具有多个祖先和kdiff3的git递归策略

bash - 计数ssh查找结果

perl - 我如何在 bash 或 Perl 中比较一个数字和一个范围?

git - 如何删除以 ^{} 结尾的引用

python - GitPython pull 后工作副本中没有任何内容出现

git - 在Git中以交互方式进行基础调整时,什么是 “label”

bash - 如何将 bash 脚本的整个输出保存到文件

Bash中没有空格的字符串连接

bash - 简单的 Linux Bash 脚本