這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
我們有些什麼呢?
Gitlib已經發布了6.0,號稱是企業級的版本了,作為私人git庫的首選,自然越來越多人用
假設 有這樣一個golang 的庫,URL是 http://git.wendal.net/wendal/gofly
如果嘗試執行下面的語句去擷取這個庫的話
go get git.wendal.net/wendal/gofly#會輸出package git.wendal.net/wendal/gofly: unrecognized import path "git.wendal.net/wendal/gofly"
然而,如果我們輸入
go get git.wendal.net/wendal/gofly.git#會輸出fatal: repository 'git.wendal.net/wendal/gofly' does not existpackage git.wendal.net/wendal/gofly.git: exit status 128
為什麼呢?貌似go get不支援自訂的庫地址啊(git的)
且看 $GOROOT/src/cmd/go/vcs.go裡面的一段代碼
// General syntax for any server. { re: `^(?P(?P([a-z0-9.\-]+\.)+[a-z0-9.\-]+(:[0-9]+)?/[A-Za-z0-9_.\-/]*?)\.(?Pbzr|git|hg|svn))(/[A-Za-z0-9_.\-]+)*$`, ping: true, },
可以看到, 對於未知的庫地址(非github/Google Code/Bitbucket/Launchpad),都按這裡的配置進行設定
按上述的Regex,輸入git.wendal.net/wendal/gofly可以得到
root = git.wendal.net/wendal/goflyrepo = git.wendal.net/wendal/goflyvcs = git
What? 當使用git進行clone的時候,其實就執行了
git clone $repo $GOPATH/src/$root#展開之後(假設GOPATH=/opt/gopath)git clone git.wendal.net/wendal/gofly /opt/gopath/src/git.wendal.net/wendal/gofly
git庫的地址當成本地路徑了,不出錯才怪呢
怎麼解決呢? 添加自訂的庫地址,跟github類似
首先,拷貝一份github的配置
// Github { prefix: "github.com/", re: `^(?Pgithub\.com/[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+)(/[A-Za-z0-9_.\-]+)*$`, vcs: "git", repo: "https://{root}", check: noVCSSuffix, },
改成
// git.xwoods.org { prefix: "git.wendal.net/", re: `^(?Pgit\.wendal\.net/(?P
.[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+))(/[A-Za-z0-9_.\-]+)*))$`, ping: false, repo: "git@git.wendal.net:{p}.git", vcs : "git", },
注意 re和repo,做了特別處理哦,多一個p變數, 這樣repo就把湊成標準的ssh式git地址,自動使用密鑰(哈哈,私人庫嘛)
最後,還需要把golang編譯
# linux/mac 下$GOROOT/src/make.bash#windows下cd %GOROOT%\src\cmd\gogo install