How to remove the shallow clone warning from 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.
Solution 1:
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:
- 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.)- 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.
Solution 2:
Under the cover Homebrew uses Git for version control, and a shallow clone is one that doesn't contain all history revisions/commits, for efficiency and data volume.
Actually, in most cases the warning can be safely ignored, as the formulae being searched for probably isn't available.
But if you're really looking for some formulae which might existed in the past, Just do what it suggests:
To get complete history run:
git -C "$(brew --repo homebrew/core)" fetch --unshallow
This way Homebrew could search for formula that existed only in the past but removed at some point.
Solution 3:
somehow the unshallow is not working for me, I wait like 10 mins but nothing show up, even with -v
option.
Just found one possible solution that might working(at least working for me).
You can remove the repository and clone again to get latest one.
cd /usr/local/Homebrew/Library/Taps/homebrew/
rm -rf homebrew-core
git clone https://github.com/Homebrew/homebrew-core.git
same command for homebrew-cask if you need to update that too
all the credits belong to this answer
Solution 4:
I would advise against unshallowing the clone because it cramps disk space, makes the lookups slower and enables you only to install obsolete or unmaintaned applications.
There is currently no way to silence this warning. It was proposed in this Github issue but then ignored.
The function deleted_reason
which prints the message contains a silent
argument but afaik there is no way to use to use something like silent
from the CLI commands which later call deleted_reason
.
Solution 5:
I have update repo through git pull --unshallow
Update homebrew-core
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core
git pull --unshallow
Update homebrew-cask
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask
git pull --unshallow