小智 32
我知道这是旧的,但我想我找到了解决方案.
跑:
stashName=`git stash create`;
git archive <options> $stashName
Run Code Online (Sandbox Code Playgroud)
由于git想要一个可靠的提交来进行存档,我们可以使用"一次性"提交git stash.该create命令只是创建存储提交(不重置您的工作目录或将其推送到存储堆栈)并返回它的哈希值.
如果你担心悬空提交的空间,你可以用它来清理它git gc --prune=now.否则,只需等待2周,它就会消失.
lah*_*n_j 14
为了我的目的改进nevsan的答案 - 在任何情况下(已提交或未提交)存档最新代码:
uploadStash=`git stash create`; git archive -o code_outgoing.zip ${uploadStash:-HEAD}
Run Code Online (Sandbox Code Playgroud)
另一个解决方案git ls-files:
git ls-files -z | xargs -0 tar -czvf archive.tar.gz
Run Code Online (Sandbox Code Playgroud)
您不必再使用它git stash来创建一个人工提交,其中将包含您跟踪的更改以git archive进行操作。
在 Git 2.29(2020 年第 4 季度)中,“ git archive” ( man )学习了“ --add-file”选项,将未跟踪的文件包含到树形快照中。
请参阅Ren\xc3\xa9 Scharfe ( )的提交 df368fa、提交 2947a79、提交 200589a(2020 年 9 月 19 日)。\n (由Junio C Hamano 合并 -- --在提交 f6b06b4,2020 年 10 月 5 日)rscharfegitster
\n\n\n
archive: 添加--add-file签署人:Ren\xc3\xa9 Scharfe
\n
\n\n允许用户附加非跟踪文件。
\n
\n这简化了带有一些额外文件(例如包含版本信息)的源包的生成。
\n它们获得与跟踪文件相同的访问时间和用户信息。
git archive现在包含在其手册页中:
\n\n\n
--add-file=<file>将非跟踪文件添加到存档中。
\n
\n可以重复添加多个文件。
\n存档中文件的路径是通过连接 的值--prefix(如果有)和 的基本名称来构建的<file>。
我也喜欢Git 2.30 的 tar 替代品。
\n在 Git 2.37(2022 年第 3 季度)之前,“ git archive --add-file=<path>” (man)从路径中获取原始权限位,并在某些情况下传播到 zip 输出,而没有进行标准化,这已得到纠正(tar 输出没有此问题)。
请参阅Junio C Hamano ( )的提交 6a61661(2022 年 5 月 12 日)。\n (由Junio C Hamano 合并 -- --在提交 6cd6906中,2022 年 5 月 23 日)gitstergitster
\n\n\n
archive:不要让磁盘模式泄漏到 zip 存档中
\n\n当使用“
\n--add-file”选项将未跟踪文件中的内容添加到存档时,这些文件的权限模式位将按"write_entry()原样发送到存档后端特定的“方法。
\n我们将跟踪文件的模式位规范化在我们将它们传递给write_entry()方法之前;我们应该在这里做同样的事情。这对于“” archive-backend 来说并不是严格需要的
\ntar,因为它有自己的代码来进一步清理它们,但“zip” archive-backend 还没有准备好。