cmd/go: link to the FAQ for errors that indicate private VCS repos.

Updates #25982

Change-Id: I5a284e3844e944f9bfae31fa65b242060d4139c7
Reviewed-on: https://go-review.googlesource.com/c/150777
Run-TryBot: Julie Qiu <julie@golang.org>
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
diff --git a/src/cmd/go/internal/modfetch/codehost/codehost.go b/src/cmd/go/internal/modfetch/codehost/codehost.go
index 988504f..6c17f78 100644
--- a/src/cmd/go/internal/modfetch/codehost/codehost.go
+++ b/src/cmd/go/internal/modfetch/codehost/codehost.go
@@ -196,9 +196,10 @@
 }
 
 type RunError struct {
-	Cmd    string
-	Err    error
-	Stderr []byte
+	Cmd      string
+	Err      error
+	Stderr   []byte
+	HelpText string
 }
 
 func (e *RunError) Error() string {
@@ -207,6 +208,9 @@
 	if len(stderr) > 0 {
 		text += ":\n\t" + strings.ReplaceAll(string(stderr), "\n", "\n\t")
 	}
+	if len(e.HelpText) > 0 {
+		text += "\n" + e.HelpText
+	}
 	return text
 }
 
diff --git a/src/cmd/go/internal/modfetch/codehost/git.go b/src/cmd/go/internal/modfetch/codehost/git.go
index 7b37757..588e749 100644
--- a/src/cmd/go/internal/modfetch/codehost/git.go
+++ b/src/cmd/go/internal/modfetch/codehost/git.go
@@ -164,6 +164,11 @@
 	// Most of the time we only care about tags but sometimes we care about heads too.
 	out, err := Run(r.dir, "git", "ls-remote", "-q", r.remote)
 	if err != nil {
+		if rerr, ok := err.(*RunError); ok {
+			if bytes.Contains(rerr.Stderr, []byte("fatal: could not read Username")) {
+				rerr.HelpText = "If this is a private repository, see https://golang.org/doc/faq#git_https for additional information."
+			}
+		}
 		r.refsErr = err
 		return
 	}
diff --git a/src/cmd/go/testdata/script/mod_get_private_vcs.txt b/src/cmd/go/testdata/script/mod_get_private_vcs.txt
new file mode 100644
index 0000000..86d78e8
--- /dev/null
+++ b/src/cmd/go/testdata/script/mod_get_private_vcs.txt
@@ -0,0 +1,10 @@
+env GO111MODULE=on
+
+# Testing stderr for git ls-remote; turn off proxy.
+[!net] skip
+[!exec:git] skip
+env GOPROXY=
+
+! go get github.com/golang/nonexist
+stderr 'If this is a private repository, see https://golang.org/doc/faq#git_https for additional information.'
+! stdout .