return nil, "", err
        }
 
+       if err := ensureGitAttributes(r.dir); err != nil {
+               return nil, "", err
+       }
+
        // Incredibly, git produces different archives depending on whether
        // it is running on a Windows system or not, in an attempt to normalize
        // text file line endings. Setting -c core.autocrlf=input means only
 
        return ioutil.NopCloser(bytes.NewReader(archive)), "", nil
 }
+
+// ensureGitAttributes makes sure export-subst and export-ignore features are
+// disabled for this repo. This is intended to be run prior to running git
+// archive so that zip files are generated that produce consistent ziphashes
+// for a given revision, independent of variables such as git version and the
+// size of the repo.
+//
+// See: https://github.com/golang/go/issues/27153
+func ensureGitAttributes(repoDir string) (err error) {
+       const attr = "\n* -export-subst -export-ignore\n"
+
+       d := repoDir + "/info"
+       p := d + "/attributes"
+
+       if err := os.MkdirAll(d, 0755); err != nil {
+               return err
+       }
+
+       f, err := os.OpenFile(p, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666)
+       if err != nil {
+               return err
+       }
+       defer func() {
+               closeErr := f.Close()
+               if closeErr != nil {
+                       err = closeErr
+               }
+       }()
+
+       b, err := ioutil.ReadAll(f)
+       if err != nil {
+               return err
+       }
+       if !bytes.HasSuffix(b, []byte(attr)) {
+               _, err := f.WriteString(attr)
+               return err
+       }
+
+       return nil
+}
 
--- /dev/null
+env GO111MODULE=on
+env GOPROXY=
+
+# Testing that git export-subst is disabled
+[!net] skip
+[!exec:git] skip
+go build
+
+-- x.go --
+package x
+
+import _ "github.com/jasonkeene/export-subst"
+
+-- go.mod --
+module x
+
+require github.com/jasonkeene/export-subst v0.0.0-20180927204031-5845945ec626
+
+-- go.sum --
+github.com/jasonkeene/export-subst v0.0.0-20180927204031-5845945ec626 h1:AUkXi/xFnm7lH2pgtvVkGb7buRn1ywFHw+xDpZ29Rz0=
+github.com/jasonkeene/export-subst v0.0.0-20180927204031-5845945ec626/go.mod h1:DwJXqVtrgrQkv3Giuf2Jh4YyubVe7y41S1eOIaysTJw=