Skip to content

Kizuna provides full version control hosting built on Jujutsu, with complete Git compatibility.

Repository Basics

Creating a Repository

Via web UI:

  1. Click New Repository
  2. Choose organization
  3. Enter name and description
  4. Select visibility (Public/Internal/Private)
  5. 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 repo

With Git:

bash
git clone https://kizuna.example.com/org/repo
cd repo

Working 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 commit

Creating New Changes

bash
# Start from main
jj new main -m "Add feature"
# Edit files...

# The change exists immediately
jj log

Describing Changes

Update the commit message:

bash
jj describe -m "Better description"

Or use the default editor:

bash
jj describe

Viewing Diffs

bash
# Current change
jj diff

# Specific change
jj diff -r abc123

# Between changes
jj diff -r abc123 -r def456

Git Compatibility

Push to Git Remotes

bash
jj git push origin

Fetch from Git Remotes

bash
jj git fetch origin

Colocated 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 view

Repository Settings

Visibility

  • Public: Anyone can view, clone, fork
  • Internal: Organization members only
  • Private: Explicit collaborators only

Default Branch

Configure in SettingsRepository:

  • 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 main

Squash

bash
# Squash into parent
jj squash

# Squash specific changes
jj squash --from abc123 --into def456

Split

bash
# Split current change interactively
jj split

Abandon

bash
# Remove a change
jj abandon abc123

Best Practices

  1. Use descriptive messages — Clear intent helps reviewers
  2. Keep changes small — Easier to review, less conflict
  3. Rebase before push — Linear history is easier to follow
  4. Leverage anonymous branches — Experiment without naming
  5. 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 Keys

Large File Issues

Use Git LFS:

bash
jj git lfs track "*.psd"

Operation Conflicts

bash
# View operation log
jj op log

# Undo problematic operation
jj undo

Next Steps