Kizuna provides full version control hosting built on Jujutsu, with complete Git compatibility.
Repository Basics
Creating a Repository
Via web UI:
- Click New Repository
- Choose organization
- Enter name and description
- Select visibility (Public/Internal/Private)
- Optional: Initialize with README
Via API:
bash
curl -X POST /api/v1/repos/my-org \
-H "Authorization: Bearer $TOKEN" \
-d '{"name": "my-project", "visibility": "private"}'Cloning
With Jujutsu (recommended):
bash
jj git clone https://kizuna.example.com/org/repo
cd repoWith Git:
bash
git clone https://kizuna.example.com/org/repo
cd repoWorking with Changes
The Jujutsu Model
In Jujutsu, your working directory is always a commit:
bash
# Make a change
echo "Hello" > greeting.txt
# It's already committed!
jj log
# @ mnxpqkpv 2 minutes ago main git_head()
# │ Add greeting
# ◉ mzvwuvkv 10 minutes ago
# │ Initial commitCreating New Changes
bash
# Start from main
jj new main -m "Add feature"
# Edit files...
# The change exists immediately
jj logDescribing Changes
Update the commit message:
bash
jj describe -m "Better description"Or use the default editor:
bash
jj describeViewing Diffs
bash
# Current change
jj diff
# Specific change
jj diff -r abc123
# Between changes
jj diff -r abc123 -r def456Git Compatibility
Push to Git Remotes
bash
jj git push originFetch from Git Remotes
bash
jj git fetch originColocated Repositories
Work with both jj and git commands:
bash
# Initialize colocated
jj git init --colocate
# Use either tool
echo "change" > file.txt
jj status # See jj view
git status # See git viewRepository Settings
Visibility
- Public: Anyone can view, clone, fork
- Internal: Organization members only
- Private: Explicit collaborators only
Default Branch
Configure in Settings → Repository:
- Default branch name (default:
main) - Protection rules
Archive
Make repository read-only:
bash
# Via API
curl -X PATCH /api/v1/repos/org/repo \
-d '{"archived": true}'Advanced Operations
Rebase
bash
# Rebase current change onto main
jj rebase -d main
# Rebase specific change
jj rebase -s abc123 -d mainSquash
bash
# Squash into parent
jj squash
# Squash specific changes
jj squash --from abc123 --into def456Split
bash
# Split current change interactively
jj splitAbandon
bash
# Remove a change
jj abandon abc123Best Practices
- Use descriptive messages — Clear intent helps reviewers
- Keep changes small — Easier to review, less conflict
- Rebase before push — Linear history is easier to follow
- Leverage anonymous branches — Experiment without naming
- Use
jj undo— Don't fear mistakes
Troubleshooting
Permission Denied
Ensure you have access:
bash
# Check repository visibility in web UI
# Verify SSH key: Settings → SSH KeysLarge File Issues
Use Git LFS:
bash
jj git lfs track "*.psd"Operation Conflicts
bash
# View operation log
jj op log
# Undo problematic operation
jj undoNext Steps
- Working with Changes — Deep dive into Jujutsu workflows
- Conflicts & Resolution — Handle merge conflicts
- Operation Log — Time travel debugging