Why
If you write some Golang code, from my point of view, one of biggest pitfall of this language is dependency management.
At the beginning, get library directly from git repository seems a good idea, but between package rules, versions, your pull requests, it becomes a mess quickly.
Some sources on this problem:
Article: Forking Golang repositories on GitHub and managing the import path
StackOverflow : Using forked package import in Go
My workaround
Then, why not automate this procedure ?
In your .bashrc add:
function gofork() {
if [ $# -ne 2 ] || [ -z "$1" ] || [ -z "$2" ]; then
echo 'Usage: gofork yourFork originalModule'
echo 'Example: golang github.com/YourName/go-contrib github.com/heirko/go-contrib'
return
fi
echo "Go get fork $1 and replace $2 in GOPATH: $GOPATH"
go get $1
go get $2
currentDir=$PWD
cd $GOPATH/src/$1
remote1=$(git config --get remote.origin.url)
cd $GOPATH/src/$2
remote2=$(git config --get remote.origin.url)
cd $currentDir
rm -rf $GOPATH/src/$2
mv $GOPATH/src/$1 $GOPATH/src/$2
cd $GOPATH/src/$2
git remote add their $remote2
echo Now in $GOPATH/src/$2 origin remote is $remote1
echo And in $GOPATH/src/$2 their remote is $remote2
cd $currentDir
}
export -f gofork
This command do
- a ‘go get’ on source and fork repositories
- extract remote urls
- replace source code by fork
- add source remote to your fork repository in case you want pull from source
You can call this script from command line or directly from a script like this:
gofork github.com/heralight/baloo gopkg.in/h2non/baloo.v2