首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否可以将未版本化的文件保存在git存储库中

是否可以将未版本化的文件保存在git存储库中
EN

Stack Overflow用户
提问于 2010-02-12 21:15:04
回答 3查看 3.7K关注 0票数 18

以下是问题所在:

我在我的托管合作伙伴的地方创建了裸露的git仓库,我使用它作为我维护项目的所有位置/计算机的参考仓库。

问题是,我的项目使用的是sqlite db文件,它一直在定期增长(目前大约是150MB )。随着时间的推移,我的.git文件夹变得越来越大(最近大约1 1GB)。而且我的托管空间是有限的。

我需要裸存储库来包含这个db文件的头版本,但是我真的不需要保存它的版本历史。

因此,为了获得一些空间,我不时地从历史记录中删除db文件,清理存储库并重新创建裸版本。这是可行的,但也是相当痛苦的。

有没有办法告诉git只保留文件的最新版本并删除其历史记录?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-12 21:21:59

简短的回答是:不。

更有用的答案: Git不会单独跟踪文件,因此要求它丢弃单个文件的历史记录将意味着它必须在每次提交时完全重写其所有历史记录,这会导致各种丑陋的问题。

您可以将文件存储在带注释的标记中,但这不是很方便。它基本上是这样的:

代码语言:javascript
复制
ID=`git hash-object -w yourfile.sqlite`
git tag -a -m "Tag database file" mytag $ID

这绝对不能方便地更新(甚至创建)工作树中的数据库文件...你必须使用钩子脚本来模拟它。

完全公开:我不能完全确定是否真的有可能推送正常历史记录中未涵盖的标记斑点。我怀疑它不是,在这种情况下,这个食谱将是非常不有用的。

票数 5
EN

Stack Overflow用户

发布于 2010-02-12 21:25:40

听起来你好像找错了问题的解决方案。

大型二进制文件经常需要存储在存储库中,但我认为SQLite数据库并不是真正需要以二进制形式存储在存储库中的东西。

相反,您应该将模式保持在版本控制中,如果还需要保留数据,则将其序列化(到XML、JSON、YAML...)版本也是如此。构建脚本可以创建数据库,并在必要时将数据反序列化到其中。

因为Git可以有效地跟踪基于文本的序列化格式,所以即使您认为不需要访问以前的版本,也不必担心保留这些版本的空间开销。

票数 4
EN

Stack Overflow用户

发布于 2012-05-05 07:09:16

将sqlite.db添加到您的.gitignore。

要使用当前分支签入(潜在)推送的当前数据库,请执行以下操作:

代码语言:javascript
复制
branch="$(sed 's,.*refs/heads/,,' "$(git rev-parse --git-dir)"/HEAD)"
objectname=$(git hash_object -w "$(git rev-parse --show-toplevel)/sqlite.db")
git tag -f db_heads/$branch $objectname

推送分支时:

代码语言:javascript
复制
git push origin $branch +db_heads/$branch

获取分支时:

代码语言:javascript
复制
git fetch origin $branch tags/db_heads/$branch:tags/db_heads/$branch

检出分支时:

代码语言:javascript
复制
git checkout $branch
git cat-file -p db_heads/$branch >"$(git rev-parse --show_toplevel)/sqlite.db"

我想,这应该就够了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2251967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档