相关疑难解决方法(0)

如何从Git存储库中的提交历史记录中删除/删除大文件?

偶尔我会把一个DVD-rip放到一个网站项目中,然后不小心git commit -a -m ...,然后,zap,回购邮件被2.2演出臃肿.下次我做了一些编辑,删除了视频文件,并提交了所有内容,但是历史记录中的压缩文件仍然存储在存储库中.

我知道我可以从那些提交开始分支并将一个分支重新绑定到另一个分支.但是我应该怎么做才能将2个提交合并在一起,以便大文件没有在历史记录中显示并在垃圾收集过程中被清除?

git version-control git-rebase git-rewrite-history

646
推荐指数
17
解决办法
22万
查看次数

从Git历史记录中删除敏感文件及其提交

我想在GitHub上放置一个Git项目,但它包含某些带有敏感数据的文件(用户名和密码,比如/ config/deploy.rb for capistrano).

我知道我可以将这些文件名添加到.gitignore,但这不会删除他们在Git中的历史记录.

我也不想通过删除/.git目录重新开始.

有没有办法删除Git历史记录中特定文件的所有痕迹?

git git-filter-branch git-commit git-rewrite-history

330
推荐指数
9
解决办法
10万
查看次数

从git/GitHub的历史记录中删除文件夹及其内容

我正在使用我的GitHub帐户上的存储库,这是我偶然发现的一个问题.

  • Node.js项目包含一个安装了几个npm软件包的文件夹
  • 包裹在node_modules文件夹中
  • 将该文件夹添加到git repository并将代码推送到github(当时没有想到npm部分)
  • 意识到你并不真的需要该文件夹成为代码的一部分
  • 删除了那个文件夹,推了它

在那个例子中,总git repo的大小约为6MB,其中实际代码(除了该文件夹之外的所有代码)只有大约300 KB.

现在我正在寻找的是从git的历史中删除该包文件夹的细节的一种方法,所以如果有人克隆它,他们不必下载6mb的历史记录,他们将获得唯一的实际文件截至上次提交时将为300KB.

我查找了可能的解决方案并尝试了这两种方法

Gist似乎在运行脚本之后起作用,它表明它摆脱了该文件夹,之后它显示了50个不同的提交被修改.但它没有让我推动那些代码.当我试图推它时,它说,Branch up to date但显示50个提交被修改了一个git status.其他两种方法也没有帮助.

现在即使它显示它摆脱了该文件夹的历史记录,当我在我的localhost上检查该repo的大小时,它仍然是大约6MB.(我也删除了refs/original文件夹,但没有看到repo大小的变化).

我要澄清的是,如果有一种方法可以摆脱提交历史(这是我认为发生的唯一事情),而且那些文件git保持假设一个人想要回滚.

让我们说一个解决方案是为此而呈现并应用于我的localhost但不能复制到该GitHub仓库,是否有可能克隆该repo,回滚到第一个提交执行技巧并推送它(或者这是否意味着git将仍然有所有这些提交的历史? - 又名.6MB).

我的最终目标是基本上找到从git中删除文件夹内容的最佳方法,这样用户就不必下载6MB的东西,仍然可能有其他提交从未触及过模块文件夹(那很漂亮)他们中的所有人都在git的历史中.

我怎样才能做到这一点?

git github rebase git-rebase

284
推荐指数
7
解决办法
9万
查看次数

减少git存储库大小

我试图寻找一个关于减少回购规模的好教程,但没有找到.我如何减少我的repo大小...它大约10 MB,但事情是Heroku只允许50 MB,我不在附近完成开发我的应用程序.

我已经将通常的嫌疑人(日志,供应商,文档等)添加到.gitignore.虽然我最近只添加了.gitignore.

有什么建议?

git git-clean

267
推荐指数
3
解决办法
12万
查看次数

为什么我的git存储库这么大?

145M = .git/objects/pack /

我编写了一个脚本来添加每个提交和提交的差异大小,然后再从每个分支的尖端向后移动.我得到129MB,没有压缩,没有分支机构的相同文件和分支机构之间的共同历史记录.

Git考虑了所有这些因素,所以我期望更小的存储库.那么为什么.git这么大?

我弄完了:

git fsck --full
git gc --prune=today --aggressive
git repack
Run Code Online (Sandbox Code Playgroud)

要回答有多少文件/提交,我有19个分支,每个文件大约有40个文件.287次提交,发现使用:

git log --oneline --all|wc -l
Run Code Online (Sandbox Code Playgroud)

它不应该使用10兆字节来存储有关此信息.

git

131
推荐指数
6
解决办法
8万
查看次数

运行'git gui'时如何跳过"松散对象"弹出窗口

当我运行'git gui'时,我会得到一个弹出窗口

This repository currently has approximately 1500 loose objects.

然后建议压缩数据库.我以前做过这个,它将松散的对象减少到大约250,但这并不会抑制弹出窗口.再次压缩不会改变松散物体的数量.

我们当前的工作流程需要大量使用'rebase',因为我们正在从Perforce过渡,而Perforce仍然是规范的SCM.一旦Git是规范的SCM,我们将定期进行合并,并且应该大大减轻松散的对象问题.

与此同时,我真的想让这个"有用"的弹出窗口消失.

git garbage-collection rebase git-gui git-gc

115
推荐指数
3
解决办法
2万
查看次数

BFG回购清洁剂–替代新鲜克隆

我本打算在存储库中问这个问题,但是SO似乎是一个更合适的问这个问题的地方。

我能够使用BFG Repo Cleaner(很棒的工具,谢谢!)将我们的.git文件夹大小减少了1GB以上,就我们的存储库而言,这是一个巨大的成功。我还没有将裸露的克隆推到远程,因为我担心在了解推入然后不重新克隆的后果之前提出这些更改。

我了解最佳实践指示,当历史以这种方式改变时,最佳解决方案是执行新克隆。但是,我与一支由50多人组成的团队合作,在超过2GB的存储空间和23k的提交中,在我们的架构下,跨团队的协调非常困难。结果,我有一些问题:

  1. 如果我要推送这些更改的引用,而人们将继续使用现有副本而不是创建新的克隆,后果将是什么?
  2. 如果可行,他们是否需要采取其他措施来减轻这些后果,作为其影响的一部分?
  3. 如果您认为删除的斑点来自历史至少一年且最多三年的历史记录,此建议是否会根本改变?
  4. 最后,鉴于新克隆不包括任何未在上游同步的工作,您是否建议将未跟踪分支从一个克隆转移到另一个的最佳方法?如果已经存在执行此操作的Git命令,那么我很想听听您的见解。

再次感谢您创建了这样一个方便的工具,希望我能完成对我的团队项目有用的工作。在此期间,我将继续尝试使用叉子。

git-rewrite-history bfg-repo-cleaner

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

git在添加到.gitignore后是否从版本控制中删除文件?

我不小心把我的Python虚拟环境目录包含venv在我的所有git commit和push活动中.

我刚刚加入venv了我的.gitignore.但我的.git文件夹仍然很大(我假设因为之前的提交和跟踪venv).

我怎么能得到git完全忘记跟踪venv.git再次将我的文件夹缩小到合理的大小,因为它使Heroku推动了一场噩梦.

git

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

Git存储库大小比它应该大

所以我在个人服务器上使用git,我有一个旧的仓库,我需要更新.我删除了一堆旧文件并提交并推动了更改.我在我的服务器上使用Web UI(Gitlist).当我使用这个GUI下载repo作为zip文件时,它的大小正确,大约41MB.然而,当我克隆回购时,由于其中一个./git/objects/pack文件的大小约为900MB ,因此它更接近于演出.

当它真的应该小得多时,为什么回购如此之大?

git

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