AsyncGit
class AsyncGit()
Provides Git operations within a Sandbox.
Example:
# Clone a repositoryawait sandbox.git.clone( url="https://github.com/user/repo.git", path="workspace/repo")
# Check repository statusstatus = await sandbox.git.status("workspace/repo")print(f"Modified files: {status.modified}")
# Stage and commit changesawait sandbox.git.add("workspace/repo", ["file.txt"])await sandbox.git.commit( path="workspace/repo", message="Update file", author="John Doe", email="john@example.com")
AsyncGit.__init__
def __init__(sandbox_id: str, toolbox_api: ToolboxApi, get_root_dir: Callable[[], Awaitable[str]])
Initializes a new Git handler instance.
Arguments:
sandbox_id
str - The Sandbox ID.toolbox_api
ToolboxApi - API client for Sandbox operations.get_root_dir
Callable[[], str] - A function to get the default root directory of the Sandbox.
AsyncGit.add
@intercept_errors(message_prefix="Failed to add files: ")async def add(path: str, files: List[str]) -> None
Stages the specified files for the next commit, similar to running ‘git add’ on the command line.
Arguments:
path
str - Path to the Git repository root. Relative paths are resolved based on the user’s root directory.files
List[str] - List of file paths or directories to stage, relative to the repository root.
Example:
# Stage a single fileawait sandbox.git.add("workspace/repo", ["file.txt"])
# Stage multiple filesawait sandbox.git.add("workspace/repo", [ "src/main.py", "tests/test_main.py", "README.md"])
AsyncGit.branches
@intercept_errors(message_prefix="Failed to list branches: ")async def branches(path: str) -> ListBranchResponse
Lists branches in the repository.
Arguments:
path
str - Path to the Git repository root. Relative paths are resolved based on the user’s root directory.
Returns:
ListBranchResponse
- List of branches in the repository.
Example:
response = await sandbox.git.branches("workspace/repo")print(f"Branches: {response.branches}")
AsyncGit.clone
@intercept_errors(message_prefix="Failed to clone repository: ")async def clone(url: str, path: str, branch: Optional[str] = None, commit_id: Optional[str] = None, username: Optional[str] = None, password: Optional[str] = None) -> None
Clones a Git repository into the specified path. It supports cloning specific branches or commits, and can authenticate with the remote repository if credentials are provided.
Arguments:
url
str - Repository URL to clone from.path
str - Path where the repository should be cloned. Relative paths are resolved based on the user’s root directory.branch
Optional[str] - Specific branch to clone. If not specified, clones the default branch.commit_id
Optional[str] - Specific commit to clone. If specified, the repository will be left in a detached HEAD state at this commit.username
Optional[str] - Git username for authentication.password
Optional[str] - Git password or token for authentication.
Example:
# Clone the default branchawait sandbox.git.clone( url="https://github.com/user/repo.git", path="workspace/repo")
# Clone a specific branch with authenticationawait sandbox.git.clone( url="https://github.com/user/private-repo.git", path="workspace/private", branch="develop", username="user", password="token")
# Clone a specific commitawait sandbox.git.clone( url="https://github.com/user/repo.git", path="workspace/repo-old", commit_id="abc123")
AsyncGit.commit
@intercept_errors(message_prefix="Failed to commit changes: ")async def commit(path: str, message: str, author: str, email: str) -> GitCommitResponse
Creates a new commit with the staged changes. Make sure to stage changes using the add() method before committing.
Arguments:
path
str - Path to the Git repository root. Relative paths are resolved based on the user’s root directory.message
str - Commit message describing the changes.author
str - Name of the commit author.email
str - Email address of the commit author.
Example:
# Stage and commit changesawait sandbox.git.add("workspace/repo", ["README.md"])await sandbox.git.commit( path="workspace/repo", message="Update documentation", author="John Doe", email="john@example.com")
AsyncGit.push
@intercept_errors(message_prefix="Failed to push changes: ")async def push(path: str, username: Optional[str] = None, password: Optional[str] = None) -> None
Pushes all local commits on the current branch to the remote repository. If the remote repository requires authentication, provide username and password/token.
Arguments:
path
str - Path to the Git repository root. Relative paths are resolved based on the user’s root directory.username
Optional[str] - Git username for authentication.password
Optional[str] - Git password or token for authentication.
Example:
# Push without authentication (for public repos or SSH)await sandbox.git.push("workspace/repo")
# Push with authenticationawait sandbox.git.push( path="workspace/repo", username="user", password="github_token")
AsyncGit.pull
@intercept_errors(message_prefix="Failed to pull changes: ")async def pull(path: str, username: Optional[str] = None, password: Optional[str] = None) -> None
Pulls changes from the remote repository. If the remote repository requires authentication, provide username and password/token.
Arguments:
path
str - Path to the Git repository root. Relative paths are resolved based on the user’s root directory.username
Optional[str] - Git username for authentication.password
Optional[str] - Git password or token for authentication.
Example:
# Pull without authenticationawait sandbox.git.pull("workspace/repo")
# Pull with authenticationawait sandbox.git.pull( path="workspace/repo", username="user", password="github_token")
AsyncGit.status
@intercept_errors(message_prefix="Failed to get status: ")async def status(path: str) -> GitStatus
Gets the current Git repository status.
Arguments:
path
str - Path to the Git repository root. Relative paths are resolved based on the user’s root directory.
Returns:
GitStatus
- Repository status information including:- current_branch: Current branch name
- file_status: List of file statuses
- ahead: Number of local commits not pushed to remote
- behind: Number of remote commits not pulled locally
- branch_published: Whether the branch has been published to the remote repository
Example:
status = await sandbox.git.status("workspace/repo")print(f"On branch: {status.current_branch}")print(f"Commits ahead: {status.ahead}")print(f"Commits behind: {status.behind}")
GitCommitResponse
class GitCommitResponse()
Response from the git commit.
Attributes:
sha
str - The SHA of the commit