cmd/go/internal/modfetch/gitrepo: fix problem with Git LFS

Git LFS would prefer we use "git fetch origin" instead of "git fetch <URL>".
Do that.

Abandon any preexisting git checkouts by changing the hash key
from git1 to git2.

Fixes golang/go#25605.

Change-Id: I2152376452cc18d97150f37d6ec0a4a75e15d83d
Reviewed-on: https://go-review.googlesource.com/116758
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
diff --git a/vendor/cmd/go/internal/modfetch/gitrepo/fetch.go b/vendor/cmd/go/internal/modfetch/gitrepo/fetch.go
index 7212e8f..49c9a5b 100644
--- a/vendor/cmd/go/internal/modfetch/gitrepo/fetch.go
+++ b/vendor/cmd/go/internal/modfetch/gitrepo/fetch.go
@@ -34,7 +34,7 @@
 	return newRepo(remote, root, true)
 }
 
-const workDirType = "git1"
+const workDirType = "git2"
 
 func newRepo(remote, root string, localOK bool) (codehost.Repo, error) {
 	r := &repo{remote: remote, root: root, canArchive: true}
@@ -47,8 +47,18 @@
 		r.dir = dir
 		if _, err := os.Stat(filepath.Join(dir, "objects")); err != nil {
 			if _, err := codehost.Run(dir, "git", "init", "--bare"); err != nil {
+				os.RemoveAll(dir)
 				return nil, err
 			}
+			// We could just say git fetch https://whatever later,
+			// but this lets us say git fetch origin instead, which
+			// is a little nicer. More importantly, using a named remote
+			// avoids a problem with Git LFS. See golang.org/issue/25605.
+			if _, err := codehost.Run(dir, "git", "remote", "add", "origin", r.remote); err != nil {
+				os.RemoveAll(dir)
+				return nil, err
+			}
+			r.remote = "origin"
 		}
 	} else {
 		// Local path.