just-git 1.1.11 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -18,11 +18,10 @@ npm install just-git
18
18
 
19
19
  ### Client
20
20
 
21
- Provide any `FileSystem` implementation and call `git.exec()`:
22
-
23
21
  ```ts
24
- import { createGit } from "just-git";
22
+ import { createGit, MemoryFileSystem } from "just-git";
25
23
 
24
+ const fs = new MemoryFileSystem();
26
25
  const git = createGit({ identity: { name: "Alice", email: "alice@example.com" } });
27
26
 
28
27
  await git.exec("git init", { fs, cwd: "/repo" });
@@ -31,7 +30,7 @@ await git.exec('git commit -m "initial commit"', { fs, cwd: "/repo" });
31
30
  await git.exec("git log --oneline", { fs, cwd: "/repo" });
32
31
  ```
33
32
 
34
- Tokenization handles single and double quotes. Pass `env` as a plain object when needed (e.g. `GIT_AUTHOR_NAME`).
33
+ `MemoryFileSystem` is a minimal in-memory filesystem included with just-git. You can also provide your own implementation of the `FileSystem` interface (e.g. wrapping `node:fs/promises`). Tokenization handles single and double quotes. Pass `env` as a plain object when needed (e.g. `GIT_AUTHOR_NAME`).
35
34
 
36
35
  For a full virtual shell with file I/O, pipes, and scripting, pair with [just-bash](https://github.com/vercel-labs/just-bash):
37
36
 
@@ -81,14 +80,15 @@ Uses web-standard `Request`/`Response` — works with Bun, Hono, Cloudflare Work
81
80
 
82
81
  `createGit(options?)` accepts:
83
82
 
84
- | Option | Description |
85
- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
86
- | `identity` | Author/committer override. With `locked: true`, always wins over env vars and git config. Without `locked`, acts as a fallback. |
87
- | `credentials` | `(url) => HttpAuth \| null` callback for Smart HTTP transport auth. |
88
- | `disabled` | `GitCommandName[]` of subcommands to block (e.g. `["push", "rebase"]`). |
89
- | `network` | `{ allowed?: string[], fetch?: FetchFunction }` to restrict HTTP access and/or provide a custom `fetch`. `allowed` accepts hostnames (`"github.com"`) or URL prefixes (`"https://github.com/myorg/"`). Set to `false` to block all network access. |
90
- | `hooks` | `GitHooks` config object with named callback properties. See [Hooks](#hooks). |
91
- | `resolveRemote` | `(url) => GitRepo \| null` callback for cross-VFS remote resolution. See [Multi-agent collaboration](#multi-agent-collaboration). |
83
+ | Option | Description |
84
+ | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
85
+ | `identity` | Author/committer override. With `locked: true`, always wins over env vars and git config. Without `locked`, acts as a fallback. |
86
+ | `credentials` | `(url) => HttpAuth \| null` callback for Smart HTTP transport auth. |
87
+ | `disabled` | `GitCommandName[]` of subcommands to block (e.g. `["push", "rebase"]`). |
88
+ | `network` | `{ allowed?: string[], fetch?: FetchFunction }` to restrict HTTP access and/or provide a custom `fetch`. `allowed` accepts hostnames (`"github.com"`) or URL prefixes (`"https://github.com/myorg/"`). Set to `false` to block all network access. |
89
+ | `config` | `{ locked?, defaults? }` config overrides. `locked` values always win over `.git/config`; `defaults` supply fallbacks when a key is absent. Keys are dotted config names (e.g. `"push.default"`, `"merge.ff"`). See [Config overrides](#config-overrides). |
90
+ | `hooks` | `GitHooks` config object with named callback properties. See [Hooks](#hooks). |
91
+ | `resolveRemote` | `(url) => GitRepo \| null` callback for cross-VFS remote resolution. See [Multi-agent collaboration](#multi-agent-collaboration). |
92
92
 
93
93
  ```ts
94
94
  const git = createGit({
@@ -96,6 +96,10 @@ const git = createGit({
96
96
  credentials: async (url) => ({ type: "bearer", token: "ghp_..." }),
97
97
  disabled: ["rebase"],
98
98
  network: false, // no HTTP access
99
+ config: {
100
+ locked: { "push.default": "nothing" },
101
+ defaults: { "merge.ff": "only" },
102
+ },
99
103
  });
100
104
  ```
101
105
 
@@ -159,6 +163,30 @@ const git = createGit({
159
163
 
160
164
  Available pre-hooks: `preCommit`, `commitMsg`, `mergeMsg`, `preMergeCommit`, `preCheckout`, `prePush`, `preFetch`, `preClone`, `prePull`, `preRebase`, `preReset`, `preClean`, `preRm`, `preCherryPick`, `preRevert`, `preStash`. Available post-hooks: `postCommit`, `postMerge`, `postCheckout`, `postPush`, `postFetch`, `postClone`, `postPull`, `postReset`, `postClean`, `postRm`, `postCherryPick`, `postRevert`, `postStash`. Low-level events: `onRefUpdate`, `onRefDelete`, `onObjectWrite`. Command-level: `beforeCommand`, `afterCommand`.
161
165
 
166
+ ## Config overrides
167
+
168
+ Control git config values at the operator level, without touching `.git/config`. Works like the `identity` option — `locked` values always win, `defaults` act as fallbacks.
169
+
170
+ ```ts
171
+ const git = createGit({
172
+ config: {
173
+ locked: {
174
+ "push.default": "nothing", // agent must always specify a refspec
175
+ "merge.conflictstyle": "diff3", // always show base in conflict markers
176
+ },
177
+ defaults: {
178
+ "pull.rebase": "true", // default to rebase-on-pull (agent can change)
179
+ "merge.ff": "only", // default to ff-only (agent can change)
180
+ },
181
+ },
182
+ });
183
+ ```
184
+
185
+ - **`locked`** — values that take absolute precedence. The agent can run `git config set` (the write succeeds on the VFS), but the locked value always wins on every read. Useful for enforcing policies.
186
+ - **`defaults`** — fallback values when a key is absent from `.git/config`. The agent _can_ override these with `git config set`. Useful for sensible defaults without restricting the agent.
187
+
188
+ Applied transparently via `getConfigValue()` — all commands respect overrides automatically. Any dotted config key works (e.g. `"merge.ff"`, `"push.default"`, `"pull.rebase"`, `"merge.conflictstyle"`, `"branch.autoSetupMerge"`).
189
+
162
190
  ## Repo module
163
191
 
164
192
  `just-git/repo` provides a high-level API for working with repositories programmatically — reading commits, diffing trees, creating objects, and merging — without going through command execution. This is what you use inside hooks (all hook payloads include `repo: GitRepo`) and anywhere else you need direct repo access.
@@ -253,7 +281,7 @@ See [CLI.md](docs/CLI.md) for full usage details.
253
281
  | Command | Flags / options |
254
282
  | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
255
283
  | `init [<dir>]` | `--bare`, `--initial-branch` |
256
- | `clone <repo> [<dir>]` | `--bare`, `-b <branch>` |
284
+ | `clone <repo> [<dir>]` | `--bare`, `-b <branch>`, `--depth` |
257
285
  | `blame <file>` | `-L <start>,<end>`, `-l`/`--long`, `-e`/`--show-email`, `-s`/`--suppress`, `-p`/`--porcelain`, `--line-porcelain` |
258
286
  | `add <paths>` | `.`, `--all`/`-A`, `--update`/`-u`, `--force`/`-f`, `-n`/`--dry-run`, glob pathspecs |
259
287
  | `rm <paths>` | `--cached`, `-r`, `-f`, `-n`/`--dry-run`, glob pathspecs |
@@ -275,10 +303,10 @@ See [CLI.md](docs/CLI.md) for full usage details.
275
303
  | `rebase <upstream>` | `--onto <newbase>`, `--abort`, `--continue`, `--skip` |
276
304
  | `stash` | `push`, `pop`, `apply`, `list`, `drop`, `show`, `clear`, `-m`, `-u`/`--include-untracked`, `stash@{N}` |
277
305
  | `remote` | `add`, `remove`/`rm`, `rename`, `set-url`, `get-url`, `-v` |
278
- | `config` | `get`, `set`, `unset`, `list`, `--list`/`-l`, `--unset` |
279
- | `fetch [<remote>] [<refspec>...]` | `--all`, `--tags`, `--prune`/`-p` |
306
+ | `config` | `get`, `set`, `unset`, `list`, `--list`/`-l`, `--unset`, `--get-all`, `--add` |
307
+ | `fetch [<remote>] [<refspec>...]` | `--all`, `--tags`, `--prune`/`-p`, `--depth`, `--unshallow` |
280
308
  | `push [<remote>] [<refspec>...]` | `--force`/`-f`, `-u`/`--set-upstream`, `--all`, `--tags`, `--delete`/`-d` |
281
- | `pull [<remote>] [<branch>]` | `--ff-only`, `--no-ff`, `--rebase`/`-r`, `--no-rebase` |
309
+ | `pull [<remote>] [<branch>]` | `--ff-only`, `--no-ff`, `--rebase`/`-r`, `--no-rebase`, `--depth`, `--unshallow` |
282
310
  | `bisect` | `start`, `bad`/`good`/`new`/`old`, `skip`, `reset`, `log`, `replay`, `run`, `terms`, `visualize`/`view`, `--term-new`/`--term-old`, `--no-checkout`, `--first-parent` |
283
311
  | `clean` | `-f`, `-n`/`--dry-run`, `-d`, `-x`, `-X`, `-e`/`--exclude` |
284
312
  | `reflog` | `show [<ref>]`, `exists`, `-n`/`--max-count` |
@@ -186,6 +186,8 @@ interface GitContext extends GitRepo {
186
186
  networkPolicy?: NetworkPolicy | false;
187
187
  /** Resolves remote URLs to GitRepos on potentially different VFS instances. */
188
188
  resolveRemote?: RemoteResolver;
189
+ /** Operator-provided config overrides (locked values + defaults). */
190
+ configOverrides?: ConfigOverrides;
189
191
  }
190
192
  type DiffStatus = "added" | "deleted" | "modified";
191
193
  interface TreeDiffEntry {
@@ -220,6 +222,21 @@ interface IdentityOverride {
220
222
  email: string;
221
223
  locked?: boolean;
222
224
  }
225
+ /**
226
+ * Operator-level config overrides. Applied on every `getConfigValue()` read:
227
+ *
228
+ * - `locked` values take absolute precedence — the agent cannot override
229
+ * them via `git config`. Writes still succeed on the VFS (so the agent
230
+ * doesn't see errors), but the locked value always wins on read.
231
+ * - `defaults` supply fallback values when a key is absent from
232
+ * `.git/config`. The agent *can* override these with `git config`.
233
+ *
234
+ * Keys are dotted config names, e.g. `"push.default"`, `"merge.ff"`.
235
+ */
236
+ interface ConfigOverrides {
237
+ locked?: Record<string, string>;
238
+ defaults?: Record<string, string>;
239
+ }
223
240
  type FetchFunction = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
224
241
  interface NetworkPolicy {
225
242
  /**
@@ -341,7 +358,7 @@ interface PostPullEvent {
341
358
  readonly repo: GitRepo;
342
359
  readonly remote: string;
343
360
  readonly branch: string | null;
344
- readonly strategy: "up-to-date" | "fast-forward" | "three-way";
361
+ readonly strategy: "up-to-date" | "fast-forward" | "three-way" | "rebase";
345
362
  readonly commitHash: ObjectId | null;
346
363
  }
347
364
  interface PreResetEvent {
@@ -480,4 +497,4 @@ interface GitHooks {
480
497
  }
481
498
  declare function composeGitHooks(...hookSets: (GitHooks | undefined)[]): GitHooks;
482
499
 
483
- export { type Identity as $, type AfterCommandEvent as A, type BeforeCommandEvent as B, type CredentialProvider as C, type PrePullEvent as D, type ExecResult as E, type FileSystem as F, type GitHooks as G, type HttpAuth as H, type IdentityOverride as I, type PrePushEvent as J, type PreRebaseEvent as K, type PreResetEvent as L, type MergeMsgEvent as M, type NetworkPolicy as N, type ObjectStore as O, type PostCheckoutEvent as P, type PreRevertEvent as Q, type RemoteResolver as R, type PreRmEvent as S, type PreStashEvent as T, type RefDeleteEvent as U, type RefEntry as V, type RefUpdateEvent as W, type Rejection as X, composeGitHooks as Y, isRejection as Z, type ObjectId as _, type RefStore as a, type TreeDiffEntry as a0, type Commit as a1, type ObjectType as a2, type RawObject as a3, type Ref as a4, type FetchFunction as b, type GitContext as c, type CommitMsgEvent as d, type FileStat as e, type GitRepo as f, type ObjectWriteEvent as g, type PostCherryPickEvent as h, type PostCleanEvent as i, type PostCloneEvent as j, type PostCommitEvent as k, type PostFetchEvent as l, type PostMergeEvent as m, type PostPullEvent as n, type PostPushEvent as o, type PostResetEvent as p, type PostRevertEvent as q, type PostRmEvent as r, type PostStashEvent as s, type PreCheckoutEvent as t, type PreCherryPickEvent as u, type PreCleanEvent as v, type PreCloneEvent as w, type PreCommitEvent as x, type PreFetchEvent as y, type PreMergeCommitEvent as z };
500
+ export { isRejection as $, type AfterCommandEvent as A, type BeforeCommandEvent as B, type CredentialProvider as C, type PreFetchEvent as D, type ExecResult as E, type FileSystem as F, type GitContext as G, type HttpAuth as H, type IdentityOverride as I, type PreMergeCommitEvent as J, type PrePullEvent as K, type PrePushEvent as L, type MergeMsgEvent as M, type NetworkPolicy as N, type ObjectId as O, type PostCheckoutEvent as P, type PreRebaseEvent as Q, type RemoteResolver as R, type PreResetEvent as S, type PreRevertEvent as T, type PreRmEvent as U, type PreStashEvent as V, type RefDeleteEvent as W, type RefEntry as X, type RefUpdateEvent as Y, type Rejection as Z, composeGitHooks as _, type GitRepo as a, type Identity as a0, type TreeDiffEntry as a1, type Commit as a2, type ObjectType as a3, type RawObject as a4, type Ref as a5, type GitHooks as b, type ObjectStore as c, type RefStore as d, type ConfigOverrides as e, type FetchFunction as f, type FileStat as g, type CommitMsgEvent as h, type ObjectWriteEvent as i, type PostCherryPickEvent as j, type PostCleanEvent as k, type PostCloneEvent as l, type PostCommitEvent as m, type PostFetchEvent as n, type PostMergeEvent as o, type PostPullEvent as p, type PostPushEvent as q, type PostResetEvent as r, type PostRevertEvent as s, type PostRmEvent as t, type PostStashEvent as u, type PreCheckoutEvent as v, type PreCherryPickEvent as w, type PreCleanEvent as x, type PreCloneEvent as y, type PreCommitEvent as z };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,53 @@
1
- import { F as FileSystem, E as ExecResult, G as GitHooks, C as CredentialProvider, I as IdentityOverride, N as NetworkPolicy, R as RemoteResolver, O as ObjectStore, a as RefStore, b as FetchFunction, c as GitContext } from './hooks-OMCbhUGB.js';
2
- export { A as AfterCommandEvent, B as BeforeCommandEvent, d as CommitMsgEvent, e as FileStat, f as GitRepo, H as HttpAuth, M as MergeMsgEvent, g as ObjectWriteEvent, P as PostCheckoutEvent, h as PostCherryPickEvent, i as PostCleanEvent, j as PostCloneEvent, k as PostCommitEvent, l as PostFetchEvent, m as PostMergeEvent, n as PostPullEvent, o as PostPushEvent, p as PostResetEvent, q as PostRevertEvent, r as PostRmEvent, s as PostStashEvent, t as PreCheckoutEvent, u as PreCherryPickEvent, v as PreCleanEvent, w as PreCloneEvent, x as PreCommitEvent, y as PreFetchEvent, z as PreMergeCommitEvent, D as PrePullEvent, J as PrePushEvent, K as PreRebaseEvent, L as PreResetEvent, Q as PreRevertEvent, S as PreRmEvent, T as PreStashEvent, U as RefDeleteEvent, V as RefEntry, W as RefUpdateEvent, X as Rejection, Y as composeGitHooks, Z as isRejection } from './hooks-OMCbhUGB.js';
1
+ import { O as ObjectId, G as GitContext, a as GitRepo, F as FileSystem, E as ExecResult, b as GitHooks, C as CredentialProvider, I as IdentityOverride, N as NetworkPolicy, R as RemoteResolver, c as ObjectStore, d as RefStore, e as ConfigOverrides, f as FetchFunction, g as FileStat } from './hooks-Boa35Qx_.js';
2
+ export { A as AfterCommandEvent, B as BeforeCommandEvent, h as CommitMsgEvent, H as HttpAuth, M as MergeMsgEvent, i as ObjectWriteEvent, P as PostCheckoutEvent, j as PostCherryPickEvent, k as PostCleanEvent, l as PostCloneEvent, m as PostCommitEvent, n as PostFetchEvent, o as PostMergeEvent, p as PostPullEvent, q as PostPushEvent, r as PostResetEvent, s as PostRevertEvent, t as PostRmEvent, u as PostStashEvent, v as PreCheckoutEvent, w as PreCherryPickEvent, x as PreCleanEvent, y as PreCloneEvent, z as PreCommitEvent, D as PreFetchEvent, J as PreMergeCommitEvent, K as PrePullEvent, L as PrePushEvent, Q as PreRebaseEvent, S as PreResetEvent, T as PreRevertEvent, U as PreRmEvent, V as PreStashEvent, W as RefDeleteEvent, X as RefEntry, Y as RefUpdateEvent, Z as Rejection, _ as composeGitHooks, $ as isRejection } from './hooks-Boa35Qx_.js';
3
+
4
+ /** Depth value that represents "full history" (used by --unshallow). */
5
+ declare const INFINITE_DEPTH = 2147483647;
6
+ /** Shallow boundary delta: what to add/remove from `.git/shallow`. */
7
+ interface ShallowUpdate {
8
+ /** Commits to add to the shallow boundary. */
9
+ shallow: ObjectId[];
10
+ /** Commits to remove from the shallow boundary (now have full parents). */
11
+ unshallow: ObjectId[];
12
+ }
13
+ /**
14
+ * Read the set of shallow boundary commit hashes from `.git/shallow`.
15
+ * Returns an empty set if the file doesn't exist or is empty.
16
+ */
17
+ declare function readShallowCommits(ctx: GitContext): Promise<Set<ObjectId>>;
18
+ /**
19
+ * Write the shallow boundary set to `.git/shallow`.
20
+ * Removes the file if the set is empty (repo is no longer shallow).
21
+ */
22
+ declare function writeShallowCommits(ctx: GitContext, hashes: Set<ObjectId>): Promise<void>;
23
+ /** Check whether a repo is shallow (has a non-empty `.git/shallow` file). */
24
+ declare function isShallowRepo(ctx: GitContext): Promise<boolean>;
25
+ /**
26
+ * Merge a `ShallowUpdate` into the current `.git/shallow` file.
27
+ * Adds new shallow commits, removes unshallowed ones, persists the result.
28
+ */
29
+ declare function applyShallowUpdates(ctx: GitContext, updates: ShallowUpdate, existing?: Set<ObjectId>): Promise<void>;
30
+ /**
31
+ * Compute the shallow boundary for a depth-limited fetch.
32
+ *
33
+ * BFS from `wants` up to `depth` levels of commit parents. Commits
34
+ * at exactly depth N (whose parents would exceed the limit) become
35
+ * the new shallow boundary. Any commit in `clientShallows` that is
36
+ * now within the traversal depth gets unshallowed.
37
+ *
38
+ * The returned `shallow` set is the new boundary — commits whose
39
+ * parents the client should NOT expect to have. The `unshallow` set
40
+ * is commits that were previously shallow but are now within depth.
41
+ */
42
+ declare function computeShallowBoundary(repo: GitRepo, wants: ObjectId[], depth: number, clientShallows: Set<ObjectId>): Promise<ShallowUpdate>;
43
+
44
+ /** Options for shallow/depth-limited fetches. */
45
+ interface ShallowFetchOptions {
46
+ /** Maximum commit depth from the wanted refs. */
47
+ depth?: number;
48
+ /** Commits currently in the client's `.git/shallow` file. */
49
+ existingShallows?: Set<ObjectId>;
50
+ }
3
51
 
4
52
  /** Options for subcommand execution (mirrors just-bash's CommandExecOptions). */
5
53
  interface CommandExecOptions {
@@ -48,6 +96,11 @@ interface GitOptions {
48
96
  * and go through this store instead (e.g. SQLite-backed).
49
97
  */
50
98
  refStore?: RefStore;
99
+ /**
100
+ * Config overrides. `locked` values always win over `.git/config`;
101
+ * `defaults` supply fallbacks when a key is absent from config.
102
+ */
103
+ config?: ConfigOverrides;
51
104
  }
52
105
  /**
53
106
  * Bundle of operator-level extensions threaded into command handlers
@@ -62,6 +115,7 @@ interface GitExtensions {
62
115
  resolveRemote?: RemoteResolver;
63
116
  objectStore?: ObjectStore;
64
117
  refStore?: RefStore;
118
+ configOverrides?: ConfigOverrides;
65
119
  }
66
120
  /** Simplified context for {@link Git.exec}. */
67
121
  interface ExecContext {
@@ -75,6 +129,8 @@ declare class Git {
75
129
  private blocked;
76
130
  private hooks;
77
131
  private inner;
132
+ private locks;
133
+ private withLock;
78
134
  constructor(options?: GitOptions);
79
135
  /**
80
136
  * Run a git command from a string.
@@ -98,6 +154,38 @@ declare class Git {
98
154
  declare function tokenizeCommand(input: string): string[];
99
155
  declare function createGit(options?: GitOptions): Git;
100
156
 
157
+ /**
158
+ * Minimal in-memory filesystem implementing the just-git {@link FileSystem}
159
+ * interface. Supports files, directories, and symlinks.
160
+ *
161
+ * ```ts
162
+ * const fs = new MemoryFileSystem({ "/repo/README.md": "# Hello" });
163
+ * ```
164
+ */
165
+ declare class MemoryFileSystem implements FileSystem {
166
+ private data;
167
+ constructor(initialFiles?: Record<string, string | Uint8Array>);
168
+ private ensureParents;
169
+ private resolve;
170
+ private resolveParent;
171
+ readFile(path: string): Promise<string>;
172
+ readFileBuffer(path: string): Promise<Uint8Array>;
173
+ writeFile(path: string, content: string | Uint8Array): Promise<void>;
174
+ exists(path: string): Promise<boolean>;
175
+ stat(path: string): Promise<FileStat>;
176
+ lstat(path: string): Promise<FileStat>;
177
+ mkdir(path: string, options?: {
178
+ recursive?: boolean;
179
+ }): Promise<void>;
180
+ readdir(path: string): Promise<string[]>;
181
+ rm(path: string, options?: {
182
+ recursive?: boolean;
183
+ force?: boolean;
184
+ }): Promise<void>;
185
+ readlink(path: string): Promise<string>;
186
+ symlink(target: string, linkPath: string): Promise<void>;
187
+ }
188
+
101
189
  /**
102
190
  * Walk up from `startPath` looking for a git repository.
103
191
  * Checks for both normal repos (`.git/` subdirectory) and bare repos
@@ -106,4 +194,4 @@ declare function createGit(options?: GitOptions): Git;
106
194
  */
107
195
  declare function findRepo(fs: FileSystem, startPath: string): Promise<GitContext | null>;
108
196
 
109
- export { type CommandContext, type CommandExecOptions, CredentialProvider, type ExecContext, ExecResult, FetchFunction, FileSystem, Git, type GitCommandName, GitContext, type GitExtensions, GitHooks, type GitOptions, IdentityOverride, NetworkPolicy, ObjectStore, RefStore, RemoteResolver, createGit, findRepo, tokenizeCommand };
197
+ export { type CommandContext, type CommandExecOptions, ConfigOverrides, CredentialProvider, type ExecContext, ExecResult, FetchFunction, FileStat, FileSystem, Git, type GitCommandName, GitContext, type GitExtensions, GitHooks, type GitOptions, GitRepo, INFINITE_DEPTH, IdentityOverride, MemoryFileSystem, NetworkPolicy, ObjectStore, RefStore, RemoteResolver, type ShallowFetchOptions, type ShallowUpdate, applyShallowUpdates, computeShallowBoundary, createGit, findRepo, isShallowRepo, readShallowCommits, tokenizeCommand, writeShallowCommits };