jdx/mise · error
source contains machine-local configuration ({entry}); remov
Error message
source contains machine-local configuration ({entry}); remove it from the repository before onboarding What it means
install_at refuses to onboard source trees containing *.local.toml files (case-insensitive), because those are machine-local configuration that must not be replicated into the global configuration directory. The error names the offending file.
Source
Thrown at src/system/remote_repository.rs:236
.output()?;
if !output.status.success() {
bail!("invalid transferred repository bundle");
}
if git(&checkout, &["rev-parse", "HEAD"])? != revision {
bail!("transferred revision mismatch");
}
let entries = git(&checkout, &["ls-tree", "-r", "-z", "--name-only", revision])?;
for entry in entries.split('\0').filter(|s| !s.is_empty()) {
let path = Path::new(entry);
if path
.components()
.any(|c| !matches!(c, std::path::Component::Normal(_)))
|| entry.split('/').any(|p| p.eq_ignore_ascii_case(".git"))
{
bail!("unsafe source repository path");
}
if entry.to_ascii_lowercase().ends_with(".local.toml") {
bail!(
"source contains machine-local configuration ({entry}); remove it from the repository before onboarding"
);
}
}
git(&checkout, &["remote", "set-url", "origin", origin])?;
let branch = git(&checkout, &["symbolic-ref", "--short", "HEAD"])?;
git(
&checkout,
&["-c", "core.hooksPath=/dev/null", "checkout", &branch],
)?;
if destination.join(".git").exists() {
if git(destination, &["remote", "get-url", "origin"])? != origin {
bail!("global configuration origin does not match");
}
if !git(
destination,
&["status", "--porcelain", "--untracked-files=no"],
)?View on GitHub (pinned to afd2eddd3a)
Solutions
- Delete the offending *.local.toml files from the repository and commit
- Add *.local.toml to .gitignore to prevent recurrence
- Push the fix, re-fetch, and install a new pinned revision
Example fix
# before $ git ls-files | grep '.local.toml' settings.local.toml # after $ git rm settings.local.toml && echo '*.local.toml' >> .gitignore && git commit
Defensive patterns
Strategy: validation
Validate before calling
fn repo_has_local_configs(entries: &[String]) -> Vec<String> {
entries.iter()
.filter(|e| e.to_ascii_lowercase().ends_with(".local.toml"))
.cloned()
.collect()
} Prevention
- Add '*.local.toml' to .gitignore in config repositories
- Never commit machine-local overrides to the shared repo
- Run `git ls-tree -r --name-only <rev> | grep -i '\.local\.toml$'` before onboarding
When it happens
Trigger: Repository tree (at the pinned revision) contains any entry ending in .local.toml, e.g. settings.local.toml or env.local.toml discovered via git ls-tree during install_at.
Common situations: Developers committing their local override files (conventionally *.local.toml) into the shared config repo, then onboarding from it on another machine.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- incoming configuration must be a regular file: {}
- incoming history.origin is machine-local configuration; remo
- {bin_name} is a mise bin however it is not currently active.
- remote task path is not a regular file or directory: {}
- [dotfiles]."{}": source does not exist: {}
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/442c2b12492da929.
Report an issue: GitHub.