2010-05-04 259 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