Git operations inside a sandbox.
Every function takes the sandbox and the repository path inside it, and
returns {:ok, value} / :ok or {:error, %ExDaytona.Error{}}:
:ok = ExDaytona.Git.clone(sandbox, "https://github.com/org/repo.git", "/tmp/repo")
{:ok, status} = ExDaytona.Git.status(sandbox, "/tmp/repo")
{:ok, %{branches: branches, current: "main"}} = ExDaytona.Git.branches(sandbox, "/tmp/repo")
:ok = ExDaytona.Git.create_branch(sandbox, "/tmp/repo", "feature/x")
:ok = ExDaytona.Git.checkout(sandbox, "/tmp/repo", "feature/x")
:ok = ExDaytona.Git.add(sandbox, "/tmp/repo", ["README.md"])
{:ok, %{hash: hash}} =
ExDaytona.Git.commit(sandbox, "/tmp/repo", "docs: update readme",
author: "Dev",
email: "dev@example.com"
)Authenticated operations (clone/4, push/3, pull/3) accept
:username/:password — pass a token as the password for HTTPS
remotes.
Summary
Functions
Stage files (a list of paths relative to the repository). Returns
:ok.
The repository's branches: {:ok, %{branches: [...], current: branch}}.
Check out branch. Returns :ok.
Clone url into path inside the sandbox.
Commit staged changes. Returns {:ok, %{hash: sha}}.
Create branch name. Returns :ok.
The repository's commit history as ExDaytona.Model.GitCommitInfo
structs (newest first).
Pull from the remote. Returns :ok.
Push commits to the remote. Returns :ok.
The repository's status as an ExDaytona.Model.GitStatus
(current branch, ahead/behind, per-file status).
Functions
@spec add(ExDaytona.Sandbox.t(), String.t(), [String.t()]) :: :ok | {:error, ExDaytona.Error.t()}
Stage files (a list of paths relative to the repository). Returns
:ok.
@spec branches(ExDaytona.Sandbox.t(), String.t()) :: {:ok, %{branches: [String.t()], current: String.t() | nil}} | {:error, ExDaytona.Error.t()}
The repository's branches: {:ok, %{branches: [...], current: branch}}.
@spec checkout(ExDaytona.Sandbox.t(), String.t(), String.t()) :: :ok | {:error, ExDaytona.Error.t()}
Check out branch. Returns :ok.
@spec clone(ExDaytona.Sandbox.t(), String.t(), String.t(), keyword()) :: :ok | {:error, ExDaytona.Error.t()}
Clone url into path inside the sandbox.
Options: :branch, :commit_id, :depth, :username, :password.
@spec commit(ExDaytona.Sandbox.t(), String.t(), String.t(), keyword()) :: {:ok, %{hash: String.t() | nil}} | {:error, ExDaytona.Error.t()}
Commit staged changes. Returns {:ok, %{hash: sha}}.
Required options: :author, :email. Optional: :allow_empty.
@spec create_branch(ExDaytona.Sandbox.t(), String.t(), String.t()) :: :ok | {:error, ExDaytona.Error.t()}
Create branch name. Returns :ok.
@spec history(ExDaytona.Sandbox.t(), String.t()) :: {:ok, [ExDaytona.Model.GitCommitInfo.t()]} | {:error, ExDaytona.Error.t()}
The repository's commit history as ExDaytona.Model.GitCommitInfo
structs (newest first).
@spec pull(ExDaytona.Sandbox.t(), String.t(), keyword()) :: :ok | {:error, ExDaytona.Error.t()}
Pull from the remote. Returns :ok.
Options: :remote, :branch, :username, :password.
@spec push(ExDaytona.Sandbox.t(), String.t(), keyword()) :: :ok | {:error, ExDaytona.Error.t()}
Push commits to the remote. Returns :ok.
Options: :remote, :branch, :set_upstream, :username,
:password.
@spec status(ExDaytona.Sandbox.t(), String.t()) :: {:ok, ExDaytona.Model.GitStatus.t()} | {:error, ExDaytona.Error.t()}
The repository's status as an ExDaytona.Model.GitStatus
(current branch, ahead/behind, per-file status).