使用 git archive 命令是否可以从特定提交 ID 的存储库中仅下载已更改/受影响的文件?是否可以使用网络界面@bitbucket?
使用
git diff-tree
列出提交中更改的文件,并将它们传递到 git archive
的命令行。
git archive --format=zip --output=commit_files.zip <tree-ish> `git diff-tree --no-commit-id --name-only -r <tree-ish> | sed ':a;N;$!ba;s/\n/ /g'`
您可以创建专注于特定提交的存档文件,但它会存档整个存储库,而不仅仅是更改/受影响的文件。不过你也许可以通过日志找出这些。
示例:如果您想要 bitbucket 的最新更改,它将类似于:
git archive -format=tar --remote=<PATH_TO_YOUR_REPO> HEAD
使用 git diff 你可以轻松做到这一点,但是你需要 2 次提交才能获得它们之间的差异 f.ex 之间的 head 和 head - 1.
对于上次提交中更改的文件:
git archive --output=latest_artifact.zip HEAD $(git diff --name-only HEAD HEAD^1)
对于 2 个提交 ID 之间更改的文件:
git archive --output=latest_artifact.zip HEAD $(git diff --name-only <commit_id_1>..<commit_id_2>)