如何使用git archive
创建当前存储库的存档,包括本地未提交的更改?
答案 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 archive
” (man)学习了“ --add-file
”选项,将未跟踪的文件包括在快照中像树一样。
请参见commit df368fa的commit 2947a79,commit 200589a,René 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>
的基本名称串联在一起来构建归档文件中的路径。
答案 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