Skip to content

neo migrate

Adopt every git checkout under a directory — “move my projects here”.

neo adopt for a whole projects directory: one repository created and pushed per checkout found, each becoming that checkout’s new origin with the old remote preserved under --old-remote.

Discovery skips dotfile directories and never follows symlinks, and stops at the first checkout on a path — a clone vendored inside another repository is not adopted separately.

A checkout that fails is reported and the scan continues; because adopt rewrites local remotes only after its pushes succeed, that checkout is left untouched and re-running is the retry. Exit status is non-zero if anything failed.

Start with --dry-run on a directory you have not migrated before.

neo migrate [OPTIONS] [DIR]
Option Value Required Default Env Values Description
<DIR> no . Directory holding the checkouts. Defaults to the current directory
--depth <DEPTH> no 1 How many directory levels below DIR to search. 1 = immediate children, which is the “~/projects/<repo>” layout; raise it for “~/projects/<group>/<repo>”
--owner <OWNER> no Owner for every repository created. Defaults to your own handle; name an organisation to migrate into it instead
--visibility <VISIBILITY> no private public, internal, private Visibility applied ONLY to repositories that must be created. Defaults to private
--old-remote <OLD_REMOTE> no github Name each checkout’s current origin is renamed to
--mirror-back no Also register a push mirror back to each old GitHub home
--dry-run no Print the plan for every checkout and change nothing
--yes no Accept a non-public target host without naming it via --host
--force no Pass --force through to each adopt (see neo adopt --help)