我想有一个主要由二进制文件组成的git存储库.
我需要跟踪已更改,添加和删除的文件到存储库,但我不希望git对文件本身的内容进行版本控制.
换句话说,我只需要git来跟踪更改(更改日志),而不是内容.
用git这甚至可能吗?
我应该为此使用其他东西吗?
所以我已经开始使用git了一段时间,并逐渐理解它是如何工作的.我理解的一个要点是 - 每次进行新提交时都会创建一个快照.当然,快照只包含已更改的文件和指向未更改文件的指针.
每次你在Git中提交或保存项目的状态时,它基本上都会记录当时所有文件的外观,并存储对该快照的引用.为了提高效率,如果文件没有改变,Git不会再次存储文件 - 只是指向它已存储的先前相同文件的链接.
但是,假设我有一个很大的文件,例如2GB的文本文件.我将该文件更改10次,因此每天进行10次提交,这是否意味着 - 我现在在我的计算机上有10个2GB文件?这似乎对我来说效率很低所以我相信情况可能并非如此.
有人可以澄清这种情况会发生什么吗?
我正在开发移动应用程序(iPhone,Android和Blackberry),最近从SVN转换为Git.
在我发布版本后的SVN中,我标记相关的分支/修订版以确保其状态被保留,然后我将一个目录添加到此标记并放入已发布的二进制文件中,并且(对于iPhone)还有用于该精确版本的调试符号文件(用于表示以后的任何崩溃报告).这些文件不需要进行版本控制,但是可以方便地存储历史工件和代码以确保它们被备份(SVN具有备份策略,而我的CI服务器上的构建则没有).
我试图找出Git中最好的等价物.可能最接近的是创建一个新分支,添加二进制文件,标记它,并删除分支.但是,我想知道是否有更好的方法可以做到这一点?
理想情况下,我想创建一个标记,然后将二进制文件作为未版本控制的文件附加到标记.这样,它们实际上不会出现在源代码树中,但它们存在于存储库中,与标记关联,以供有权访问存储库的任何人进行检索.在Git中有什么相同的东西吗?
我不幸的是不得不在 git 中存储一些二进制文件,
但是我可以选择如何将数据存储在磁盘上 - 在 Git 中(以我们自己的格式,只有构建系统需要读取)。
我想避免谈论太多细节,因为我认为它没有那么重要 - 但为了提供一些上下文,这些是许多图标文件,但同样的问题也适用于许多小声音文件或 3d 模型。
将这些文件转换为一个大图像将是一个构建步骤,因此图像可以在 git 中以我们喜欢的方式存储。
让我们假设某些文件偶尔会发生变化 - 因此避免为像素的每个小变化存储一个新的二进制 blob - 会很好。
我有兴趣知道:
假设不能完全避免使用二进制文件,所有考虑到避免大型 git 存储库(因为对二进制文件进行编辑)的最佳选择是什么?
我有兴趣在 git 中存储一个固定大小的 EEPROM HEX 文件。这些文件永远不会改变大小,但它们会经常改变内容。
如果我将一个 EEPROM 文件添加到 git 并提交它,然后我更改文件中的几个字节,git 会在数十或数百次提交中有效地存储此更改吗?
在我对这个问题的研究中,我对这个主题进行了一些彻底的讨论,但其中大多数似乎处理的是 PDF 和 MP3 之类的文件,没有人希望这些文件保持不变或在差异中具有可比性。我想知道 EEPROM HEX 文件是否会因为文件大小保持不变而被区别对待?
编辑(再次)
一些初步观察......(感谢 Krumelur 的“尝试一下”的鼓励!)
我正在测试的文件是一个 7MB 的 Intel HEX 文件。根据 git 的输出,它似乎将此文件视为文本文件:
$ git commit -m "Changed a single byte."
[master bc2958b] Changed a single byte.
1 file changed, 1 insertion(+), 1 deletion(-)
Run Code Online (Sandbox Code Playgroud)
diff 输出也匹配:
$ git show bc2958b
commit bc2958b[...]
Author: ThoughtProcess <blah@blah.com>
Date: Wed Jul 31 11:53:41 2013 -0500
Changed a single byte.
diff --git a/test.hex …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 git 在网站上实现一个新的备份系统。虚拟专用服务器共有 20GB 空间,其中 5GB 可用空间。
当我运行git add .(/var/www使用我最喜欢的.gitignore参数)时,我有一个巨大的 git 文件夹,它填满了我的硬盘。
目前还不清楚为什么会发生这种情况,因为我希望.git目录包含有关位的位(元信息),而不是所有文件的二进制重复项!
这里发生了什么?如果我的网站是14GB,.git目录会额外占用14GB吗?
我是生物信息学家,目前从基因组文件中提取正常大小的序列.一些基因组文件足够大,我不想将它们放入主git存储库,而我将提取的序列放入git.
是否有可能告诉git"这是一个大文件 - 不存储整个文件,只需取其校验和,并告诉我该文件是否丢失或修改."
如果那是不可能的,我想我将不得不git-ignore大文件,或者,如本问题所示,将它们存储在子模块中.
我的代码有一个 git 存储库,但还想在子目录中包含一些 Word 文件和 PDF,并且可能想要添加一些二进制文件。我不想存储增量,只想存储这些文件的最新版本。有没有办法在 git 中做到这一点?