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.gitSupported Operations
git clonegit fetch/git pullgit pushgit 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 mainGit Hooks
Git hooks work normally:
bash
# In .git/hooks/pre-commit
#!/bin/bash
npm testGit Attributes
.gitattributes is respected:
*.psd filter=lfs diff=lfs merge=lfs -text
*.pdf diff=pdfGit 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 pushKizuna 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 --recursiveGitHub 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 GitHubAutomated Mirroring
Configure in repository settings:
- Settings → Mirroring
- Add GitHub URL
- Configure credentials
- 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 mainIDE Integration
VS Code
Use Git extensions normally:
- Clone repository
- Open in VS Code
- Use Source Control panel
- Or use Jujutsu extension for native jj support
IntelliJ / JetBrains
Standard Git integration works:
- File → New → Project from Version Control
- Enter Kizuna URL
- 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 mainKizuna 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 --mirrorSSH Key Setup
Generate Key
bash
ssh-keygen -t ed25519 -C "your@email.com"Add to Kizuna
- Settings → SSH Keys
- Copy
~/.ssh/id_ed25519.pub - Paste and save
Configure SSH
~/.ssh/config:
Host kizuna
HostName kizuna.example.com
User git
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yesThen:
bash
git clone kizuna:org/repo.gitTroubleshooting
Authentication Failed
bash
# Test SSH
ssh -T git@kizuna.example.com
# Check key is added
cat ~/.ssh/id_ed25519.pub
# Copy to Settings → SSH KeysLarge 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.gitSlow Clone
bash
# Shallow clone first
git clone --depth 1 https://kizuna.example.com/org/repo.git
# Then deepen
cd repo
git fetch --unshallowSummary
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.