Skip to content

Kizuna is fully Git-compatible. Use Git clients, integrate with GitHub/GitLab, and migrate seamlessly.

Git Protocol Support

Kizuna implements the Git Smart HTTP protocol:

# Clone via HTTPS
git clone https://kizuna.example.com/org/repo.git

# Clone via SSH
git clone git@kizuna.example.com:org/repo.git

Supported Operations

  • git clone
  • git fetch / git pull
  • git push
  • git ls-remote
  • All standard Git operations

Colocated Repositories

Work with both Jujutsu and Git simultaneously:

bash
# Initialize colocated repo
jj git init --colocate my-project
cd my-project

# Use jj for daily work
echo "hello" > file.txt
jj log

# Use git when needed
git log
git status

# Push via either tool
jj git push
# or
git push origin main

Git Hooks

Git hooks work normally:

bash
# In .git/hooks/pre-commit
#!/bin/bash
npm test

Git Attributes

.gitattributes is respected:

*.psd filter=lfs diff=lfs merge=lfs -text
*.pdf diff=pdf

Git LFS

Large File Storage is fully supported:

bash
# Setup
git lfs install

# Track files
git lfs track "*.psd"
git lfs track "*.mov"

# Use normally
git add design.psd
git commit -m "Add design"
git push

Kizuna stores LFS objects in configured object storage (S3/R2/MinIO).

Submodules

Git submodules work as expected:

bash
# Add submodule
git submodule add https://github.com/user/lib.git libs/lib

# Clone with submodules
git clone --recurse-submodules https://kizuna.example.com/org/repo.git

# Update submodules
git submodule update --init --recursive

GitHub Integration

Mirror to GitHub

Keep GitHub as backup/mirror:

bash
# Add GitHub as second remote
git remote add github https://github.com/user/repo.git

# Push to both
jj git push  # To Kizuna
git push github main  # To GitHub

Automated Mirroring

Configure in repository settings:

  1. SettingsMirroring
  2. Add GitHub URL
  3. Configure credentials
  4. Enable automatic push

GitHub Actions → Kizuna Actions

See CI/CD Migration for converting workflows.

GitLab Integration

Similar to GitHub:

bash
# Mirror from GitLab
git remote add gitlab https://gitlab.com/user/repo.git

# Push to both
jj git push
git push gitlab main

IDE Integration

VS Code

Use Git extensions normally:

  1. Clone repository
  2. Open in VS Code
  3. Use Source Control panel
  4. Or use Jujutsu extension for native jj support

IntelliJ / JetBrains

Standard Git integration works:

  1. FileNewProject from Version Control
  2. Enter Kizuna URL
  3. Use VCS features normally

Vim / Neovim

vim
" Fugitive works normally
:Gstatus
:Gpush
:Gpull

" Or use jj plugins
Plug 'martinvonz/jj'

CI/CD Integration

GitHub Actions Calling Kizuna

yaml
name: Sync to Kizuna
on: [push]
jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: |
          git remote add kizuna https://kizuna.example.com/org/repo.git
          git push kizuna main

Kizuna Pipelines Triggering GitHub

yaml
name: Mirror to GitHub
on: [push]
jobs:
  mirror:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - run: |
          git remote add github https://github.com/org/repo.git
          git push github main --mirror

SSH Key Setup

Generate Key

bash
ssh-keygen -t ed25519 -C "your@email.com"

Add to Kizuna

  1. SettingsSSH Keys
  2. Copy ~/.ssh/id_ed25519.pub
  3. Paste and save

Configure SSH

~/.ssh/config:

Host kizuna
    HostName kizuna.example.com
    User git
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes

Then:

bash
git clone kizuna:org/repo.git

Troubleshooting

Authentication Failed

bash
# Test SSH
ssh -T git@kizuna.example.com

# Check key is added
cat ~/.ssh/id_ed25519.pub
# Copy to Settings → SSH Keys

Large Push Failing

bash
# Increase buffer
git config http.postBuffer 524288000

# Or use SSH (no size limit)
git remote set-url origin git@kizuna.example.com:org/repo.git

Slow Clone

bash
# Shallow clone first
git clone --depth 1 https://kizuna.example.com/org/repo.git

# Then deepen
cd repo
git fetch --unshallow

Summary

Kizuna's Git compatibility means:

  • No forced migration — Use existing tools
  • Gradual adoption — Mix jj and git workflows
  • Ecosystem access — Integrate with GitHub/GitLab
  • Team flexibility — Each developer chooses their tool

While we recommend Jujutsu for the best experience, Git is always an option.