{"record":{"id":"db2fa6b1f382ba31","repo":"gitbutlerapp/gitbutler","slug":"the-repository-at-is-bare-gitbutler-requires-a","errorCode":null,"errorMessage":"The repository at {} is bare. GitButler requires a non-bare repository.","messagePattern":"The repository at (.+?) is bare\\. GitButler requires a non-bare repository\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/but/src/command/legacy/setup.rs","lineNumber":261,"sourceCode":"        gitbutler_project::AddProjectOutcome::AlreadyExists(_) => {\n            if let Some(out) = out.for_human() {\n                writeln!(\n                    out,\n                    \"  {}\",\n                    t.success.paint(\"✓ Repository already in project registry\")\n                )?;\n            }\n            Ok(ProjectStatus::AlreadyExists)\n        }\n        gitbutler_project::AddProjectOutcome::PathNotFound => Err(anyhow::anyhow!(\n            \"The path {} does not exist\",\n            repo_path.display()\n        )),\n        gitbutler_project::AddProjectOutcome::NotADirectory => Err(anyhow::anyhow!(\n            \"The path {} is not a directory\",\n            repo_path.display()\n        )),\n        gitbutler_project::AddProjectOutcome::BareRepository => Err(anyhow::anyhow!(\n            \"The repository at {} is bare. GitButler requires a non-bare repository.\",\n            repo_path.display()\n        )),\n        gitbutler_project::AddProjectOutcome::NonMainWorktree => Err(anyhow::anyhow!(\n            \"The repository at {} is a non-main worktree. GitButler requires the main worktree.\",\n            repo_path.display()\n        )),\n        gitbutler_project::AddProjectOutcome::NoWorkdir => Err(anyhow::anyhow!(\n            \"The repository at {} has no working directory. GitButler requires a working directory.\",\n            repo_path.display()\n        )),\n        gitbutler_project::AddProjectOutcome::NoDotGitDirectory => Err(anyhow::anyhow!(\n            \"The repository at {} has no .git directory. GitButler requires a .git directory.\",\n            repo_path.display()\n        )),\n        gitbutler_project::AddProjectOutcome::ReftableRefFormatUnsupported => Err(anyhow::anyhow!(\n            \"The repository at {} uses the currently unsupported reftable reference format.\",\n            repo_path.display()","sourceCodeStart":243,"sourceCodeEnd":279,"githubUrl":"https://github.com/gitbutlerapp/gitbutler/blob/58e5313667b857ef39a730e380af31816a7b1768/crates/but/src/command/legacy/setup.rs#L243-L279","documentation":"Thrown when `AddProjectOutcome::BareRepository` is returned. The path is a valid git repository but was created/cloned with `--bare`, so it has no checked-out working tree. GitButler requires a non-bare repository because it manages working-directory branches.","triggerScenarios":"Running `but setup` against a bare repo (e.g. `myrepo.git` on a server, or a repo cloned with `git clone --bare`).","commonSituations":"Pointing GitButler at a server-side remote repository; CI artifacts of bare clones; accidentally cloning with `--bare` or `--mirror`.","solutions":["Clone the repository non-bare (`git clone <url>`) and run setup on the clone.","If you already have a bare repo, create a non-bare worktree/clone from it: `git clone <bare-path>`.","Never run GitButler setup against server/hosting remotes (GitHub/GitLab server paths)."],"exampleFix":"// before\nbut setup ~/remotes/myrepo.git\n// after\ngit clone ~/remotes/myrepo.git ~/work/myrepo\nbut setup ~/work/myrepo","handlingStrategy":"validation","validationCode":"const { stdout } = await run(['git', '-C', repoPath, 'rev-parse', '--is-bare-repository']);\nif (stdout.trim() === 'true') {\n  throw new Error(`${repoPath} is bare; clone it non-bare first`);\n}","typeGuard":"function isNonBareRepo(p: string): boolean {\n  const r = cp.spawnSync('git', ['-C', p, 'rev-parse', '--is-bare-repository']);\n  return r.status === 0 && r.stdout.toString().trim() === 'false';\n}","tryCatchPattern":"try {\n  await run(['but', 'setup', repoPath]);\n} catch (e) {\n  if (String(e).includes('is bare')) {\n    console.error('Clone a working copy first: git clone <bare-path> <dest>');\n  }\n  throw e;\n}","preventionTips":["Never run but setup against server-side or --bare/--mirror clones.","Check `git rev-parse --is-bare-repository` in automation before setup.","Keep workspace clones non-bare."],"tags":["git","bare-repository","cli","setup"],"backgroundTag":"incompatible-source-type","analyzedSha":"58e5313667b857ef39a730e380af31816a7b1768","analyzedAt":"2026-09-18T06:50:32.052Z","contentChangedAt":"2026-09-18T06:50:32.052Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}