2010-05-04 141 views

回答

21

我知道这是旧的,但我想我找到了解决方案。

运行:

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

由于混帐想要一个坚实的承诺,使档案,我们可以做一个“一次性”使用承诺git stashcreate命令只是创建隐藏提交(不会重置您的工作目录或将其推送到隐藏堆栈)并返回它的散列。

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

+0

伟大的作品,谢谢! – 2012-08-19 07:05:52

2

如果您还没有提交更改,那么git archive不会对您有所帮助。如果你只想要你的工作区快照,tar可能是你最好的选择。

11

提高nevsan的回答我的目的 - 在任何情况下(提交与否)存档最新代码:

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

修复了一个错误:git stash create [now]总是返回成功,并且当没有要存储的文件时不打印任何内容。使用bash $ {var:-default}语法,而不是依赖退出代码。 – 2014-10-20 15:02:37

+0

IIRC这是一个问题,它不会从存档中取出git-removed文件。 – 2016-08-29 05:57:47

3

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

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

这在我看来是最好的答案。但是,我建议使用ls-files的-z选项和xargs的-0(零)选项,以便正确处理带空格的文件名: git ls-files -z | xargs -0 tar -czvf archive.tar.gz 。 – S2108887 2018-02-25 18:56:19

+0

你是对的!谢谢。我已经将这些选项添加到命令行中。 – 2018-03-05 13:27:19

+0

'git ls-files | tar Tczf - archive.tar.gz'没有对单个命令的参数大小进行系统限制。 xargs对于任何你只需运行一次的命令来说都是不好的。 – jthill 2018-03-05 16:19:38