我想保存/导出两个选定提交之间不同的文件。以下命令显示修改后的文件...
$ git diff-tree --no-commit-id --name-only -r bd61ad98
index.html
javascript/application.js
javascript/ie6.js
但有一种方法可以导出它们,保留文件结构? 我只需要在Web服务器中保存修改后的文件,而不是上传整个项目。
答案 0 :(得分:1)
请参阅git archive。
git diff-tree --no-commit-id --name-only -r $commit \
| xargs git archive -o changedfiles.tgz --
应该这样做。
答案 1 :(得分:1)
这只是一个小shell脚本的种子(将其保存在文件中并使文件可执行)。它不是一个完整的脚本。您需要检查命令行中是否提供了$1
,否则将中止错误消息(否则脚本的其余部分将失败,并显示误导性错误消息)。无论它位于何处以及从何处调用它都需要工作(现在只有当前目录是项目目录时才能工作)。它需要以某种方式处理已删除的文件(它们是由git diff-tree
命令返回的吗?)
#!/bin/bash
commit=$1 # get the commit hash from the command line (the first argument)
dest='/tmp' # path to your destination directory (change it to match your setup)
# Cleanup on the destination directory
rm -rf $dest
mkdir $dest
# Copy the modified files
for i in $(git diff-tree --no-commit-id --name-only -r $commit); do
cp --parents $i $dest/
done
答案 2 :(得分:1)
使用
git diff-tree --no-commit-id --name-only -r bd61ad98 | git archive --format zip --output "proj-diff.zip" master -0
-0 arg用于未压缩的存档;我没有测试过,但这应该工作