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

时间:2010-11-08 17:26:20

标签: git

正如我的问题所说,在更改文件并在我的存储库中添加新文件后,我通常会使用 git 提交文件,但有时我需要将所有已修改/更改的文件复制到文件夹以进行组织 - 我自己的理由。

任何选项?

9 个答案:

答案 0 :(得分:76)

假设您的意思是尚未提交,并希望打包当前具有本地修改的所有文件,则可以使用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,它会隐藏所有修改过的文件并为你留下干净的工作树,或者你可能只是想要使临时分支承诺。)

答案 1 :(得分:55)

要完全按照您的要求(假设您已经提交并想要创建上次提交更改的文件的存档),您可以这样做:

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

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

答案 2 :(得分:15)

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

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

答案 3 :(得分:1)

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

zip mychanges.zip $({ (git ls-files --others --exclude-standard) ; (git ls-files --modified)})

答案 4 :(得分:0)

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

我在Windows上使用Git Bash。

答案 5 :(得分:0)

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

运行: 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

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

答案 6 :(得分:0)

假设您没有删除或重命名文件,这应该可以解决问题

复制:

cp --parents $(git status -s | egrep "M|A|AM" | rev | cut -d" " -f1 | rev) destination_folder

邮政编码:

zip modified.zip $(git status -s | egrep "M|A|AM" | rev | cut -d" " -f1 | rev)

答案 7 :(得分:0)

如果您有 TortoiseGit,即使在提交之前,您也可以将所有更改的文件导出到文件夹(其中包含正确目录结构下的文件)。只需执行以下步骤。

  1. 右键单击要查看更改的文件夹
  2. 选择承诺
  3. 一旦文件在框中可见,请选择所有文件
  4. 右键单击 -> 将选择导出到...
  5. 选择要放置这些文件的文件夹。
  6. 完成。

答案 8 :(得分:0)

有同样的要求。 从第一个答案中获得输入并为自己创建了一个工具(仅限 Windows)。 它将所有添加/修改的文件复制到备份文件夹中。

Tool Overview

Git-Uncommited-Files-Backup-Tool-Windows

写这个只是为了好玩。只是张贴柜面它会帮助某人。 (非常欢迎修改)。

此外,您可以使用任务计划程序来安排备份。