Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remove the shallow clone warning from HomeBrew

Tags:

git

homebrew

➜  ~ brew info test  Error: No available formula with the name "test"  ==> Searching for a previously deleted formula... Warning: homebrew/core is shallow clone. To get complete history run:   git -C "$(brew --repo homebrew/core)" fetch --unshallow  Error: No previously deleted formula found. 

I have modified the git remote address to mirror address of homebrew before. Maybe it's relevant to this but I don't know.

like image 911
lucky yang Avatar asked Aug 20 '17 13:08

lucky yang


People also ask

What is a shallow clone?

A shallow clone is a repository created by limiting the depth of the history that is cloned from an original repository. The depth of the cloned repository, which is selected when the cloning operation is performed, is defined as the number of total commits that the linear history of the repository will contain.


1 Answers

As of Oct 2020 Homebrew no longer creates shallow clones when being installed, and as of Dec 2020 updating existing shallow clones is not allowed either.

(This makes the original question about silencing the warning moot).


If a shallow clone is configured, a message containing text like the below will be shown:

 Error:   homebrew-core is a shallow clone.   homebrew-cask is a shallow clone. To `brew update`, first run:   git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow   git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask fetch --unshallow 

It is now required to perform the unshallow process by running the git command(s) in the error message.

Note: This process may take a long time to complete without providing feedback.


For some details about the motivation for this change, see this discussion on Homebrew's GitHub page, specifically:

There are two major downsides of shallow cloning:

  1. It places a massive computation burden on GitHub's servers, which have to dynamically compute a fresh delta between what you have and the latest commit, on every brew update. (With full clones, GitHub can simply send you all the commits that happened after your last pull, and your local Git client takes care of the rest.)
  2. Because of [1], it makes it far more likely that GitHub will rate-limit Homebrew operations, which will make it suck for everyone.

--gromgit Dec 5, 2020, 12:29 AM EST

And also this additional text added to the error message:

This restriction has been made on GitHub's request because updating shallow clones is an extremely expensive operation due to the tree layout and traffic of Homebrew/homebrew-core and Homebrew/homebrew-cask.

like image 141
Grisha Levit Avatar answered Sep 25 '22 14:09

Grisha Levit