相关疑难解决方法(0)

在git存储库中高效存储二进制文件

我想有一个主要由二进制文件组成的git存储库.

我需要跟踪已更改,添加和删除的文件到存储库,但我不希望git对文件本身的内容进行版本控制.

换句话说,我只需要git来跟踪更改(更改日志),而不是内容.

用git这甚至可能吗?

我应该为此使用其他东西吗?

versioning git binary file

8
推荐指数
2
解决办法
8193
查看次数

Git如何通过多次提交存储大型文件?

所以我已经开始使用git了一段时间,并逐渐理解它是如何工作的.我理解的一个要点是 - 每次进行新提交时都会创建一个快照.当然,快照只包含已更改的文件和指向未更改文件的指针.

根据ProGit§1.3入门 - Git Basics

每次你在Git中提交或保存项目的状态时,它基本上都会记录当时所有文件的外观,并存储对该快照的引用.为了提高效率,如果文件没有改变,Git不会再次存储文件 - 只是指向它已存储的先前相同文件的链接.

但是,假设我有一个很大的文件,例如2GB的文本文件.我将该文件更改10次,因此每天进行10次提交,这是否意味着 - 我现在在我的计算机上有10个2GB文件?这似乎对我来说效率很低所以我相信情况可能并非如此.

有人可以澄清这种情况会发生什么吗?

git

6
推荐指数
1
解决办法
227
查看次数

将二进制文件附加到Git标记

我正在开发移动应用程序(iPhone,Android和Blackberry),最近从SVN转换为Git.

在我发布版本后的SVN中,我标记相关的分支/修订版以确保其状态被保留,然后我将一个目录添加到此标记并放入已发布的二进制文件中,并且(对于iPhone)还有用于该精确版本的调试符号文件(用于表示以后的任何崩溃报告).这些文件不需要进行版本控制,但是可以方便地存储历史工件和代码以确保它们被备份(SVN具有备份策略,而我的CI服务器上的构建则没有).

我试图找出Git中最好的等价物.可能最接近的是创建一个新分支,添加二进制文件,标记它,并删除分支.但是,我想知道是否有更好的方法可以做到这一点?

理想情况下,我想创建一个标记,然后将二进制文件作为未版本控制的文件附加到标记.这样,它们实际上不会出现在源代码树中,但它们存在于存储库中,与标记关联,以供有权访问存储库的任何人进行检索.在Git中有什么相同的东西吗?

svn tags git version-control backup

5
推荐指数
1
解决办法
1148
查看次数

Git和二进制数据,最佳存储方式

我不幸的是不得不在 git 中存储一些二进制文件,

但是我可以选择如何将数据存储在磁盘上 - 在 Git 中(以我们自己的格式,只有构建系统需要读取)。

我想避免谈论太多细节,因为我认为它没有那么重要 - 但为了提供一些上下文,这些是许多图标文件,但同样的问题也适用于许多小声音文件或 3d 模型。

将这些文件转换为一个大图像将是一个构建步骤,因此图像可以在 git 中以我们喜欢的方式存储。

  • 二进制压缩(例如,PNG(图像)、FLAC(声音))
  • 二进制未压缩(例如,PPM(图像)、未压缩的 WAV(声音))
  • 二进制数据的 ASCII 表示(例如,mime 编码、XPM(图像))

让我们假设某些文件偶尔会发生变化 - 因此避免为像素的每个小变化存储一个新的二进制 blob - 会很好。

我有兴趣知道:

  • 每次二进制文件更改(甚至几个字节)时,哪些选项将存储一个全新的二进制 blob。
  • git diff 未压缩的二进制数据是否比压缩数据更好(即使对未压缩数据进行轻微编辑,也可能发生很大变化)。
  • 我认为与一个大型二进制文件相比,长期存储许多小型二进制文件的开销较小,假设只有一些文件被定期修改,git 可以有效地处理对大型二进制文件的小改动吗?

假设不能完全避免使用二进制文件,所有考虑到避免大型 git 存储库(因为对二进制文件进行编辑)的最佳选择是什么?

git binary-diff

5
推荐指数
1
解决办法
2205
查看次数

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

4
推荐指数
2
解决办法
1100
查看次数

git 会复制我的所有文件吗?

我正在尝试使用 git 在网站上实现一个新的备份系统。虚拟专用服务器共有 20GB 空间,其中 5GB 可用空间。

当我运行git add ./var/www使用我最喜欢的.gitignore参数)时,我有一个巨大的 git 文件夹,它填满了我的硬盘。

目前还不清楚为什么会发生这种情况,因为我希望.git目录包含有关位的位(元信息),而不是所有文件的二进制重复项!

这里发生了什么?如果我的网站是14GB,.git目录会额外占用14GB吗?

git backup-strategies

3
推荐指数
1
解决办法
714
查看次数

是否可以在git中仅存储大文件的校验和?

我是生物信息学家,目前从基因组文件中提取正常大小的序列.一些基因组文件足够大,我不想将它们放入主git存储库,而我将提取的序列放入git.

是否有可能告诉git"这是一个大文件 - 不存储整个文件,只需取其校验和,并告诉我该文件是否丢失或修改."

如果那是不可能的,我想我将不得不git-ignore大文件,或者,如本问题所示,将它们存储在子模块中.

git large-files

2
推荐指数
1
解决办法
687
查看次数

Git:只存储最新的副本,而不是增量

我的代码有一个 git 存储库,但还想在子目录中包含一些 Word 文件和 PDF,并且可能想要添加一些二进制文件。我不想存储增量,只想存储这些文件的最新版本。有没有办法在 git 中做到这一点?

git

1
推荐指数
1
解决办法
214
查看次数