Jeff Carr b5d3072729 | ||
---|---|---|
.gitignore | ||
LICENSE | ||
Makefile | ||
README.md | ||
argv.go | ||
control | ||
main.go | ||
readWorkFile.go |
README.md
go-clone
In 2018, gohack was written for the same reasons this tool was written. gohack has a good justification for this kind of tool.
Install go-glone
go install go.wit.com/apps/go-clone@latest
go-glone itself
This will download the sources for go-clone:
go-clone go.wit.com/apps/go-clone
go-clone works in ~/go/src unless it finds a go.work file in a parent dir If you are using a go.work file, this will autocreate one. The old one is saved as go.work.last
go-clone --auto-work go.wit.com/apps/go-clone
Or to recursively clone all the build dependancies:
go-clone --recursive go.wit.com/apps/go-clone
debian packages
Debian packages are at mirrors.wit.com
TODO:
- use protobuf
- move edge case mappings to a config file
these are notes from Gohack: mutable checkouts of Go module dependencies
The new Go module system is awesome. It ensures repeatable, deterministic
builds of Go code. External module code is cached locally in a read-only
directory, which is great for reproducibility. But if you're used to the
global mutable namespace that is $GOPATH
, there's an obvious question:
what if I'm hacking on my program and I want to change one of those
external modules?
You might want to put a sneaky log.Printf
statement to find out how
some internal data structure works, or perhaps try out a bug fix to see
if it solves your latest problem. But since all those external modules
are in read-only directories, it's hard to change them. And you really
don't want to change them anyway, because that will break the integrity
checking that the Go tool does when building.
Luckily the modules system provides a way around this: you can add a
replace
statement to the go.mod
file which substitutes the contents
of a directory holding a module for the readonly cached copy. You can of
course do this manually, but gohack aims to make this process pain-free.