A template repository cloning tool with support for private GitHub repos.
npm install create-clonecreate-clone is a template repository scaffolding tool that creates copies of git repositories with support for private repos. It taps into the compressed tarball of a repository to quickly pull down a copy without all that extra git cruft.
- 🎏 Supports GitHub repos, GitHub gists, GitLab and Bitbucket
- 💡 Understands GitHub shorthand (rdmurphy/my-cool-template) for referring to repositories
- 🔐 With proper credentials in place can clone private repositories on GitHub, GitLab and Bitbucket
- Setup
- Usage
- GitHub
- GitLab
- Bitbucket
- Gist
- Private repos
- GitHub
- GitLab
- Bitbucket
- What makes this different from degit?
- License
create-clone requires at least Node 10 to run.
This library expects to be used in a global context and makes the most sense when installed globally.
``sh`
npm install --global create-cloneor
yarn global add create-clone
This also means it works great when paired with npx.
`sh`
npx create-clone
However! create-clone's unique name gives it another super power — you can use a special feature of npm init and yarn create.
`sh`
npm init clone or
yarn create clone
This is most of the reason this library exists. 😶
create-clone works any git host URLs that hosted-git-info supports. By default the copy of the repository is output into your current working directory. A path to a different directory can be provided as the second parameter and will be created if necessary.
`shThe contents of the repository will be copied into the current directory
create-clone user/repository
By default
create-clone will stop and not touch a target directory that already contains files, but this can be overriden with --force.`sh
I already have something in the "my-old-project" directory, but I don't care
create-clone user/repository my-old-project --force
`$3
`sh
shortcuts only available to GitHub
create-clone user/repository
create-clone user/repository#branchcreate-clone github:user/repository
create-clone github:user/repository.git
create-clone github:user/repository#branch
create-clone github:user/repository.git#branch
github.com and www.github.com are both supported
create-clone https://github.com/user/repository
create-clone https://github.com/user/repository.git
create-clone https://github.com/user/repository#branch
create-clone https://github.com/user/repository.git#branch
create-clone git@github.com:user/repository
create-clone git@github.com:user/repository.git
create-clone git@github.com:user/repository#branch
create-clone git@github.com:user/repository.git#branch
`$3
`sh
create-clone gitlab:user/repository
create-clone gitlab:user/repository.git
create-clone gitlab:user/repository#branch
create-clone gitlab:user/repository.git#branchgitlab.com and www.gitlab.com are both supported
create-clone https://gitlab.com/user/repository
create-clone https://gitlab.com/user/repository.git
create-clone https://gitlab.com/user/repository#branch
create-clone https://gitlab.com/user/repository.git#branch
create-clone git@gitlab.com:user/repository
create-clone git@gitlab.com:user/repository.git
create-clone git@gitlab.com:user/repository#branch
create-clone git@gitlab.com:user/repository.git#branch
`$3
`sh
create-clone bitbucket:user/repository
create-clone bitbucket:user/repository.git
create-clone bitbucket:user/repository#branch
create-clone bitbucket:user/repository.git#branchbitbucket.org and www.bitbucket.org are both supported
create-clone https://bitbucket.org/user/repository
create-clone https://bitbucket.org/user/repository.git
create-clone https://bitbucket.org/user/repository#branch
create-clone https://bitbucket.org/user/repository.git#branch
create-clone git@bitbucket.org:user/repository
create-clone git@bitbucket.org:user/repository.git
create-clone git@bitbucket.org:user/repository#branch
create-clone git@bitbucket.org:user/repository.git#branch
`$3
`sh
create-clone gist:user/hash
create-clone gist:user/hash.git
create-clone gist:user/hash#branch
create-clone gist:user/hash.git#branchcreate-clone git@gist.github.com:hash.git
create-clone git+https://gist.github.com:hash.git
create-clone git+https://gist.github.com:hash.git
create-clone https://gist.github.com/user/hash
create-clone https://gist.github.com/user/hash.git
create-clone https://gist.github.com/user/hash#branch
create-clone https://gist.github.com/user/hash.git#branch
create-clone git@gist.github.com:user/hash
create-clone git@gist.github.com:user/hash.git
create-clone git@gist.github.com:user/hash#branch
create-clone git@gist.github.com:user/hash.git#branch
`Private repos
GitHub, GitLab and Bitbucket all have varying methods for authenticating against their services, so each one needs slightly different permissions and keys.
> Fun fact — Private GitHub gists are already supported without any additional authentication because they're only "private" as long as no one else has the URL. This is a documented feature!
$3
create-clone requires a GitHub personal access token with read access for repositories and/or gists. Once you have this token, it needs to be available in your environment at GITHUB_TOKEN.In your
.bashrc/.zshrc/preferred shell config:`sh
export GITHUB_TOKEN=
`create-clone will check for this environment variable when attempting to clone a GitHub repository or gist and include it as an authorization header in the request. create-clone will be able to clone any private GitHub repo your account can access.$3
GitLab also has personal access tokens, but because access to the archive of a private repository is only available via the GitLab API, your token needs to be given the scope of
api access, _not_ read_repository. Once you have this token, it needs to be available in your environment at GITLAB_TOKEN.In your
.bashrc/.zshrc/preferred shell config:`sh
export GITLAB_TOKEN=
`create-clone will check for this environment variable when attempting to clone a GitLab repository and include it as an authorization header in the request. create-clone will be able to clone any private GitLab repo your account can access.$3
This is the funky one. Bitbucket does not have the equivalent of a personal access token, so we need to use what it calls an app password. The _only_ permission your app password needs is
Repositories -> Read. However, because we are using what's essentially a single-purpose password, we also need to include your Bitbucket username as part of the request. To accomplish this, we need to set up two environmental variables: BITBUCKET_USER for your username, and BITBUCKET_TOKEN for your app password.In your
.bashrc/.zshrc/preferred shell config:`sh
export BITBUCKET_USER=
export BITBUCKET_TOKEN=
`create-clone will check for this environment variable when attempting to clone a Bitbucket repository and include it as the user and password of the request. create-clone will be able to clone any private Bitbucket repo your account can access.What makes this different from
degit?Honestly? Not a whole lot. This was mostly me wanting to be able to do something cool like
npm init clone /yarn create clone .The most notable difference is
create-clone does not have a caching layer like degit does. In practice I've not found that to be a major issue, but it may be a big deal for some folks! degit` also has a cool actions framework layered on top.MIT