0

我的问题很简单:

我有一个带有本地 Git 存储库的项目,我已将其推送到Bitbucket。我要做的是删除本地仓库并将我的项目提交到远程仓库,这样我的硬盘上就没有双倍大小的项目。

有什么好的解决方案吗?

更多细节

我担心该.git文件夹可能会耗尽我的硬盘驱动器。创建我的本地 Git 存储库会保留所有文件,最后我创建了一个两倍大的项目。该应用程序处理媒体文件......它是 500 MB 没有 Git。

4

2 回答 2

0

我想指出几点:

  1. Git 只能提交到本地仓库。
  2. Git 在其 repo 中压缩文件。
  3. Git 不适合版本控制二进制文件。

有关完整说明,请参阅下面的每个部分。

Git 只能提交到本地仓库

我知道在 Git 中没有办法直接提交到远程存储库,而不必先通过本地存储库。这不是 Git 的工作方式。如果您想提交,我认为您只能使用本地存储库进行提交。

Git 在其 repo 中压缩文件

目录下的.git文件是压缩的,因此该目录下的 Git 存储库.git可能会比您的工作副本结帐小得多,特别是如果它只是充满文本而不是二进制文件(稍后将详细介绍二进制文件)。在工作中,我使用了大约 300 MB 的 Git 存储库,但工作副本大约为 2.5 GB,因此相比之下,实际存储库本身要小得多。

Git 的压缩设置

您可以将 Git 配置为使用不同的压缩级别

core.compression

一个整数-1..9,表示默认压缩级别。-1是 zlib 默认值。0意味着没有压缩,并且1..9是各种速度/大小的权衡,9最慢。如果设置,这将为其他压缩变量提供默认值,例如core.loosecompressionpack.compression

core.loosecompression

一个整数-1..9,指示不在包文件中的对象的压缩级别。-1是 zlib 默认值。0意味着没有压缩,并且1..9是各种速度/大小的权衡,9最慢。如果未设置,则默认为core.compression. 如果未设置,则默认为1(最佳速度)。

pack.compression

一个整数-1..9,表示包文件中对象的压缩级别。-1是 zlib 默认值。0意味着没有压缩,并且1..9是各种速度/大小的权衡,9最慢。如果未设置,则默认为 core.compression。如果未设置,则默认为-1zlib 默认值,这是“速度和压缩之间的默认折衷(当前相当于 level 6)。”

请注意,更改压缩级别不会自动重新压缩所有现有对象。您可以通过将-F选项传递给git-repack(1)来强制重新压缩。

您可以从免费的在线 Pro Git 书籍中了解更多关于 Git 包文件的信息

Git 不适合版本控制二进制文件

最后,原发帖人发表了这样的评论

嗯...该应用程序正在处理媒体文件...它是 500mb 没有 git

Git不适合对二进制文件(如媒体文件,如图片、视频、音频剪辑等)进行版本控制,因为 Git 不能像使用文本文件那样保留对它们的更改的文本差异增量,它实际上必须每次对二进制文件进行更改时,都要完整保留每个版本的二进制文件。

因此,如果您有一个名为 的 1 MB 图片文件logo.jpg,并且您对其进行了一些小改动,Git 将不得不重新存储整个logo.jpg文件,从而在您的存储库中再增加 1 MB。

解决方案 1:删除二进制文件git filter-branch

如果您的媒体文件实际上不需要在 Git 中进行版本控制,请考虑使用git filter-branch. 您可以在官方 Linux Kernel Git 文档git filter-branch免费在线 Pro Git 书籍的“核选项:过滤器分支”中阅读有关此选项的更多信息。

解决方案 2:对媒体文件使用 3rd 方服务

GitHub 对处理大型媒体文件提出了以下建议

二进制媒体文件与 Git 不能很好地相处。对于这些文件,通常最好使用专为您正在使用的内容设计的服务。

对于视频和音乐等大型媒体文件,您应该自己托管文件或使用 Vimeo 或 Youtube 等服务。

对于像 PSD 和 3D 模型这样的设计文件,像 Dropbox 这样的服务通常工作得很好。这就是 GitHub 的设计者用来保持同步的方法;只有最终的图像资产被提交到我们的存储库中。

有关 Git 和版本控制二进制文件的更多信息

您可以在其他 Stack Overflow 问题中了解有关 Git 和版本控制二进制文件的更多信息:

  1. 使用 git 管理大型二进制文件
  2. 带有大文件的 git
于 2013-07-27T15:47:13.660 回答
0

创建本地 git 保留所有文件

是的,这就是 git 所做的。从粗略的谷歌搜索

与客户端同步的单个中央存储库不同,每个对等点的代码库工作副本是一个真正的存储库……[这]导致与集中式系统的一些重要区别

...

  • 每个工作副本有效地充当代码库及其更改历史的远程备份,防止数据丢失

...

  • 允许用户在未连接到网络时高效工作。

  • 使大多数操作更快。

  • 允许私人工作,因此用户可以使用他们的更改,即使是他们不想发布的早期草稿。

...

  • 避免依赖一台物理机器作为单点故障。

至于你的“问题”

我担心 .git 文件夹可能会耗尽我的硬盘驱动器。

Firefox 的 git 存储库为 200 MB。考虑一下您的项目相对于 Firefox 的大小,然后准备好为您的项目的 git 存储库留出一万、两百四十千字节的空间。

于 2013-07-26T08:14:17.717 回答