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

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

有什么选择吗?

Mr Question asked 2020-01-23T07:21:21Z
6个解决方案
82 votes

假设您还没有提交,并且想打包当前已进行本地修改的所有文件,则可以使用git stash来获取已修改文件的列表。如果您希望最后一次提交更改的文件,您可以 可以使用git diff --name-only HEAD^。从那里到哪里都取决于您。 例子:

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

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

如果文件名中有空格,则将不得不麻烦一点。

(当然,根据您实际要执行的操作,您可能正在寻找git stash,该信息会隐藏所有修改的文件并留下干净的工作树,或者您可能只是想创建一个临时分支来提交 )

Cascabel answered 2020-01-23T07:21:59Z
61 votes

要完全按照您的要求进行操作(假设您已经提交并想要创建上次提交更改的文件的存档),可以执行以下操作:

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

但是也许您实际上想使用以下方法创建补丁:

git diff HEAD^ HEAD > a.patch

并使用以下命令在需要的地方应用此补丁:

patch -p1 < a.patch

当然,仅当目标目录已包含存储库的旧版本时,才应用补丁。

Sven Marnach answered 2020-01-23T07:22:36Z
15 votes

如果您使用TortoiseGIt,它也提供此功能。
在资源管理器中选择文件夹
右键单击,选择菜单,TortoiseGit->显示日志。

选择工作目录和最后提交的版本。
右键点击。 比较修订。 选择要保存/导出的文件。
右键点击。 导出到文件夹。 做完了

Aftershock answered 2020-01-23T07:23:19Z
2 votes

在git仓库中压缩修改过的和新创建的文件

zip mychanges.zip $({ (git ls-files --others --exclude-standard) ; (git ls-files --modified)})
Saifullah khan answered 2020-01-23T07:23:39Z
0 votes
mkdir -p /c/temp/blah && cp $(git diff <your commit hash> --name-only) /c/temp/blah

我在Windows上使用Git Bash。

user3448451 answered 2020-01-23T07:23:58Z
0 votes

这是一个脚本,它可以使此过程更加轻松,它将所有更改的文件复制到使用的已定义目录中,并维护代码库的目录结构。

跑: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

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

ChauhanTs answered 2020-01-23T07:25:28Z
translate from https://stackoverflow.com:/questions/4126300/git-how-to-get-all-the-files-changed-and-new-files-in-a-folder-or-zip