我有一个.NET C#存储库。包括二进制可执行文件,它基于同一存储库中的许多定期更新的SQL脚本构建数据库。当然,使用bin
会忽略.gitignore
文件夹。
但是,我有一些非开发人员用户需要定期更新此文件。理想情况下,我想要做的是在他们的机器上放置一个简单的批处理脚本来执行git pull
并接收新的二进制文件。但是,我真的不想跟踪此文件的历史记录,并使用不必要的数据阻塞我的存储库。
是否可以提交文件而不保留该文件的历史记录?因此,每次提交文件时,它只是替换存储库中存储的对象,而不是创建该对象的新版本。
如果没有,你们中的任何人都有这方面的任何非常简单的解决方案。该文件只是一个由5或6名工作人员使用的内部实用程序,因此任何类型的黑客解决方案都可以。
答案 0 :(得分:5)
您可以在单独的孤立分支(git checkout --orphan NEWBRANCH
)上维护该文件,并在那里提交您的文件。
当您需要替换文件时,使用--amend提交它,然后强制推送该分支。
这将覆盖以前的提交,因此您在任何给定时间都只能对该文件进行单一修订。在客户端,您可以通过使用文件签出分支或使用git show branch:file > file
答案 1 :(得分:1)
您可以为二进制文件创建blob并标记blob,当您替换二进制文件时,实际创建一个新blob,prune
旧blob,删除标记,创建指向该标记的新标记新的blob。
按照以下步骤创建blob并标记blob:
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'
git push --tags
现在,您已为my_binary_file
创建了一个blob,并创建了指向blob的带注释标记tag_my_binary_file
,并将标记和blob推送到上游。您可以通过以下步骤从其他客户端签出二进制文件:
git fetch --tags
git cat-file -p tag_my_binary_file | head -1 | cut -d" " -f2 | xargs git show > my_binary_file
现在,您将在当前目录中找到名为my_binary_file
的二进制文件。
要更换文件,请执行以下步骤:
git tag -d tag_my_binary_file
git gc
; git prune