当运行git archive时忽略.gitignore文件

8
我有一个Git仓库,其中包含大量源代码,当编译完成后会产生许多二进制文件。这些二进制文件都被列在适当的.gitignore文件中,并未包含在仓库中。
然而,我希望分发一个包含所有二进制文件的源代码+二进制文件快照zip文件,但不包括像.git/目录这样的内容。
创建一个快照zip文件的自然方法似乎是:
git archive -o archive.zip 

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

有什么关于如何使用git archive完成此操作的想法吗?(我的解决方法是手动创建一个zip存档文件,其中包含除.git/目录之外的所有内容)

4个回答

8
你可以通过使用.gitattributes文件从git archive中排除文件和/或目录。
  1. Create a file named .gitattributes in your project root (if it doesn't exist).
  2. Edit the file: Each exclusion should have a file pattern followed by "export-ignore":

    .gitattributes export-ignore
    .gitignore export-ignore
    /mytemp export-ignore
    
  3. Make sure to ignore the .gitattributes file itself!

  4. Make sure to commit the .gitattributes file, or git archive won't pick up the settings.

您可以随意使用git archive -o archive.zip命令或其变种。

源在此处


6
@akeshet 不是在问如何忽略文件,而是在问如何忽略 .gitignore 文件。换句话说,如何包含在版本控制中被忽略的文件。 - Hugues Fontenelle
可能没有回答提问者的问题,但它回答了我的问题,当搜索引擎把我带到这里。 - Iiridayn
这是最好的答案,虽然没有回答问题。这就是我一直在寻找的。 - undefined

7

如果从版本控制中通过 .gitignore 忽略了文件,则无法在 git-archive 中包含这些文件。

我的解决方法是在之后添加我需要的文件。

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

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

5

我认为你不能使用“git archive”来实现你所希望的目标。“git archive”基于提交工作,而你的二进制文件根本不可见。请注意,“git archive”是如此基于提交的,以至于你可以直接在没有显式存在源控制文件的裸仓库中使用“git archive”。


0

正如GoZoner所说,这不是可以使用git archive完成的任务。

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

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

  • 如果您想将库交给某人,他只对库和一些头文件感兴趣,以便能够使用该库。例如,无需存档对象文件和其他中间文件。

  • 如果您希望您的受众能够自己构建库,请包括源代码、所需的项目文件和可能的预构建二进制文件。

  • ...

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

为了记录创建存档的 Git 版本,您可以将版本存储在 zip 文件注释中:

screenshot


你如何使用git存档保存注释? - alexis
@alexis:你不行。这个展示的归档是使用 Perl 脚本创建的。 - eckes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接