【问题标题】:Exporting / Archiving changed files only in Git仅在 Git 中导出/存档更改的文件
【发布时间】:2010-12-13 06:39:31
【问题描述】:

是否有一种简单的方法可以仅导出/存档 git 中给定提交或一系列提交中更改的文件?我似乎找不到执行此操作的明确说明(而且我是 Linux/Git 新手)。

我正在使用 msysgit,在大多数情况下,我可以很好地部署整个存储库,但在许多情况下,一次部署几个文件的小修复会更有效。

在远程服务器上推送/拉取/安装 git 并不是一个真正的选择,因为我的访问级别因项目和客户而异。

有没有直接的方法(粗略猜测):

pipe 'diff --names-only' to 'git-archive'? 

【问题讨论】:

    标签: git export archive msysgit


    【解决方案1】:

    我认为没有必要涉及 git-archive。使用--name-only,您可以压缩文件:

    tar czf new-files.tar.gz `git diff --name-only [diff options]`
    

    由于您是 Linux 新手,这可能需要一些解释:

    命令行中的反引号导致shell首先执行反引号内的命令,然后将该命令的输出替换为tar的命令行。所以首先运行git diff,它会生成一个文件名列表,每行一个。换行符折叠为空格,整个文件列表放在tar 命令行上。然后运行tar 以创建给定的存档。请注意,这会生成很长的命令行,因此如果您有大量已更改的文件,您可能需要使用不同的技术。

    【讨论】:

    • 只是为了后代的缘故,不同的技术将类似于:git diff --name-only [diff options] | xargs tar -czf files.tar.gz
    • 使用xargs,您会遇到不同的问题,因为如果文件太多而无法将它们全部放在一个命令行上,xargs 将多次运行tar。这将导致tar 创建一个新的 .tar 文件来覆盖前一个文件,因此它将只包含最后一批的文件。
    • Greg,可以通过使用 -rvf 而不是 -cvf 作为 tar 的参数轻松修复。
    • 对,这就是为什么我把压缩留在那里。我不知道为什么,但是在去皮/去皮时添加v 在我的肌肉记忆中根深蒂固。
    • 我相信 --name-only 也会为您提供已删除的文件。压缩或清空 zip 中的文件时可能会导致错误。选项 --name-status 将与 --name-only 执行相同的操作,只是在前面添加 M、D 或 A。使用这个想法进行一些更聪明的解析可能是最佳的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 2011-05-31
    • 2014-07-11
    • 1970-01-01
    相关资源
    最近更新 更多