正如我的问题所说,在更改文件并在我的存储库中添加新文件后,我通常会使用 git 提交文件,但有时我需要将所有已修改/更改的文件复制到文件夹以进行组织 - 我自己的理由。
任何选项?
答案 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,即使在提交之前,您也可以将所有更改的文件导出到文件夹(其中包含正确目录结构下的文件)。只需执行以下步骤。
答案 8 :(得分:0)
有同样的要求。 从第一个答案中获得输入并为自己创建了一个工具(仅限 Windows)。 它将所有添加/修改的文件复制到备份文件夹中。
Git-Uncommited-Files-Backup-Tool-Windows
写这个只是为了好玩。只是张贴柜面它会帮助某人。 (非常欢迎修改)。
此外,您可以使用任务计划程序来安排备份。