diff --git a/fetch.go b/fetch.go
index 410e321..434274e 100644
--- a/fetch.go
+++ b/fetch.go
@@ -121,7 +121,7 @@
 	dst := filepath.Join(vendorDir(), dep.Importpath)
 	src := filepath.Join(wc.Dir(), dep.Path)
 
-	if err := fileutils.Copypath(dst, src); err != nil {
+	if err := fileutils.Copypath(dst, src, true); err != nil {
 		return err
 	}
 
diff --git a/fileutils/fileutils.go b/fileutils/fileutils.go
index 7a3ead3..a4033ba 100644
--- a/fileutils/fileutils.go
+++ b/fileutils/fileutils.go
@@ -10,18 +10,32 @@
 	"strings"
 )
 
-const debugCopypath = false
-const debugCopyfile = false
+// https://golang.org/cmd/go/#hdr-File_types
+var goFileTypes = []string{
+	".go",
+	".c", ".h",
+	".cc", ".cpp", ".cxx", ".hh", ".hpp", ".hxx",
+	".m",
+	".s", ".S",
+	".swig", ".swigcxx",
+	".syso",
+}
 
-// Copypath copies the contents of src to dst, excluding any file or
-// directory that starts with a period.
-func Copypath(dst string, src string) error {
+// Copypath copies the contents of src to dst, excluding any file that is not
+// relevant to the Go compiler.
+func Copypath(dst string, src string, tests bool) error {
 	err := filepath.Walk(src, func(path string, info os.FileInfo, err error) error {
 		if err != nil {
 			return err
 		}
 
-		if strings.HasPrefix(filepath.Base(path), ".") {
+		// https://golang.org/cmd/go/#hdr-Description_of_package_lists
+		name := filepath.Base(path)
+		if strings.HasPrefix(name, ".") ||
+			(strings.HasPrefix(name, "_") && name != "_testdata") ||
+			(!tests && name == "_testdata") ||
+			(!tests && name == "testdata") ||
+			(!tests && strings.HasSuffix(name, "_test.go")) {
 			if info.IsDir() {
 				return filepath.SkipDir
 			}
@@ -32,6 +46,17 @@
 			return nil
 		}
 
+		relevantFile := false
+		for _, ext := range goFileTypes {
+			if strings.HasSuffix(name, ext) {
+				relevantFile = true
+				break
+			}
+		}
+		if !relevantFile {
+			return nil
+		}
+
 		dst := filepath.Join(dst, path[len(src):])
 
 		if info.Mode()&os.ModeSymlink != 0 {
@@ -62,9 +87,6 @@
 		return fmt.Errorf("copyfile: create(%q): %v", dst, err)
 	}
 	defer w.Close()
-	if debugCopyfile {
-		fmt.Printf("copyfile(dst: %v, src: %v)\n", dst, src)
-	}
 	_, err = io.Copy(w, r)
 	return err
 }
@@ -80,9 +102,6 @@
 	if err := os.Symlink(target, dst); err != nil {
 		return fmt.Errorf("copylink: symlink: %v", err)
 	}
-	if debugCopyfile {
-		fmt.Printf("copylink(dst: %v, src: %v, tgt: %s)\n", dst, src, target)
-	}
 	return nil
 }
 
diff --git a/restore.go b/restore.go
index 2765e5f..81d338d 100644
--- a/restore.go
+++ b/restore.go
@@ -116,7 +116,7 @@
 		}
 	}
 
-	if err := fileutils.Copypath(dst, src); err != nil {
+	if err := fileutils.Copypath(dst, src, true); err != nil {
 		return err
 	}
 
diff --git a/update.go b/update.go
index 5c13134..e1f261d 100644
--- a/update.go
+++ b/update.go
@@ -106,7 +106,7 @@
 			dst := filepath.Join(vendorDir(), filepath.FromSlash(dep.Importpath))
 			src := filepath.Join(wc.Dir(), dep.Path)
 
-			if err := fileutils.Copypath(dst, src); err != nil {
+			if err := fileutils.Copypath(dst, src, true); err != nil {
 				return err
 			}
 
