在保留最新版本的同时,有目的地禁用Git中特定文件的历史记录

时间:2015-07-03 20:14:03

标签: git binary binaryfiles revision-history

我使用专有的数据库语言来开发我的程序。源代码存储在大型二进制文件中,我使用代码导出实用程序在提交到我的git存储库之前以纯文本格式保存源代码。由于我的活动源代码文件是一个大型二进制文件,我想在存储库中更新该文件,但我不想保留它的历史记录。我正在使用的IDE总是让它看起来好像二进制文件已经改变,即使我只对外部组件文件进行了更改(例如xml,操作测试数据等等)。我的问题是:

如何让git只保留这个特定二进制文件的最新版本,以便节省我的中央存储库服务器的空间?从本质上讲,我不想跟踪此特定文件的历史记录,但我仍希望将最新的副本保留在我的存储库中。

我搜索了谷歌和Stack Exchange的答案,我发现了类似的问题,但没有Git的答案。

2 个答案:

答案 0 :(得分:0)

您可以从历史记录中删除该文件,并通过

停止跟踪该文件
git rm --cached FILE

可能你想将FILE添加到.gitignore并添加它

git add .gitignore
git commit -m "removed binary FILE from index"
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch FILE" HEAD

现在应该清理你的历史了。

虽然这可以在不丢失文件的情况下工作,但您应该备份文件。

BUT

这意味着您的存储库中没有该文件!它只存在于工作副本的目录中。你无法推送该文件或其他任何内容。

据我所知,不可能不跟踪文件库,即文件库的一部分。如果能够以某种方式实现,这是一个非常肮脏的技巧。

答案 1 :(得分:0)

<块引用>

源代码存储在大型二进制文件中,我使用代码导出实用程序以纯文本格式保存源代码

<块引用>

如何让 git 只保留这个特定二进制文件的最新版本

要在存储库中仅保留一个原始二进制版本,而不与导出到文本源的任何版本相关联,最简单的方法是直接与 Git 的内容跟踪器核心对话以获取该文件:

git tag latest-binary $(git hash-object -w that.file)

它绕过了几乎所有的 Git 和其他所有内容,并直接引用这些位。您将无法正常查看它,而是使用

git show latest-binary >any.name.you.like