eas build uploads include Claude worktrees
- Dominant language
- TypeScript
- Stars
- 1.4k
- Forks
- 236
- Avg merge
- 3d 8h
- Merged PRs (30d)
- 98
Description
### Build/Submit details page URL
https://expo.dev/accounts/yousician/projects/lessons-app/builds/e4e83edf-ab20-4b59-8847-b1b984e1a4ab
### Summary
When archiving the project for a build, eas-cli's working-directory copy step ignores only things from `.easignore` / `.gitignore` files. It never looks at `.git/info/exclude` or the global `core.excludesFile`, even though git itself does.
In our project, agent tooling keeps git worktrees under `.claude/worktrees/`, excluded via `.git/info/exclude`. Each worktree contains a full checkout with hundreds of MBs of git-lfs binaries, so our "Compressing project files" step produced a huge archive. Nothing in `git status` hints that these files would be uploaded, which makes this very hard to discover when not using a custom `.easignore`.
### Managed or bare?
Bare with CNG
### Environment
expo-env-info 2.1.0 environment info:
System:
OS: macOS 26.5.2
Shell: 5.9 - /bin/zsh
Binaries:
Node: 24.18.0 - /opt/homebrew/bin/node
npm: 11.16.0 - /opt/homebrew/bin/npm
Managers:
CocoaPods: 1.17.0 - /opt/homebrew/bin/pod
SDKs:
iOS SDK:
Platforms: DriverKit 25.4, iOS 26.4, macOS 26.4, tvOS 26.4, visionOS 26.4, watchOS 26.4
IDEs:
Android Studio: 2025.3 AI-253.30387.90.2532.14935130
Xcode: 26.4.1/17E202 - /usr/bin/xcodebuild
npmPackages:
expo: ~57.0.8 => 57.0.8
expo-router: ~57.0.8 => 57.0.8
expo-updates: ~57.0.10 => 57.0.10
react: 19.2.3 => 19.2.3
react-dom: 19.2.3 => 19.2.3
react-native: 0.86.0 => 0.86.0
react-native-web: ~0.21.2 => 0.21.2
npmGlobalPackages:
eas-cli: 21.4.0
expo-cli: 6.3.12
Expo Workflow: bare
20/20 checks passed. No issues detected!
### Error output
No error — the build succeeds, the archive is just much larger than expected. `EXPO_DEBUG=1` shows `makeShallowCopyAsync` logging `copying` for every file under the excluded directory.
### Reproducible demo or steps to reproduce from a blank project
```bash
npx create-expo-app repro && cd repro
git init && git add . && git commit -m init
# Create a large directory and exclude it the "local-only" git way
mkdir local-only
dd if=/dev/urandom of=local-only/blob bs=1m count=100
echo "local-only/" >> .git/info/exclude
git status # clean — git considers local-only/ ignored
eas init
eas build --platform ios --profile production
```
Contributor guide
Research direction
Start by locating the makeShallowCopyAsync implementation and reproduce the issue with the provided git/info/exclude and eas build commands. Done means files excluded by .git/info/exclude or the global core.excludesFile are not copied into the build archive, while the existing archive behavior remains intact.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- build-system, cli
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 68/100