git 导出变动文件,包括目录结构

仅导出修改的文件

git 下执行以下命令:

git diff --name-only | xargs zip diff-changes.zip

也可以使用 tar -cvf

如果比较两个提交点,可以这样:

git diff --name-only 51828d5e34534dfgsfgsdfgsdfgea72bbb0bd3d7 ceeacb036db34534dfgsdgsfdgsdfcc0290a76aa | xargs zip diff_343443.zip

如果直接导入到某个文件夹,可以这样:

git diff --name-only | xargs zip /tmp/tmp.zip
unzip -o /tmp/tmp.zip -d  /path/target
rm -f /tmp/tmp.zip

unzip -o 当目标文件已存在则覆盖,-n 则不覆盖

也可以导入前先清空目标文件,比如:

git diff --name-only | xargs zip /tmp/tmp.zip
rm -rf /path/target/*
unzip -o /tmp/tmp.zip -d /path/target
rm -f /tmp/tmp.zip

导出修改、新增和重名的文件

注意:以上命令只适用于修改的文件,如果是新增的和重命名的就不行了,修改,新增和重名可以用下面的命令(推荐):

git status --porcelain | awk '{if ($1 == "M" || $1 == "A" || $1 == "??") print $2}' | xargs zip diff-changes.zip

仅导出删除的文件

如果仅导出删除的文件,可以使用以下命令:

git status --porcelain | awk '{if ($1 == "D") print $2}' | xargs zip diff-changes.zip