运行git archive时忽略.gitignore

时间:2012-04-10 23:01:28

标签: git

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

但是,我想分发一个包含所有二进制文件的repo的source + binaries snapshot zipfile,但不包括.git /目录。

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

git archive -o archive.zip 

但是这不包括.gitignore中的任何二进制文件。

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

4 个答案:

答案 0 :(得分:4)

我认为您无法使用'git archive'来实现您希望实现的目标。 'git archive'适用于提交,而您的二进制文件根本不可见。注意'git archive'是如此以提交为中心,您可以直接在裸存储库中使用git archive,其中没有明确存在源控制文件。

答案 1 :(得分:0)

作为GoZoner states,这不是可以使用git archive完成的任务。

使用正确的工具完成正确的任务。我也做了一些非常相似的事情,并且有一个Perl脚本可以创建包含源代码和编译内容的存档。

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

  • 如果您想将图书馆交给某人,他只会对图书馆和一些标题感兴趣,以便能够使用图书馆。例如,无需归档目标文件和其他中间内容。

  • 如果您希望您的受众能够自己构建库,请包含源,所需的项目文件以及预先构建的二进制文件。

  • ...

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

要注意创建存档的git修订版,您可以将修订版存储在zip文件注释中:

screenshot

答案 2 :(得分:0)

您可以使用 .gitattributes 文件从git archive中排除文件和/或目录。

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

    .gitattributes export-ignore
    .gitignore export-ignore
    /mytemp export-ignore
    
  3. 请确保忽略.gitattributes文件本身!

  4. 确保提交.gitattributes文件,否则git archive将不会接受设置。

然后随时使用您的git archive -o archive.zip命令或变体。

Source here

答案 3 :(得分:0)

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

在解决方法中,我随后添加了所需的文件。

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

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