我的问题很简单:
我有一个带有本地 Git 存储库的项目,我已将其推送到Bitbucket。我要做的是删除本地仓库并将我的项目提交到远程仓库,这样我的硬盘上就没有双倍大小的项目。
有什么好的解决方案吗?
更多细节
我担心该.git
文件夹可能会耗尽我的硬盘驱动器。创建我的本地 Git 存储库会保留所有文件,最后我创建了一个两倍大的项目。该应用程序处理媒体文件......它是 500 MB 没有 Git。
我想指出几点:
有关完整说明,请参阅下面的每个部分。
我知道在 Git 中没有办法直接提交到远程存储库,而不必先通过本地存储库。这不是 Git 的工作方式。如果您想提交,我认为您只能使用本地存储库进行提交。
目录下的.git
文件是压缩的,因此该目录下的 Git 存储库.git
可能会比您的工作副本结帐小得多,特别是如果它只是充满文本而不是二进制文件(稍后将详细介绍二进制文件)。在工作中,我使用了大约 300 MB 的 Git 存储库,但工作副本大约为 2.5 GB,因此相比之下,实际存储库本身要小得多。
core.compression
一个整数
-1..9
,表示默认压缩级别。-1
是 zlib 默认值。0
意味着没有压缩,并且1..9
是各种速度/大小的权衡,9
最慢。如果设置,这将为其他压缩变量提供默认值,例如core.loosecompression
和pack.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。如果未设置,则默认为-1
zlib 默认值,这是“速度和压缩之间的默认折衷(当前相当于 level6
)。”请注意,更改压缩级别不会自动重新压缩所有现有对象。您可以通过将
-F
选项传递给git-repack(1)来强制重新压缩。
您可以从免费的在线 Pro Git 书籍中了解更多关于 Git 包文件的信息。
最后,原发帖人发表了这样的评论:
嗯...该应用程序正在处理媒体文件...它是 500mb 没有 git
Git不适合对二进制文件(如媒体文件,如图片、视频、音频剪辑等)进行版本控制,因为 Git 不能像使用文本文件那样保留对它们的更改的文本差异增量,它实际上必须每次对二进制文件进行更改时,都要完整保留每个版本的二进制文件。
因此,如果您有一个名为 的 1 MB 图片文件logo.jpg
,并且您对其进行了一些小改动,Git 将不得不重新存储整个logo.jpg
文件,从而在您的存储库中再增加 1 MB。
git filter-branch
如果您的媒体文件实际上不需要在 Git 中进行版本控制,请考虑使用git filter-branch
. 您可以在官方 Linux Kernel Git 文档git filter-branch
和免费在线 Pro Git 书籍的“核选项:过滤器分支”中阅读有关此选项的更多信息。
二进制媒体文件与 Git 不能很好地相处。对于这些文件,通常最好使用专为您正在使用的内容设计的服务。
对于视频和音乐等大型媒体文件,您应该自己托管文件或使用 Vimeo 或 Youtube 等服务。
对于像 PSD 和 3D 模型这样的设计文件,像 Dropbox 这样的服务通常工作得很好。这就是 GitHub 的设计者用来保持同步的方法;只有最终的图像资产被提交到我们的存储库中。
您可以在其他 Stack Overflow 问题中了解有关 Git 和版本控制二进制文件的更多信息:
创建本地 git 保留所有文件
是的,这就是 git 所做的。从粗略的谷歌搜索:
与客户端同步的单个中央存储库不同,每个对等点的代码库工作副本是一个真正的存储库……[这]导致与集中式系统的一些重要区别
...
- 每个工作副本有效地充当代码库及其更改历史的远程备份,防止数据丢失
...
允许用户在未连接到网络时高效工作。
使大多数操作更快。
允许私人工作,因此用户可以使用他们的更改,即使是他们不想发布的早期草稿。
...
- 避免依赖一台物理机器作为单点故障。
至于你的“问题”
我担心 .git 文件夹可能会耗尽我的硬盘驱动器。
Firefox 的 git 存储库为 200 MB。考虑一下您的项目相对于 Firefox 的大小,然后准备好为您的项目的 git 存储库留出一万、两百四十千字节的空间。