Git提交并推送二进制文件,但不保留历史记录

时间:2014-04-02 23:16:08

标签: c# git release

我有一个.NET C#存储库。包括二进制可执行文件,它基于同一存储库中的许多定期更新的SQL脚本构建数据库。当然,使用bin会忽略.gitignore文件夹。

但是,我有一些非开发人员用户需要定期更新此文件。理想情况下,我想要做的是在他们的机器上放置一个简单的批处理脚本来执行git pull并接收新的二进制文件。但是,我真的不想跟踪此文件的历史记录,并使用不必要的数据阻塞我的存储库。

是否可以提交文件而不保留该文件的历史记录?因此,每次提交文件时,它只是替换存储库中存储的对象,而不是创建该对象的新版本。

如果没有,你们中的任何人都有这方面的任何非常简单的解决方案。该文件只是一个由5或6名工作人员使用的内部实用程序,因此任何类型的黑客解决方案都可以。

2 个答案:

答案 0 :(得分:5)

您可以在单独的孤立分支(git checkout --orphan NEWBRANCH)上维护该文件,并在那里提交您的文件。

当您需要替换文件时,使用--amend提交它,然后强制推送该分支。

这将覆盖以前的提交,因此您在任何给定时间都只能对该文件进行单一修订。在客户端,您可以通过使用文件签出分支或使用git show branch:file > file

来获取文件的内容

答案 1 :(得分:1)

您可以为二进制文件创建blob并标记blob,当您替换二进制文件时,实际创建一个新blob,prune旧blob,删除标记,创建指向该标记的新标记新的blob。

按照以下步骤创建blob并标记blob:

  1. cat my_binary_file | git hash-object --stdin -w | xargs git tag -a tag_my_binary_file -m 'this is the message describing the binary file'
  2. git push --tags
  3. 现在,您已为my_binary_file创建了一个blob,并创建了指向blob的带注释标记tag_my_binary_file,并将标记和blob推送到上游。您可以通过以下步骤从其他客户端签出二进制文件:

    1. git fetch --tags
    2. git cat-file -p tag_my_binary_file | head -1 | cut -d" " -f2 | xargs git show > my_binary_file
    3. 现在,您将在当前目录中找到名为my_binary_file的二进制文件。

      要更换文件,请执行以下步骤:

      1. git tag -d tag_my_binary_file
      2. git gc; git prune
      3. 重复创建blob和标记
      4. 的步骤