Git:如何获取所有文件更改和文件夹或zip中的新文件?

正如我的问题所述,在更改文件并在存储库中添加新文件之后,我通常会使用git来提交文件,但是有时我需要将所有已修改/更改的文件复制到文件夹中,以便于自我组织。

任何选项?

假设你的意思是你还没有提交,并且想打包所有当前有本地修改的文件,你可以使用git ls-files --modified来获得修改后的文件列表。 如果你想要最后一次提交的文件,你可以使用git diff --name-only HEAD^ 。 你从哪里出发,取决于你。 例子:

 zip modified-files.zip $(git ls-files --modified) cp $(git ls-files --modified) ../modified-files 

请注意,这是使用当前工作树中的文件版本。

如果你有文件名的空间,你将不得不去更多的麻烦。

(当然,根据你真正想做的事情,你可能正在寻找git stash ,它git stash了所有修改过的文件,并为你留下一个干净的工作树,或者你可能只是想创build一个临时分支来提交至。)

要做到你所要求的(假设你已经提交了,并且想创build一个由最后一次提交改变的文件的存档),你可以这样做:

 git archive --format=zip HEAD `git diff HEAD^ HEAD --name-only` > a.zip 

如果您在提交中删除了文件,为了防止出现pathspec错误,请使用--diff-filter=d

 git archive --format=zip HEAD `git diff --diff-filter=d HEAD^ HEAD --name-only` > a.zip 

但是也许你真的想用下面的方法创build一个补丁:

 git diff HEAD^ HEAD > a.patch 

并在需要的地方使用此修补程序:

 patch -p1 < a.patch 

当然,只有当你的目标目录已经包含你的版本库的旧版时,才能使用补丁。

如果你使用TortoiseGIt,它也提供这个。
在资源pipe理器中select文件夹
右键单击,select菜单,TortoiseGit->显示日志。

select工作目录和最后一个合同版本。
右键点击。 比较修订。 select要保存/导出的文件。
右键点击。 导出到文件夹。 完成。

这里是一个脚本,可以使这个过程变得更容易,它会将所有更改后的文件复制到已定义的目录,并维护代码库的目录结构。

运行:sh scr.sh

================================================

 #!/bin/sh FILES=`git ls-files --modified` for x in $FILES do prev_dir=$PWD echo "MY Dir = $prev_dir" mkdir -p $1/$x cd $1/$x cd ../ rm -r * cp $prev_dir/$x ./. cd $prev_dir done 

================================================

 mkdir -p /c/temp/blah && cp $(git diff <your commit hash> --name-only) /c/temp/blah 

我在Windows上使用Git Bash。