# begot


Begot is a Go dependency manager and build tool. It's similar to tools in the
same space like [Glide] and [Grapnel], and steals a few ideas from Blaze and
Bundler as well.


**The main points:**

- A dependency file describes the dependencies of a project and can pin them to
  specific branches, tags, or commits.
- Instead of copying dependencies into a project repo, begot keeps them in a
  local cache that it manages.
- Users are encouraged to use free-form import paths instead of
  code-location-based import paths.
- Repo aliases make it easy to use forks of dependencies without any manual
  updating of import paths, even indirect dependencies.
- It works great with private repositories on GitHub or elsewhere that require
  ssh authentication.
- Begot acts as a wrapper for the go command.

**Here's a little more detail:**

Given a `Begotten` file with contents:


`begot update` will fetch the master branch of that repo into its cache (stored
in `~/.cache/begot`) and create a `Begotten.lock` file that contains the head
commit id.

Then, `begot build` will ensure that all dependencies refered to by
`Begotten.lock` are present in the cache and reset to the right version, create
a special dependency workspace with symlinks to the cached repos, and run the go
command with a special `GOPATH`. Your Go code can `import "gorilla/mux"`.

Another developer can clone a repo with a `Begotten.lock` file and run `begot
fetch` to fetch all the dependencies without changing any pinned versions.

Begot rewrites imports within its cache to make things work right, but you never
see the rewrites and they never get committed anywhere.

If your dependencies have dependencies themselves, everything will work
transitively. If your dependencies use begot themselves, it'll check to make
sure all the locked versions agree and raise an error if they don't.

**For more details** and discussion of motivations and tradeoffs, see

Begot is released under a simplified BSD license.

Imports 1 package(s) ΒΆ