Manage repos in varying version control systems with ease through a common interface.
Quick usage:
remote := "https://github.com/Masterminds/vcs"
local, _ := ioutil.TempDir("", "go-vcs")
repo, err := NewRepo(remote, local)
In this case NewRepo
will detect the VCS is Git and return a GitRepo
. All of
the repos implement the Repo
interface with a common set of features between
them.
Git, SVN, Bazaar (Bzr), and Mercurial (Hg) are currently supported. They each
have their own type (e.g., GitRepo
) that follow a simple naming pattern. Each
type implements the Repo
interface and has a constructor (e.g., NewGitRepo
).
The constructors have the same signature as NewRepo
.
- Clone or checkout a repository depending on the version control system.
- Pull updates to a repository.
- Get the currently checked out commit id.
- Checkout a commit id, branch, or tag (depending on the availability in the VCS).
- Get a list of tags and branches in the VCS.
- Check if a string value is a valid reference within the VCS.
- More...
For more details see the documentation.
The package golang.org/x/tools/go/vcs
provides some valuable functionality
for working with packages in repositories in varying source control management
systems. That package, while useful and well tested, is designed with a specific
purpose in mind. Our uses went beyond the scope of that package. To implement
our scope we built a package that went beyond the functionality and scope
of golang.org/x/tools/go/vcs
.