GitHarbor
GitHarbor User Guide
GitHarbor is a unified interface for interacting with Git hosting platforms. It provides a consistent API to work with repositories hosted on GitHub, GitLab, Azure DevOps, Gitea, CodeBerg and Bitbucket.
Getting Started
The main entry point is the create_repository() function which accepts a repository URL and platform-specific credentials:
from githarbor import create_repository
# GitHub repository
repo = create_repository("https://github.com/owner/repo", token="github_pat_...")
# GitLab repository
repo = create_repository("https://gitlab.com/owner/repo", token="glpat-...")
# Azure DevOps repository
repo = create_repository(
"https://dev.azure.com/org/project/_git/repo",
token="azure_pat"
)
[!TIP] Always use personal access tokens (PATs) for authentication. Never hardcode tokens in your source code.
Working with Repositories
Basic Repository Information
# Get repository name and default branch
print(repo.name)
print(repo.default_branch)
# Get language statistics
languages = repo.get_languages()
# Returns: {"Python": 10000, "JavaScript": 5000}
# Get recent activity statistics
activity = repo.get_recent_activity(
days=30,
include_commits=True,
include_prs=True,
include_issues=True
)
Branches and Tags
# List all branches
branches = repo.list_branches()
# Get specific branch
main_branch = repo.get_branch("main")
# List all tags
tags = repo.list_tags()
# Get specific tag
tag = repo.get_tag("v1.0.0")
# Compare branches
diff = repo.compare_branches(
base="main",
head="feature",
include_commits=True,
include_files=True,
include_stats=True
)
Commits
# Get specific commit
commit = repo.get_commit("abcd1234")
# List commits with filters
commits = repo.list_commits(
branch="main",
since=datetime(2024, 1, 1),
until=datetime(2024, 2, 1),
author="username",
path="src/",
max_results=100
)
# Search commits
results = repo.search_commits(
query="fix bug",
branch="main",
path="src/",
max_results=10
)
Issues and Pull Requests
# List open issues
open_issues = repo.list_issues(state="open")
# Get specific issue
issue = repo.get_issue(123)
# List pull requests
prs = repo.list_pull_requests(state="open") # or "closed" or "all"
# Get specific pull request
pr = repo.get_pull_request(456)
Releases
# Get latest release
latest = repo.get_latest_release(
include_drafts=False,
include_prereleases=False
)
# List all releases
releases = repo.list_releases(
include_drafts=False,
include_prereleases=True,
limit=10
)
# Get specific release
release = repo.get_release("v1.0.0")
Repository Content
# Download single file
repo.download(
path="README.md",
destination="local/README.md"
)
# Download directory recursively
repo.download(
path="src/",
destination="local/src",
recursive=True
)
# Iterate through files
for file_path in repo.iter_files(
path="src/",
ref="main",
pattern="*.py"
):
print(file_path)
CI/CD Workflows
# List all workflows
workflows = repo.list_workflows()
# Get specific workflow
workflow = repo.get_workflow("workflow_id")
# Get specific workflow run
run = repo.get_workflow_run("run_id")
Contributors
# Get repository contributors
contributors = repo.get_contributors(
sort_by="commits", # or "name" or "date"
limit=10
)
Error Handling
GitHarbor provides specific exceptions for different error cases:
from githarbor.exceptions import (
RepositoryNotFoundError,
ResourceNotFoundError,
FeatureNotSupportedError
)
try:
repo = create_repository("https://github.com/nonexistent/repo")
except RepositoryNotFoundError:
print("Repository does not exist")
try:
issue = repo.get_issue(999999)
except ResourceNotFoundError:
print("Issue does not exist")
try:
repo.some_unsupported_method()
except FeatureNotSupportedError:
print("This feature is not supported by this repository provider")
[!NOTE] Not all features are supported by all platforms. Operations that aren't supported will raise
FeatureNotSupportedError.
[!IMPORTANT] Be mindful of API rate limits when making many requests. Consider implementing retries and delays in your code.
Metadata
Release files for githarbor 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| githarbor-1.0.2.tar.gz | 66.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| githarbor-1.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 158.1 kB
Release files / githarbor-1.0.2.tar.gz
| Download URL | githarbor-1.0.2.tar.gz |
|---|---|
| Size | 66.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6df681fa04d8e951f8b1af508a44362d48cf88440037714b07be7fa589a6018e
|
|
BLAKE2b-256 checksum How to use checksums |
1600fffef32d9dd820616d346964c9cabb91fa3fc404483e3575c3a62f3137b8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.16 {"installer":{"name":"uv","version":"0.9.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"25.10","id":"questing","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / githarbor-1.0.2-py3-none-any.whl
| Download URL | githarbor-1.0.2-py3-none-any.whl |
|---|---|
| Size | 91.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5c1ec1eb78d028a3f68188cec1e32ca5f6ffae4a90749a81513172afcfb3394e
|
|
BLAKE2b-256 checksum How to use checksums |
bb70d546991d92c686dd3ee594497b52721f6750f5233abad5133b021fbab35e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.16 {"installer":{"name":"uv","version":"0.9.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"25.10","id":"questing","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|