相关疑难解决方法(0)

使用重写的Git repo历史记录更新开发团队,删除大文件

我有一个git repo,里面有一些非常大的二进制文件.我不再需要它们,我不关心是否能够检查早期提交的文件.因此,为了减少repo大小,我想从历史中删除二进制文件.

在网络搜索之后,我得出结论,我最好的(仅?)选项是使用git-filter-branch:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch big_1.zip big_2.zip etc.zip' HEAD
Run Code Online (Sandbox Code Playgroud)

到目前为止,这似乎是一个好方法吗?

假设答案是肯定的,我还有另外一个问题需要解决.该git的手册中有这样的警告:

警告!重写的历史将具有所有对象的不同对象名称,并且不会与原始分支会聚.您将无法在原始分支的顶部轻松推送和分发重写的分支.如果您不知道完整的含义,请不要使用此命令,并且无论如何都要避免使用它,如果简单的单个提交就足以解决您的问题.(有关重写已发布历史记录的详细信息,请参阅git-rebase(1)中的"从上游重新恢复"部分.)

我们的服务器上有一个远程仓库.每个开发人员都会推动并从中拉出.基于上面的警告(以及我对git-filter-branch工作原理的理解),我认为我不能git-filter-branch在本地副本上运行然后推送更改.

所以,我暂时计划完成以下步骤:

  1. 告诉我的所有开发人员提交,推送和停止工作.
  2. 登录服务器并在中央存储库上运行过滤器.
  3. 让所有人删除旧副本并从服务器再次克隆.

这听起来不错吗?这是最好的解决方案吗?

git project-planning git-filter-branch git-rewrite-history

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

如何从Git历史记录中删除文件?

我之前添加的信息必须是私有的,从项目中删除,不是问题,但也必须从历史中删除.

我使用Git和Github(私人账户).


这个线程上显示类似的东西,但这里是一个旧文件,添加到一个功能分支,该分支合并到一个开发分支,最后合并到master,因为这样做了很多更改.所以它不一样,所需要的是更改历史记录,并隐藏该文件以保护隐私.

git github

31
推荐指数
7
解决办法
1万
查看次数

Github - 读取边带数据包时意外断开连接

我有一个很有趣的问题。我尝试通过 bash 将一些项目发送到 repo,最近发送时出现问题。

Enumerating objects: 27, done. Counting objects: 100% (27/27), done. Delta compression using up to 16 threads Compressing objects: 100% (24/24), done. Writing objects: 100% (25/25), 187.79 KiB | 9.39 MiB/s, done. Total 25 (delta 1), reused 0 (delta 0), pack-reused 0 send-pack: unexpected disconnect while reading sideband packet fatal: the remote end hung up unexpectedly

有趣的是,我可以提前 10 分钟发送它,没有任何问题。

我尝试获取新的 repo,创建新文件,重新安装 git,git config --global http.postBuffer 524288000还有更大的数字,还有 https.postBuffer 等等。也安装桌面版同样的问题进来。

我遇到的问题主要是 React 应用程序。

有人知道解决方案吗?会出什么问题?

javascript github reactjs

25
推荐指数
10
解决办法
2万
查看次数

如何找出哪些文件占用了git repo中最多的空间?

我需要让回购更小.我想我可以通过从git历史记录中删除有问题的二进制文件来缩小它:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch BigFile'
Run Code Online (Sandbox Code Playgroud)

然后释放对象:

rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --aggressive --prune=now
Run Code Online (Sandbox Code Playgroud)

(如果这些命令错误,请随意发表评论.)

问题:如何识别那些大文件,以便我可以评估是否从git历史中删除它们?他们很可能不再在工作树中 - 它们已被删除,并且可能还没有跟踪:

git rm --cached BigFile
Run Code Online (Sandbox Code Playgroud)

git

24
推荐指数
3
解决办法
2814
查看次数

Github远程推包尺寸超出

我是Git的新手,有一个相当大的项目,我想推送到Github上的远程仓库(Repo B).最初的项目也在Github上,但来自不同的回购(Repo A).在我可以在Repo B上设置项目之前,我必须对Repo A中的文件进行一些更改.我已经设置了遥控器,ssh键等,并且在将代码库推送到Repo B时遇到了问题.

我总是得到以下错误:

$ git push <remote_repo_name> master
Enter passphrase for key '/c/ssh/.ssh/id_rsa':
Counting objects: 146106, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (35519/35519), done.
fatal: pack exceeds maximum allowed size00 GiB | 154 KiB/s
fatal: sha1 file '<stdout>' write error: Invalid arguments
error: failed to push some refs to 'git@github.com:<repo>.git
Run Code Online (Sandbox Code Playgroud)

我在本地gitconfig中更改了以下设置

git config pack.packSizeLimit 1g
git config pack.windowMemory 1g
Run Code Online (Sandbox Code Playgroud)

...并运行git gc(我看到重新组织了包,以便每个包保持在1GB的包装内).这不起作用,我得到上面看到的错误.

我试图降低每包的尺寸....

git config pack.packSizeLimit 500m
git config pack.windowMemory 500m
Run Code Online (Sandbox Code Playgroud)

...并运行git …

git github git-push

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

我可以从Git仓库中删除初始提交吗?

似乎我最初的提交占用了90%的空间,因为它意外地在其中包含了大量的媒体文件.有没有办法从本地和远程回购中删除第一个提交,或者我应该留下这个?

git

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

我可以通过压缩提交来节省git仓库中的空间吗?

如果我有一个最初的一个Git仓库提交其次是改变100个文件,每一个只是做一个改变一个文件100名个小提交,我可以通过挤压节省空间的100承诺变成一个大的100文件改变的承诺?例如:

$ git checkout master
Already on branch 'master'.
$ git reset --soft HEAD~100 && git commit -m 'squash last 100 commits'
Run Code Online (Sandbox Code Playgroud)

将使用master与旧提交具有相同内容的新提交替换分支的提示,但将100个先前提交保留在其历史记录之外.这节省多少空间?

git

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

git:如何从 git 历史记录中删除当前不存在的*所有*文件?

我看过几篇关于如何从所有 git 历史记录中删除单个文件的文章和问题。示例:如何从 Git 存储库的提交历史记录中删除/删除大文件?

\n

我想要做的是删除当前不存在于 master 分支头部的所有文件。

\n

我的用例是,我small从一个整体存储库(称为 )中分离出一个较小的存储库(称为monolith)。我想在创建时保留 git 历史记录small,但仅保留相关的git 历史记录。

\n

首先,我small在 GitHub 上创建了一个新的存储库。然后,在我的笔记本电脑上,我将其作为远程名称添加origin-small到我的本地monolith存储库中,并将 master 分支的当前状态推monolith送到origin-small

\n

origin-small然后,我从 中删除了远程monolith,更改了目录,并small从 GitHub 进行了克隆。Voil\xc3\xa0,我有一份原始存储库的副本,monolith及其完整的历史记录。

\n

但是,历史上有大量文件small不再相关,并且它们使存储库变得臃肿。

\n

我想做的是:

\n
    \n
  1. 从 中删除所有不需要的文件small
  2. \n
  3. 运行命令来清除我刚刚删除的文件的整个 git 历史记录。
  4. \n
\n

有没有办法用一个命令来做到这一点?或者我是否需要git filter-branch为每个要删除的文件/目录运行一次?

\n

git

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

过滤存储库时如何保留标记?

有没有办法以自动方式将存储库及其所有标记移动到另一个存储库的子目录中?

出于原因,项目被拆分为多个存储库.现在我们看到这不是一个热门的想法,并希望再次将它重新组合在一起.考虑了子模块,但它们实际上是一个项目,我们需要在它们之间移动大量文件.

假设我们有存储库A,B和C.我们想要一个项目,每个项目都作为子目录:

project/
    A/
    B/
    C/
Run Code Online (Sandbox Code Playgroud)

这可以通过以下方式实现git-filter-branch --tree-filter.做完了,没问题.它甚至也正确地分支,这是一个令人愉快的惊喜.

麻烦的是,A,B和C都有标签,它们都需要转换.

这可以自动化吗?

git git-filter-branch

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

从git历史记录中删除已删除的文件夹

如何删除已从git历史记录中删除的文件夹?

在我的git存储库中,我有一个名为/foo(1.2GB大小)的文件夹.我删除了beause 的文件夹foo,rm -rf /foo我不再需要了.经过许多其他提交,我想.为什么我的远程回购如此之大......我忘了做git rm --cached ...而不是做rm -rf ....我现在如何从git历史记录中删除该文件夹?

git rm --cached /foo 将无法正常工作,因为该文件夹已在先前的提交中删除.

git

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