覆盖远程.git文件夹?

时间:2017-03-11 22:52:01

标签: git github

我有一个repo,当克隆时,它非常大(大约30MB),实际的jQuery(function($) { // DOM ready and $ alias secured $('li.feed-item iframe').attr("src", function() { return $(this).closest("a.cboxElement").attr('href'); }); }); 文件只占用大约1.5MB。罪魁祸首最终成为src文件夹的内容。我做了一些清洁,并且能够将回购尺寸降低到2.5MB。

我想将这些更改推送到我的远程GitHub仓库。我试图强行推动主分支(在这种情况下它很好,因为它是私人的),但我最终看到了“一切都是最新的”#39;这是有道理的,因为.git/objects/个文件都没有改变。

有没有办法覆盖远程src文件夹?或者将其与我的本地仓库同步?

修改

通过“清理”,我没有删除.git内的任何内容。我只是运行了一些命令:

.git

我还更新了我不再需要的git fsck --full --unreachable git repack -a -d git prune 行。

3 个答案:

答案 0 :(得分:4)

请勿删除.git文件夹中的文件。有git gc之类的命令来清理你的回购。如果要从repo中删除文件,可以使用git rm --cached filename从repo中删除该文件或文件夹,但将文件保存在本地。

然后,您可以将该文件夹添加到.gitignore文件中。

答案 1 :(得分:1)

  

我有一个回购,当克隆时,它非常大(约30MB)

按照今天的标准,这个规模很小。

如果你考虑30兆的磁盘和#34;非常大"我不得不怀疑你的开发环境,以及你如何使用存储库克隆。如果您在磁盘空间上做空,那么获得更大的磁盘可能需要a better use of your time/money而不是花费大量时间来节省30兆。

  

通过“清理”,我没有删除.git中的任何内容。我只是运行了一些命令

好,删除.git中的文件将是 错误

  

有没有办法覆盖远程.git文件夹?或者将其与我的本地仓库同步?

如果您正在运行自己的Git服务器,是的,但不是在Github上。 Github应该为你处理这种重新包装。如果没有,您的本地Git应该不时地git gc。如果没有,你可以自己做。

你所描述的听起来有点可疑。大型存储库通常是提交大量压缩文件或提交大量非常大的二进制文件的结果。 Git很难看到这些文件之间的差异,或者压缩它们。

对于前者,在提交之前解压缩文件。要像.gz或.tar.gz或.zip这样的Git是一团二进制数据。由于它已经被压缩,因此无法进一步压缩它。由于它无法看到真实内容,因此无法利用存储差异。因此,不是存储code.tgz,而是提取它并存储目录。

对于大型二进制文件,如图像,办公文档,视频,音频等...... Git也难以压缩(它们通常已被压缩)并使它们变差。解决方案是使用git-lfs (Large File Storage)将它们的实际内容存储在云中。这可以大大减少存储库的大小。

这会减少存储库的大小,现有的历史记录呢?为此,BFG Repo Cleaner允许您将历史记录重写为convert large files to use LFS

答案 2 :(得分:0)

  • 如果您希望在磁盘上拥有较小的克隆大小,请执行浅克隆:git clone --depth 1,即克隆没有历史记录。这在克隆一个大小为千兆字节和1000次提交的巨型仓库时特别有用。
  • 如果您想永久缩小服务器上的repo大小并且每个未来克隆的克隆大小都很小,那么您必须执行git filter-branch并删除历史记录的某些部分(例如,当您使用时)偶然检查一个大文件,然后删除等等。通常git会将文件永久保存在历史记录中,默认情况下所有克隆都会保留它。)
  • 如果要删除其他计算机上无法访问的对象,则需要在每台主机上执行git gc或类似命令。您无法以任何方式远程调用它。请注意,当您覆盖历史记录和push --force时,之前已经提取了一些已删除提交的客户端将保留它们 - 无论何时公开曾经应该被视为永久公开。您无法远程强制删除其他人的克隆历史记录。 Git(在客户端上)会在一段时间后自动进行垃圾收集,但从服务器的角度来看,你无法控制它。