我正在寻找如何处理我的源代码(Web应用程序)所依赖的大型二进制文件的意见.我们目前正在讨论几种选择:
您对此有何体验/想法?
另外:有没有人有多个Git存储库的经验并在一个项目中管理它们?
这些文件是程序的图像,该程序生成包含这些文件的PDF.文件不会经常更改(如年份),但它们与程序非常相关.没有文件,程序将无法运行.
我正在做一个Web应用程序,我需要为一些重大更改创建一个分支,事实是,这些更改需要更改数据库模式,所以我想将整个数据库放在git下.
我怎么做?是否有一个特定的文件夹,我可以保存在git存储库下?我怎么知道哪一个?我怎么能确定我正在放置正确的文件夹?
我需要确定,因为这些变化不向后兼容; 我搞不起搞砸了.
我的数据库是PostgreSQL
有人建议进行备份并将备份文件置于版本控制下而不是数据库中.说实话,我发现真的很难吞下去.
一定有更好的方法.
好的,所以没有更好的方法,但我仍然不太相信,所以我会稍微改变一下这个问题:
我想把整个数据库置于版本控制之下,我可以使用什么数据库引擎,以便我可以将实际数据库置于版本控制而不是转储?
sqlite会对git友好吗?
由于这只是开发环境,我可以选择我想要的任何数据库.
我真正想要的不是跟踪我的开发历史,而是能够从我的"新的激进变化"分支切换到"当前的稳定分支",并且能够例如修复一些错误/问题等等.稳定的分支.这样,当我切换分支时,数据库自动神奇地变得与我当前所在的分支兼容.我真的不太关心实际数据.
场景
想象一下,我被迫使用一些总是存储在.zip文件中的文件.zip中的一些文件是小文本文件并经常更改,而其他文件更大但幸运的是相当静态(例如图像).
如果我想将这些zip文件放在git存储库中,每个zip都被视为一个blob,所以每当我提交存储库时,就会增加zip文件的大小...即使只有一个小文本文件在里面改变了!
为什么这是现实的
MS Word 2007/2010 .docx和Excel .xlsx文件是ZIP文件...
我想要的是
是否有任何机会告诉git不要将拉链视为文件,而是作为目录并将其内容视为文件?
优点
但是,它说不行吗?
我意识到如果没有额外的元数据,这将导致一些歧义:在git checkoutgit上必须决定是foo.zip/bar.txt在常规目录还是zip文件中创建文件.但是,我认为这可以通过配置选项解决.
两个想法如何完成(如果它还不存在)
minizip或者IO::Compress::Zip在git里面Git使用增量压缩来存储彼此相似的对象.
此算法是否已标准化并在其他工具中使用?是否有描述格式的文档?它与xdelta/VCDIFF/RFC 3284兼容吗?
我有一个小的git repo设置,唯一真正的目的是能够在几台机器(工作,家庭,笔记本电脑)上进行本地开发.因此,我有一个分支,一旦我离开计算机,我提交/推动,拉一下我坐下 工作得很好,到现在为止.现在当我拉上我的"实时测试"机器时,我得到以下信息:
remote: Counting objects: 38, done.
remote: Compressiremote: ng objects: 100% (20/20), done.
remote: Total 20 (delta 17), reused 0 (delta 0)
error: unable to create temporary sha1 filename .git/objects/ed: File exists
fatal: failed to write object
fatal: unpack-objects failed
Run Code Online (Sandbox Code Playgroud)
在网上搜索我能找到的唯一真正的答案如下:http://marc.info/? l = git&m = 122720741928774&w = 2,它基本上表明这是一个虚假的错误,它在堆顶上,因此没有说什么关于什么是真的错了.
我从哪里可以找出问题所在?
编辑:删除本地副本并重新克隆
不好意思拿出这个话题再次,因为有洙 许多 其他已经相关的问题-但没有直接涉及我的问题.
我正在搜索的是一个很好的版本控制系统,只能处理两个简单的要求:
为什么?我们正在为我们的下一个大型操作系统部署重新打包几千个软件应用程序,我们希望这些软件包遵循版本控制.
到目前为止,我已经有了一些SVN和CVS的经验,但是我对两个大型二进制文件的性能都不太满意(一些MSI或CAB文件将> 1GB).此外,我不确定他们是否能够在未来2 - 5年内按照我们期望的数据量进行调整(就像我说的那样,估计> 1TB)
那么,你有什么建议吗?我目前也在研究SVN外部和Git子模块,虽然这意味着每个软件包都有几个单独的存储库,但我不确定这是我们想要的......
我没有在薄包装上找到太多东西,而且手册页的信息对此非常神秘.我知道它与慢速连接有关,但什么是"慢速连接"?
它的优点和缺点是什么?我什么时候应该使用它,什么时候不应该使用它?
这个Git问题与另一个关于SVN的问题非常相似.
我有一个充满大文件的repo,我需要添加一个文件.这在SVN中非常容易.
svn import -m "Adding just a file" file_name http://path/to/svn/repo/file_name
如何在Git中实现这个简单的任务?
如果我在存储库中移动文件,例如从一个文件夹移动到另一个文件夹,git就足够聪明,知道这些文件是相同的文件,只是更新它对存储库中这些文件的引用,或新的提交实际上是否创建了这些文件?
我问,因为我想知道git对于存储二进制文件有多么有用.如果它将移动的文件视为副本,那么即使您实际上没有添加任何新文件,也可以轻松地获得非常大的存储库.
git ×10
svn ×2
binary-diff ×1
binaryfiles ×1
compression ×1
database ×1
github ×1
large-files ×1
msysgit ×1
packaging ×1
postgresql ×1
vcdiff ×1
zip ×1