# Git LFS inclusion / exclusion is controlled by this file. Our approach is to: # INCLUDE dirs in Git LFS broadly, and then EXCLUDE text file-types narrowly. # # Why include in LFS broadly? Once a large binary file is comitted without lfs, # it is VERY hard to remove it from the git history as it requires a history # rewrite. This cannot be done without major disruption to all devs. Thus, # once merged to `staging`, that NNN MB file that missed LFS makes our git repo # that much bigger forever. # # In contrast, if a text file (= a file that you want to be able to diff) # is accidentally included in LFS, adding it back to git is easy, # see: "HOW TO EXCLUDE A FILE/FILES THATS IN AN LFS DIR" below. # INCLUDE these "large static asset" and localisation dirs in Git LFS: apps/i18n/** filter=lfs diff=lfs merge=lfs -text apps/static/** filter=lfs diff=lfs merge=lfs -text dashboard/app/assets/** filter=lfs diff=lfs merge=lfs -text dashboard/config/locales/** filter=lfs diff=lfs merge=lfs -text dashboard/config/datablock_storage/** filter=lfs diff=lfs merge=lfs -text dashboard/public/** filter=lfs diff=lfs merge=lfs -text dashboard/test/fixtures/** filter=lfs diff=lfs merge=lfs -text lib/test/fixtures/** filter=lfs diff=lfs merge=lfs -text pegasus/cache/i18n/** filter=lfs diff=lfs merge=lfs -text pegasus/sites.v3/** filter=lfs diff=lfs merge=lfs -text pegasus/sites/** filter=lfs diff=lfs merge=lfs -text shared/images/** filter=lfs diff=lfs merge=lfs -text # HOW TO EXCLUDE A FILE/FILES FROM GIT LFS: # # 1. Add a new exclusion pattern in the immediately following section # 2. Run `git add --renormalize .` from the root of the repo # 3. All files matching the pattern should show up new and uncommitted # 4. Commit your .gitattributes changes and the new files. # # 🙏 be thoughtful when adding new files/patterns: once the files # are in our git history, they take up space forever. # EXCLUDE these files from our Git LFS dirs: apps/i18n/**/en_us.json !text !filter !merge !diff apps/i18n/tts_keys/** !text !filter !merge !diff apps/static/aichat/modelDescriptions.json !text !filter !merge !diff dashboard/app/assets/javascripts/** !text !filter !merge !diff dashboard/app/assets/stylesheets/** !text !filter !merge !diff dashboard/config/locales/**/*en.yml !text !filter !merge !diff dashboard/config/locales/**/*en.json !text !filter !merge !diff dashboard/public/**/README.md !text !filter !merge !diff dashboard/test/fixtures/**/*.tsv !text !filter !merge !diff dashboard/test/fixtures/**/*.csv !text !filter !merge !diff dashboard/test/fixtures/**/*.json !text !filter !merge !diff dashboard/test/fixtures/**/*.course !text !filter !merge !diff dashboard/test/fixtures/**/*.script_json !text !filter !merge !diff dashboard/test/fixtures/**/*.level !text !filter !merge !diff dashboard/test/fixtures/**/*.xml !text !filter !merge !diff pegasus/cache/i18n/en-US.json !text !filter !merge !diff pegasus/sites.v3/hourofcode.com/i18n/en.yml !text !filter !merge !diff pegasus/sites*/**/*.collate !text !filter !merge !diff pegasus/sites*/**/*.erb !text !filter !merge !diff pegasus/sites*/**/*.fetch !text !filter !merge !diff pegasus/sites*/**/*.haml !text !filter !merge !diff pegasus/sites*/**/*.json !text !filter !merge !diff pegasus/sites*/**/*.md !text !filter !merge !diff pegasus/sites*/**/*.moved !text !filter !merge !diff pegasus/sites*/**/*.partial !text !filter !merge !diff pegasus/sites*/**/*.redirect !text !filter !merge !diff pegasus/sites*/**/*.scss !text !filter !merge !diff # INCLUDE these binary file types in Git LFS no matter where they occur. # Extensions are matched case-insensitively (e.g. both .png and .PNG) via # character classes, so files do not slip past LFS on case-sensitive # filesystems (git attribute matching is case-sensitive on Linux). *.[jJ][pP][eE][gG] filter=lfs diff=lfs merge=lfs -text *.[jJ][pP][gG] filter=lfs diff=lfs merge=lfs -text *.[pP][dD][fF] filter=lfs diff=lfs merge=lfs -text *.[pP][nN][gG] filter=lfs diff=lfs merge=lfs -text *.[tT][tT][fF] filter=lfs diff=lfs merge=lfs -text *.[wW][hH][lL] filter=lfs diff=lfs merge=lfs -text *.[zZ][iI][pP] filter=lfs diff=lfs merge=lfs -text # Small list of very common text file types to EXCLUDE from Git LFS: *.css !text !filter !merge !diff *.js !text !filter !merge !diff *.html !text !filter !merge !diff # INCLUDE these specific files in Git LFS, no matter what: pegasus/sites.v3/code.org/public/schools.json filter=lfs diff=lfs merge=lfs -text pegasus/sites.v3/hourofcode.com/public/onetrust/** filter=lfs diff=lfs merge=lfs -text pegasus/sites.v3/code.org/public/onetrust/** filter=lfs diff=lfs merge=lfs -text