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。