Moving from GitHub to Kizuna? This guide covers everything you need for a smooth transition.
What Migrates
| Data | Migration Path |
|---|---|
| Git repositories | Native — full history preserved |
| Issues | API import or CSV export |
| Pull requests | Manual or API-based |
| Wikis | Git-based, easily migrated |
| GitHub Actions | Convert to Kizuna Actions |
| Webhooks | Recreate in Kizuna |
| SSH keys | Re-add to Kizuna |
Repository Migration
Method 1: Direct Mirror (Recommended)
Kizuna can mirror GitHub repositories, preserving full history:
bash
# In Kizuna web UI
1. Go to **New Repository** → **Import**
2. Select **Import from GitHub**
3. Enter GitHub URL: `https://github.com/user/repo.git`
4. Enter your GitHub credentials (or use access token)
5. Select visibility settings
6. Click **Import**Method 2: Manual Git Migration
bash
# Clone from GitHub with all branches
git clone --mirror https://github.com/user/repo.git
cd repo.git
# Push to Kizuna
git push --mirror https://kizuna.yourdomain.com/your-org/repo
# Clean up
cd ..
rm -rf repo.gitMethod 3: Using Migration Script
For bulk migrations:
bash
# Install migration tool
curl -sSL https://migrate.kizuna.codes/install | bash
# Run migration
kizuna-migrate github \
--source-org my-github-org \
--target-org my-kizuna-org \
--token $GITHUB_TOKEN \
--repos "repo1,repo2,repo3"Issues Migration
Export from GitHub
bash
# Using GitHub CLI
gh issue list --repo user/repo --limit 1000 --json number,title,body,labels,assignees,state > issues.jsonImport to Kizuna
bash
# Using Kizuna API
curl -X POST https://kizuna.yourdomain.com/api/v1/repos/your-org/repo/issues/bulk \
-H "Authorization: Bearer $KIZUNA_TOKEN" \
-H "Content-Type: application/json" \
-d @issues.jsonCI/CD Migration
GitHub Actions → Kizuna Actions
Kizuna Actions is syntax-compatible with GitHub Actions. Most workflows work with minimal changes:
Before (GitHub Actions)
yaml
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm testAfter (Kizuna Actions)
yaml
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm testMost workflows work unchanged!
Changes to Make
| GitHub | Kizuna |
|---|---|
GITHUB_TOKEN | KIZUNA_TOKEN |
github.event.pull_request | kizuna.event.pull_request |
actions/github-script | kizuna/script |
Secrets Migration
- In GitHub: Settings → Secrets → Actions
- Export secrets (manual copy)
- In Kizuna: Settings → CI/CD → Secrets
- Add each secret with the same name
Webhooks Migration
Export GitHub Webhooks
bash
gh api repos/:owner/:repo/hooks > webhooks.jsonRecreate in Kizuna
- Go to Settings → Webhooks
- Click Add Webhook
- Configure:
- Payload URL: Same as GitHub
- Content Type:
application/json - Secret: Same secret as GitHub
- Events: Select same events
- Click Add Webhook
Bot & Integration Migration
Dependabot → Renovate
Kizuna doesn't include Dependabot, but Renovate works great:
- Add
renovate.jsonto repository:
json
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:recommended"],
"endpoint": "https://kizuna.yourdomain.com/api/v1"
}- Configure Renovate with your Kizuna token
GitHub Apps
Most GitHub Apps won't work directly. Alternatives:
| GitHub App | Kizuna Alternative |
|---|---|
| Codecov | Built-in coverage reporting |
| SonarCloud | Native in PR diff view |
| Snyk | Built-in vulnerability scanning |
| Stale | Built-in issue management |
Team & Permissions Migration
Organization Structure
- Create organizations in Kizuna matching your GitHub structure
- Invite team members via email
- Set up teams with corresponding permissions
Permission Mapping
| GitHub | Kizuna |
|---|---|
| Read | Read |
| Triage | Read + Issue management |
| Write | Write |
| Maintain | Maintain |
| Admin | Admin |
SSH Key Migration
Your existing SSH keys work with Kizuna:
- Go to Settings → SSH Keys
- Click New SSH Key
- Paste your existing public key
- Add a descriptive title
Or use the same ~/.ssh/config:
Host kizuna
HostName kizuna.yourdomain.com
User git
IdentityFile ~/.ssh/id_rsaPost-Migration Checklist
- [ ] All repositories imported with full history
- [ ] Issues migrated with labels and assignees
- [ ] CI/CD workflows converted and tested
- [ ] Secrets configured in repository settings
- [ ] Webhooks recreated and tested
- [ ] Team members invited and permissions set
- [ ] Branch protection rules configured
- [ ] SSH keys added for all developers
- [ ] Documentation updated with new URLs
- [ ] Update remote URLs in local clones:bash
git remote set-url origin https://kizuna.yourdomain.com/org/repo
Keeping GitHub as Mirror
During transition, you can mirror Kizuna back to GitHub:
bash
# In repository settings, add mirror URL
# Kizuna will push all changes to GitHub automaticallyTroubleshooting
Large File Migration
For repositories with large files:
bash
# Use git-lfs
kizuna-migrate github --source-org org --target-org org --use-lfsSubmodule Migration
Submodules migrate as regular Git references:
bash
# After migration, update .gitmodules URLs
git submodule update --init --recursiveNext Steps
- Set up AI agents — Enable autonomous development workflows
- Configure branch protection — Protect your main branch
- Learn Jujutsu workflows — Master the new version control model