diff --git a/git/attribs.go b/git/attribs.go index eef982d8..5687f5c9 100644 --- a/git/attribs.go +++ b/git/attribs.go @@ -159,7 +159,7 @@ func GetAttributeFilter(workingDir, gitDir string) *filepathfilter.Filter { for _, path := range paths { // Convert all separators to `/` before creating a pattern to // avoid characters being escaped in situations like `subtree\*.md` - patterns = append(patterns, filepathfilter.NewPattern(filepath.ToSlash(path.Path))) + patterns = append(patterns, filepathfilter.NewPattern(filepath.ToSlash(path.Path), filepathfilter.Strict(true))) } return filepathfilter.NewFromPatterns(patterns, nil) diff --git a/t/t-migrate-import-no-rewrite.sh b/t/t-migrate-import-no-rewrite.sh index a876d663..c350a9eb 100755 --- a/t/t-migrate-import-no-rewrite.sh +++ b/t/t-migrate-import-no-rewrite.sh @@ -225,3 +225,41 @@ begin_test "migrate import --no-rewrite (with empty commit message)" fi ) end_test + +begin_test "migrate import --no-rewrite (strict .gitattributes)" +( + set -e + + reponame="$(basename "$0" ".sh")-strict-match" + clone_repo "$reponame" repo-strict-match + + mkdir -p major-oak/mainst/.yarn-offline-mirror/ + mkdir -p major-oak/major-oak/frontend/.yarn-offline-mirror/ + foo_contents="foo" + foo_oid=$(calc_oid "$foo_contents") + bar_contents="bar" + bar_oid=$(calc_oid "$bar_contents") + printf "$foo_contents" > major-oak/mainst/.yarn-offline-mirror/typescript-3.4.3.tgz + printf "$bar_contents" > major-oak/major-oak/frontend/.yarn-offline-mirror/typescript-2.9.2.tgz + git add . + git commit -m 'Initial import' + + cat >.gitattributes <