summaryrefslogtreecommitdiff
path: root/packages/core/src/services/gitService.ts
diff options
context:
space:
mode:
authorLouis Jimenez <[email protected]>2025-06-22 00:13:03 -0400
committerGitHub <[email protected]>2025-06-22 00:13:03 -0400
commit383212034c0d48068e1f3f43a8819c9d054b907d (patch)
tree771407ecdacec908cb298cdea404464b429b518c /packages/core/src/services/gitService.ts
parent0779697da6caeae09b67a146013612a34f369b74 (diff)
Provide a .gitconfig for shadow repos (#1294)
Diffstat (limited to 'packages/core/src/services/gitService.ts')
-rw-r--r--packages/core/src/services/gitService.ts19
1 files changed, 14 insertions, 5 deletions
diff --git a/packages/core/src/services/gitService.ts b/packages/core/src/services/gitService.ts
index 83f1fec2..bd7b72fd 100644
--- a/packages/core/src/services/gitService.ts
+++ b/packages/core/src/services/gitService.ts
@@ -54,18 +54,24 @@ export class GitService {
*/
async setupShadowGitRepository() {
const repoDir = this.getHistoryDir();
+ const gitConfigPath = path.join(repoDir, '.gitconfig');
await fs.mkdir(repoDir, { recursive: true });
- const isRepoDefined = await simpleGit(repoDir).checkIsRepo(
- CheckRepoActions.IS_REPO_ROOT,
- );
+
+ // We don't want to inherit the user's name, email, or gpg signing
+ // preferences for the shadow repository, so we create a dedicated gitconfig.
+ const gitConfigContent =
+ '[user]\n name = Gemini CLI\n email = [email protected]\n[commit]\n gpgsign = false\n';
+ await fs.writeFile(gitConfigPath, gitConfigContent);
+
+ const repo = simpleGit(repoDir);
+ const isRepoDefined = await repo.checkIsRepo(CheckRepoActions.IS_REPO_ROOT);
if (!isRepoDefined) {
- await simpleGit(repoDir).init(false, {
+ await repo.init(false, {
'--initial-branch': 'main',
});
- const repo = simpleGit(repoDir);
await repo.commit('Initial commit', { '--allow-empty': null });
}
@@ -89,6 +95,9 @@ export class GitService {
return simpleGit(this.projectRoot).env({
GIT_DIR: path.join(repoDir, '.git'),
GIT_WORK_TREE: this.projectRoot,
+ // Prevent git from using the user's global git config.
+ HOME: repoDir,
+ XDG_CONFIG_HOME: repoDir,
});
}