> Canonical HTML: [https://docs.schematic.tech/pup/help/source/](https://docs.schematic.tech/pup/help/source/)

# Source and commits

Pup checks your supertests against a specific version of your code. You can choose a Git
commit or include uncommitted changes, and use `.pupignore` to exclude files.

## Which files are included

Pup syncs source from your linked local Git repository to Schematic. For committed code, it
includes files tracked in the selected commit, subject to the exclusions below.

A supertest can depend on code elsewhere in your project. Selecting one supertest still syncs
included files from across the repository.

Pup doesn't push to your Git remote or sync the repository's entire Git history.

## Exclude files

Use `.pupignore` to exclude files such as credentials, private fixtures, or generated output.
Put it at the repository root, using Git ignore syntax, and commit it before linking:

**.pupignore**

```gitignore
.env*
secrets/
fixtures/customer-data/
coverage/
```

Pup uses the `.pupignore` from the selected commit. Uncommitted edits to these rules take effect
when included in a check.

`.gitignore` excludes untracked files when checking working changes. Already tracked files
remain included even when they match `.gitignore`; use `.pupignore` to exclude them.

Pup also applies these limits:

- Files larger than 10 MiB are excluded and reported.
- Symbolic links and Git submodules cause an error. Exclude their paths, or replace them with
  regular files needed for checking.

## Check uncommitted changes

You don't need to commit your work before checking it. When run interactively, `pup check` asks
whether to include uncommitted changes. Declining stops the command.

Including changes checks the current contents of tracked files and any untracked files allowed
by the exclusion rules above. Your files, current branch, and staging stay unchanged.

Use `--dirty` to include changes without a prompt, or `--commit HEAD` to check committed code
only. See [Select source](/pup/commands/checks/#select-source) for command options.

A result applies to the code included in that check. Run another check to evaluate later edits.
