7

我有一个带有一堆源代码的 git repo,当它编译时会产生一堆二进制文件。二进制文件都列在适当的 .gitignore 文件中,并且不包含在 repo 中。

但是,我想分发包含所有二进制文件的我的仓库的源+二进制文件快照压缩文件,但不包含 .git/ 目录之类的东西。

创建快照压缩文件的自然方式似乎是

git archive -o archive.zip 

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

关于如何使用 git archive 完成此任务的想法?(我的解决方法是手动创建一个包含 .git/ 目录以外的所有内容的 zip 存档)

4

4 回答 4

6

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

  1. 在项目根目录中创建一个名为.gitattributes的文件(如果它不存在)。
  2. 编辑文件:每个排除项都应该有一个文件模式,后跟“ export-ignore ”:

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

  4. 确保提交 .gitattributes 文件,否则git archive不会选择设置。

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

来源在这里

于 2018-09-25T11:28:50.090 回答
4

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

于 2012-04-10T23:53:17.970 回答
3

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

在我的解决方法中,我会在之后附加我需要的文件。

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

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

于 2019-01-04T09:43:22.893 回答
0

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

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

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

  • 如果你想把一个库交给某人,他只会对这个库和一些标题感兴趣,才能使用这个库。例如,无需归档目标文件和其他中间文件。

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

  • ...

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

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

截屏

于 2012-04-11T12:13:51.490 回答