使用未提交的更改来存储存储库的存档

时间:2010-05-04 15:21:42

标签: git

如何使用git archive创建当前存储库的存档,包括本地未提交的更改?

9 个答案:

答案 0 :(得分:27)

我知道这已经过时了,但我认为我找到了解决办法。

执行命令

stashName=`git stash create`;
git archive <options> $stashName

由于git想要一个可靠的提交来进行存档,我们可以使用git stash进行“一次性”提交。 create命令只创建存储提交(不重置工作目录或将其推送到存储堆栈)并返回其哈希值。

如果您担心悬空提交的空间,可以使用git gc --prune=now进行清理。否则,只需等待2周,它就会消失。

答案 1 :(得分:14)

根据我的目的改进nevsan的答案 - 在任何情况下(已提交或未提交)存档最新代码:

uploadStash=`git stash create`; git archive -o code_outgoing.zip ${uploadStash:-HEAD}

答案 2 :(得分:6)

git ls-files的另一种解决方案:

git ls-files -z | xargs -0 tar -czvf archive.tar.gz

答案 3 :(得分:2)

如果您尚未提交更改,则git archive将无法帮助您。如果您只想要工作区的快照,tar可能是您最好的选择。

答案 4 :(得分:1)

这将创建一个zip存档,其中包含除git忽略的所有工作树文件之外的所有工作树文件:

git ls-files --others --exclude-standard --cached  | zip --names-stdin archive.zip

答案 5 :(得分:1)

您不再需要使用git stash来创建一个人工提交,其中将包含您的跟踪更改,以便git archive可以继续使用。

在Git 2.29(2020年第四季度)中,“ git archiveman学习了“ --add-file”选项,将未跟踪的文件包括在快照中像树一样。

请参见commit df368facommit 2947a79commit 200589aRené Scharfe (rscharfe)(2020年9月19日)。
(由Junio C Hamano -- gitster --commit f6b06b4中合并,2020年10月5日)

archive:添加--add-file

签名人:RenéScharfe

允许用户附加非跟踪文件。
这简化了带有一些额外文件(例如,包含版本信息。
它们获得的访问时间和用户信息与跟踪文件相同。

git archive现在包含在其man page中:

--add-file=<file>

将非跟踪文件添加到存档中。
可以重复添加多个文件。
通过将--prefix(如果有的话)的值和<file>的基本名称串联在一起来构建归档文件中的路径。


我也喜欢Git 2.30 alternative to tar

答案 6 :(得分:0)

我正在使用此命令将指定版本导出到现在(包括未提交的更改文件)更改一行

git archive -o /path/to/save/temp.zip $(git stash create) $(git diff --name-only xxx_version_to_start)

答案 7 :(得分:0)

import re path = 'hh.txt' with open(path, "r") as f: oldlines = f.readlines() newlines = [] for line in oldlines: newlines.append(re.sub("hai", "welcome", line)) with open(path, "w") as f: f.writelines(newlines) 是首选,因为它不需要创建任何提交对象。

git ls-files

答案 8 :(得分:0)

基于@fhucho's answer的小型bash脚本:

#backup.sh
#remove final "/"
repo=${1%"/"} 
#create $repo-backup.zip
cd $repo
git ls-files --others --exclude-standard --cached  | zip --names-stdin ../$repo-backup.zip
cd ..
ls -l $repo-backup.zip

用法:

. backup.sh myrepo