【问题标题】:How to export all changed/added files from Git?如何从 Git 导出所有更改/添加的文件?
【发布时间】:2011-03-01 04:03:49
【问题描述】:

我对 Git 很陌生,遇到了一个小问题。

在 SVN 中 [这感觉就像阿尔伯特叔叔的《愚人与马》的故事......“在战争期间......”] 当我想用我的最新更改更新生产站点时,我'd 在 TSVN 中做一个差异并导出两个修订版之间所有更改/添加的文件。可以想象,之后很容易将这些文件发送到生产站点。

但是,我似乎无法在 Git 中找到“导出更改的文件”选项。我可以做一个差异并查看更改,我可以得到一个文件的列表,但我实际上无法导出它们。有没有合理的方法来做到这一点?我错过了一些简单的东西吗?

再次澄清一下,我需要导出所有两个特定提交之间的更改。

提前致谢!

【问题讨论】:

    标签: git version-control msysgit tortoisegit


    【解决方案1】:

    您想如何导出它们?你说你已经有了一个清单;你还想要什么?假设您通过git diff --name-only ... 获取您的列表

    git archive --output=<file> HEAD $(git diff --name-only ...)
    
    tar -czf <file> $(git diff --name-only ...)
    
    cp $(git diff --name-only ...) <export-directory>
    

    类似的东西?

    或者您甚至可以使用 diff 本身 - 它可以与 git apply 一起应用(或者甚至 patch,我相信)。

    【讨论】:

    • 第一个选项对我有用!理想情况下,我会使用 cp 变体但保留文件夹结构(我猜这是 git diff 的参数问题?)我不敢相信它这么简单..谢谢!
    • 刚刚看到您的编辑。不幸的是,我不能使用git applypatch,我只能通过 FTP 访问该站点:-/
    • @dr Hannibal Lecter:是的,我认为您需要传递实际文件。是的,命令替换($(...))是使 Linux shell 中的一切成为可能(且简单)的关键因素之一。
    • 可悲的是,我目前有 50% 被困在 Windows 上,但 git bash 和 cygwin 往往让我的生活更轻松.. 尽管我经常不知道自己在做什么 :) 再次感谢有用的信息!
    • 要在此处使用第三个选项,您可能需要将--parents 参数添加到 CP,以便它保留目标中的文件路径
    【解决方案2】:

    借用here 中的几个答案,这是导出工作区中修改的文件的另一种方法:

    git diff --diff-filter=ACMRT --name-only HEAD | xargs tar -rf export.tar
    

    如果您需要将它们包含在 diff 中,您可能需要事先执行以下操作来添加未跟踪的文件:

    git add *
    

    [这适用于 Windows 的 git-bash]

    【讨论】:

    • 在 windows slave 机器上执行此命令时,我收到以下错误“'xargs' 未被识别为内部或外部命令、可运行程序或批处理文件。”
    • 这假设您在 git-bash 环境中运行它(不同于常规命令行),它可以访问额外的 unix 工具
    猜你喜欢
    • 1970-01-01
    • 2016-05-03
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 2014-04-06
    • 2013-02-22
    相关资源
    最近更新 更多