运行git存档时忽略.gitignore

运行git存档时忽略.gitignore,git,Git,我有一个git repo,其中包含一堆源代码,编译后会生成一堆二进制文件。二进制文件都列在相应的.gitignore文件中,不包括在repo中 但是,我想发布一个repo的source+binaries快照zipfile,其中包含所有二进制文件,但不包括.git/目录之类的内容 创建快照zipfile的自然方法似乎是 git archive -o archive.zip 但这不包括.gitignore中的任何二进制文件 关于如何使用git archive实现这一点的想法?(我的解决办法是手动

我有一个git repo,其中包含一堆源代码,编译后会生成一堆二进制文件。二进制文件都列在相应的.gitignore文件中,不包括在repo中

但是,我想发布一个repo的source+binaries快照zipfile,其中包含所有二进制文件,但不包括.git/目录之类的内容

创建快照zipfile的自然方法似乎是

git archive -o archive.zip 
但这不包括.gitignore中的任何二进制文件


关于如何使用git archive实现这一点的想法?(我的解决办法是手动创建一个包含除.git/目录以外的所有内容的zip存档)

我认为您无法使用“git存档”实现您希望实现的目标。”git archive在提交时起作用,您的二进制文件根本不可见。注意“git archive”是以提交为中心的,因此您可以在没有明确存在源代码受控文件的裸存储库中直接使用git archive。

因为,这不是git archive可以完成的任务

为正确的任务使用正确的工具。我也做了类似的事情,并且有一个Perl脚本来创建包含源代码和编译内容的归档文件

简单地压缩编译期间创建的所有内容可能不是您想要的:

  • 如果您想将库交给某人,他只会对库和一些标题感兴趣,以便能够使用库。例如,不需要归档对象文件和其他中间文件

  • 如果您希望您的读者能够自己构建库,请包括源代码、所需的项目文件以及预构建的二进制文件

因此,根据我的经验,我建议您选择脚本语言,并使用该语言提供的机制来创建发行版。这样,您还可以在发行版中创建不同的文件夹结构,而不必与磁盘上的结构相匹配

要注意从中创建归档的git版本,可以将该版本存储在zip文件注释中:


您可以使用.gittributes文件从
git归档文件中排除文件和/或目录

  • 在项目根目录中创建名为.gittributes的文件(如果不存在)
  • 编辑文件:每个排除应具有一个文件模式,后跟“导出忽略”

  • 确保忽略.gittributes文件本身

  • 请确保提交.gittributes文件,否则
    git archive
    将无法获取设置
  • 然后可以随意使用您的
    git archive-o archive.zip命令或变体


    如果从版本控制中忽略文件(通过
    .gitignore
    ),则无法将其包含在git存档中

    在我的变通方法中,我会在之后附加所需的文件

    git archive --format=tar -o repo.tar HEAD
    tar --append --file=repo.tar thirdparty/binary
    gzip repo.tar
    

    请注意,附加到
    tar.gz
    并不容易,因此我首先创建一个未压缩的归档文件,然后添加二进制文件,然后进行压缩

    你是如何使用git archive保存评论的?@alexis:你不能。显示的存档文件是使用Perl脚本创建的。@akeshet不是询问如何忽略文件,而是询问如何忽略
    .gitignore
    。换句话说,如何包含在版本控制中被忽略的文件。
    git archive --format=tar -o repo.tar HEAD
    tar --append --file=repo.tar thirdparty/binary
    gzip repo.tar