没有第一次/初始提交的Git归档

没有第一次/初始提交的Git归档,git,git-archive,Git,Git Archive,自选择提交后,如何从git存储库进行tar归档 这个问题类似于,但我需要.tar存档,而不是git补丁文件 说明: 我为一个奇怪的PHP CMS制作“模块”,在这里没有编写扩展的真正机制。要发布我的模块,我必须只将修改过的文件发送给客户端,而我仍然必须将所有CMS文件放在Git下(所有CMS文件仅在第一次提交时添加)。因此,此存档的收件人没有repo,但有一些提交的内容,而您正在发送替代文件,他可以将其卸载到该文件上吗 似乎git archive在windows上的--output选项在告知压缩

自选择提交后,如何从git存储库进行tar归档

这个问题类似于,但我需要.tar存档,而不是git补丁文件

说明:
我为一个奇怪的PHP CMS制作“模块”,在这里没有编写扩展的真正机制。要发布我的模块,我必须只将修改过的文件发送给客户端,而我仍然必须将所有CMS文件放在Git下(所有CMS文件仅在第一次提交时添加)。

因此,此存档的收件人没有repo,但有一些提交的内容,而您正在发送替代文件,他可以将其卸载到该文件上吗

似乎git archive在windows上的
--output
选项在告知压缩器重定向时失败,压缩器及时拒绝将压缩输出写入它认为是终端的内容,但这很容易解决:

git archive -o update-old-new.tgz newcommit \
         $(git diff --name-only --diff-filter=AM oldcommit..newcommit) | cat
最后的
| cat
是解决方法

我忘记了
归档
,但使用它意味着你不必先签出$newcommit,因此这比以前的
签出要好得多;diff | tar
组合

但是,这仍然不能处理足够大的更新,以破坏命令行限制,或路径名中的空格或其他恼人字符。退路是

git checkout newversion
git diff --name-only --diff-filter=AM oldversion.. \
| tar Tczf - update-old-new.tgz

在文件夹的顶层运行此操作:

tar cvfz files-changed.tgz  `git diff <newrev> <oldrev> --stat --name-only `

这没有道理。你想归档什么?如果您只想以tar格式获取工作目录的当前状态,那么只需使用它即可。如果您想在特定提交后获得一个更改补丁,您只需执行一个diff,将其输出到一个文件,然后对该文件进行tar升级。你想做什么?我想让tar存档只包含第一次提交后更改的文件。这还不清楚。所以你不想要不同的补丁,对吗?你只是想要整个文件本身?如果文件没有更改,您不介意不将其包含在tar归档文件中吗?我想要类似这样的东西:
tar-cvf myarch.tar$(git diff——仅命名SHA_OF_COMMIT)
我希望
git archive sth..
将更容易做到这一点。
git archive
用于提取单个提交的内容。如果你想复制一系列的提交/分支等,
git bundle
就是你想要的。是的,你做对了,这是我的问题。收件人没有GIT,他们希望只接收更改过的文件。如果他不在提交客户端尝试更新到的文件上,这将存档错误的文件版本。在这种情况下,“客户端正在尝试升级”版本将是“newrev”。。。。打包的文件将是当前签出的任何版本,而不是newrev的版本。
tar cvfz files-changed.tgz  `git diff HEAD HEAD~3 --stat --name-only `