jdx/mise · error

is not a sharing conflict

Error message

{} is not a sharing conflict

What it means

`mise dot conflicts [--path ...]` only accepts paths that actually have a sharing conflict in the history store. If a requested path was not among the detected conflicts, the command bails saying so for that path.

Solutions

  1. Run `mise dot conflicts` with no path arguments to list actual sharing conflicts, then use one of the listed paths
  2. Re-run after the next history sync if you expect a conflict but none is detected
  3. Verify the exact path format used by mise (e.g. run `mise dot list` to see tracked paths)

Example fix

// before
$ mise dot conflicts ~/.config/mise/dotfiles/src/gitconfig
error: ... is not a sharing conflict
// after
$ mise dot conflicts            # list conflicts first
$ mise dot conflicts <listed-path>
Defensive patterns

Strategy: validation

Validate before calling

# only pass paths that conflicts reports
mise dot conflicts | grep -F "$P" || echo "$P has no sharing conflict"

Try / catch

match result {
    Err(e) if e.to_string().contains("is not a sharing conflict") => {
        // fall back to listing all conflicts without a path arg
    }
    ...
}

Prevention

When it happens

Trigger: Passing a path argument to `mise dot conflicts` that is not in the current conflict set (typo, already resolved, or the file was never concurrently edited from multiple machines).

Common situations: User specifies the dotfile target path instead of the tracked source path; conflict was auto-resolved before the command ran; path spelling differs (e.g. `~/.gitconfig` vs the tracked repo-relative path).

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17). Data as JSON: /api/errors/43d1def2433bb173. Report an issue: GitHub.

Appendix: source

Thrown at src/cli/dotfiles/conflicts.rs:101

        .iter()
        .map(|path| normalize_target(path))
        .collect::<Vec<_>>();
    let mut selected = vec![];
    for conflict in conflicts {
        let Some(path) = roots
            .locate(&conflict.branch_path)
            .path()
            .map(Path::to_path_buf)
        else {
            continue;
        };
        if requested.is_empty() || requested.contains(&path) {
            selected.push((path, conflict));
        }
    }
    for path in requested {
        if !selected.iter().any(|(selected, _)| selected == &path) {
            bail!("{} is not a sharing conflict", display_path(&path));
        }
    }
    Ok(selected)
}

fn print_diff(repo: &HistoryRepo, conflict: &Conflict, path: &Path) -> Result<()> {
    let local = side_file(repo, conflict.local.as_ref(), path, "local")?;
    let remote = side_file(repo, conflict.remote.as_ref(), path, "remote")?;
    let output = git_diff(repo, &local, &remote, path, console::colors_enabled())?;
    if !output.stdout.is_empty() {
        miseprint!("{}", String::from_utf8_lossy(&output.stdout))?;
    }
    if local.mode != remote.mode {
        miseprintln!("mode: {} -> {}", local.mode, remote.mode);
    }
    Ok(())
}

View on GitHub (pinned to 533346cc37)