{"record":{"id":"fdc15f02f36fb1a8","repo":"GitoxideLabs/gitoxide","slug":"one-or-more-errors-occurred-checkout-is-incomple-fdc15f","errorCode":null,"errorMessage":"One or more errors occurred - checkout is incomplete: {}","messagePattern":"One or more errors occurred - checkout is incomplete: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"gitoxide-core/src/repository/clone.rs","lineNumber":139,"sourceCode":"\n        match outcome {\n            Some(gix::worktree::state::checkout::Outcome { collisions, errors, .. })\n                if !(collisions.is_empty() && errors.is_empty()) =>\n            {\n                let mut messages = Vec::new();\n                if !errors.is_empty() {\n                    messages.push(format!(\"kept going through {} errors(s)\", errors.len()));\n                    for record in errors {\n                        writeln!(err, \"{}: {}\", record.path, record.error).ok();\n                    }\n                }\n                if !collisions.is_empty() {\n                    messages.push(format!(\"encountered {} collision(s)\", collisions.len()));\n                    for col in collisions {\n                        writeln!(err, \"{}: collision ({:?})\", col.path, col.error_kind).ok();\n                    }\n                }\n                bail!(\n                    \"One or more errors occurred - checkout is incomplete: {}\",\n                    messages.join(\", \")\n                );\n            }\n            _ => {}\n        }\n        Ok(())\n    }\n}\n","sourceCodeStart":121,"sourceCodeEnd":149,"githubUrl":"https://github.com/GitoxideLabs/gitoxide/blob/e73179060badf27222d790981fac3f84c1830a7e/gitoxide-core/src/repository/clone.rs#L121-L149","documentation":"After checkout during clone, the outcome is inspected: if it ended with errors (e.g. filesystem collisions or IO errors), the clone aborts with a summary message listing each error kind. The checkout itself reported failures, so the working tree is incomplete.","triggerScenarios":"Cloning a repo whose checkout collides with existing files on disk (case-insensitive filesystems, symlinks, pre-existing untracked paths), or checkout errors like permission/IO failures during `clone` with `checkout: Some(...)`.","commonSituations":"Cloning onto Windows/macOS where filenames differ only by case; cloning into a non-empty directory; path-too-long or permission errors during checkout.","solutions":["Read the collision list written to stderr, remove/rename the offending paths, and retry","Clone into an empty directory","On case-insensitive filesystems, configure `core.protectNTFS`/checkout collision handling or use a case-sensitive volume","Retry with checkout disabled (`--no-checkout`) if only the objects are needed"],"exampleFix":"// before\ngix::clone::PrepareFetch::from_url(url)?.fetch_only(progress, &mut should_interrupt)?;\n// after\nlet prep = gix::clone::PrepareFetch::from_url(url)?.with_empty_path()?;\nlet (repo, outcome) = prep.fetch_then_checkout(progress, &mut should_interrupt)?.0;\nmatch outcome {\n    gix::checkout::box_overwrites::OutcomeOrError::Outcome(_) => {},\n    e => return Err(anyhow!(\"checkout failed: {e}\")),\n}","handlingStrategy":"try-catch","validationCode":"if !target_dir.is_empty() {\n    anyhow::bail!(\"target directory must be empty before clone\");\n}","typeGuard":null,"tryCatchPattern":"match clone_result {\n    Err(e) if e.to_string().contains(\"checkout is incomplete\") => {\n        eprintln!(\"fix collisions listed on stderr, then retry\");\n    }\n    Err(e) => return Err(e),\n    Ok(()) => {},\n}","preventionTips":["Clone into empty directories","Watch for case-only filename conflicts on case-insensitive filesystems","Check path length and permission limits of the target volume"],"tags":["git","checkout","collision","clone"],"backgroundTag":"git-command-failed","analyzedSha":"e73179060badf27222d790981fac3f84c1830a7e","analyzedAt":"2026-09-08T11:26:50.865Z","contentChangedAt":"2026-09-08T11:26:50.865Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}