Sometimes, it is convenient to "switch" (temporarily, or sometimes permanently)
to a different manifest (either through repo init, or switching the branch of
the manifest project in .repo) instead of repo init-ing and repo sync-ing in a
new path and downloading a bunch of stuff (often, duplicated work and space if
there is a large overlap in projects in the old and new manifests).
However, even if repo deletes the working directory of the git projects outside
of the .repo folders for projects no longer listed in the manifest, repo keeps
all of the project and project object folders in .repo intact, taking up space.
Now I understand this is by design, it not only will save effort if you "switch
back" to the original manifest, but it also preserves your local branches for
projects even if you don't have the project in the new manifest, so you don't
lose work.
However, often times, there are no "local" branches I care about, and I don't
need those old project files anymore. Thus, most of the stuff left behind is
just "taking up space", and it isn't easy to clean it up by hand.
However, the use case of preserving local branches is also very important, so I
would propose a command that is something like.
repo gc (or repo cleanup or repo purge-stale-projects, if repo gc would be too
easily confused with repo forall -c git gc).
It would removes all project and project-objects folders in .repo for projects
not in the current manifest ONLY IF that git project has no local branches.
Maybe a command line flag to control whether a repo prune is done ahead of time
(to remove "stale" local branches that have already been merged in), with the
repo prune step on by default.
I think this would help save space if you have switched manifests, but still
not cause any work to be lost in the case of you having "uncommitted" local
branches.
Original issue reported on code.google.com by csyo...@google.com on 23 Oct 2014 at 11:37
Original issue reported on code.google.com by
csyo...@google.com
on 23 Oct 2014 at 11:37