Files
next.orly.dev/scripts/GITEA_MIGRATION.md
2025-11-21 22:40:03 +00:00

228 lines
6.1 KiB
Markdown

# Gitea Repository Migration Guide
This guide explains how to migrate your existing Git repositories from `/home/mleku/Documents/github` to your Gitea installation.
## Prerequisites
1. **Gitea is installed and running** on your VPS (use `giteainstall.sh`)
2. **You have completed the Gitea setup wizard** and created an admin account
3. **SSH access** to your VPS (if migrating to remote server)
4. **Git is installed** on your local machine
## Step 1: Generate Gitea API Token
1. Log in to your Gitea instance at `http://your-vps-ip:3000`
2. Click on your avatar → **Settings**
3. Navigate to **Applications****Manage Access Tokens**
4. Click **Generate New Token**
5. Give it a name (e.g., "migration")
6. Select the following scopes:
- `read:repository`
- `write:repository`
- `read:user`
- `write:user`
- Or simply select **all** scopes for convenience
7. Click **Generate Token**
8. **Copy the token** (you won't be able to see it again!)
## Step 2: Configure Environment Variables
On your **local machine** (where the repositories are), set up the configuration:
```bash
# Gitea API token (required)
export GITEA_TOKEN="your-token-here"
# Gitea URL (update with your VPS IP or domain)
export GITEA_URL="http://your-vps-ip:3000"
# VPS SSH connection (if migrating to remote server)
# Format: user@hostname or user@ip
export VPS_HOST="mleku@your-vps-ip"
# Source directory (default is /home/mleku/Documents/github)
export SOURCE_DIR="/home/mleku/Documents/github"
```
### For Local Gitea Installation
If Gitea is installed locally (on the same machine as the repos):
```bash
export GITEA_TOKEN="your-token-here"
export GITEA_URL="http://localhost:3000"
# Don't set VPS_HOST
```
## Step 3: Test with Dry Run
Before actually migrating, do a dry run to see what would happen:
```bash
DRY_RUN=true ./scripts/gitea-migrate-repos.sh
```
This will:
- Check connectivity to Gitea
- List all repositories to be migrated
- Show what would be created
- **Not make any actual changes**
## Step 4: Run the Migration
Once you've verified the dry run looks good:
```bash
./scripts/gitea-migrate-repos.sh
```
The script will:
1. Connect to Gitea and verify your token
2. Scan for all Git repositories in the source directory
3. Ask for confirmation before proceeding
4. For each repository:
- Check if it already exists in Gitea
- Create the repository via API (if it doesn't exist)
- Push all branches and tags to Gitea
- Report success or failure
5. Display a summary at the end
## Step 5: Verify Migration
After the migration completes:
1. Visit your Gitea instance: `http://your-vps-ip:3000`
2. Check that all repositories are visible
3. Browse a few repositories to verify the content
4. Check that branches and tags were migrated
## Configuration Options
The script supports several environment variables:
| Variable | Description | Default | Required |
|----------|-------------|---------|----------|
| `GITEA_TOKEN` | Gitea API token | - | Yes |
| `GITEA_URL` | Gitea server URL | `http://localhost:3000` | No |
| `VPS_HOST` | SSH host for VPS | - | No (if local) |
| `SOURCE_DIR` | Source repo directory | `/home/mleku/Documents/github` | No |
| `DRY_RUN` | Dry run mode | `false` | No |
## SSH Configuration for Remote VPS
If migrating to a remote VPS, ensure SSH access is configured:
```bash
# Test SSH connection
ssh mleku@your-vps-ip
# Set up SSH key if not already done
ssh-copy-id mleku@your-vps-ip
```
### SSH Port Configuration
By default, Gitea uses SSH port **2222** (to avoid conflicts with system SSH on port 22).
If you need to use a different SSH port, you'll need to:
1. Update Gitea configuration in `/home/mleku/gitea/custom/conf/app.ini`:
```ini
[server]
SSH_LISTEN_PORT = 2222 # Change this to your preferred port
```
2. Restart Gitea:
```bash
sudo systemctl restart gitea
```
## Troubleshooting
### "Cannot connect to Gitea"
- Check that Gitea is running: `sudo systemctl status gitea`
- Verify the URL is correct
- Check firewall rules if accessing remotely
### "Invalid Gitea token"
- Regenerate the token in Gitea settings
- Make sure you copied the entire token
- Verify the token has the necessary scopes
### "Failed to push"
- Check SSH connectivity: `ssh -p 2222 mleku@your-vps-ip`
- Verify SSH keys are set up correctly
- Check Gitea logs: `sudo journalctl -u gitea -f`
### "Repository already exists"
The script will skip repositories that already exist. You can:
- Answer "y" when prompted to push updates to existing repos
- Delete the repo in Gitea and run the script again
- Manually push updates using git
## Example: Complete Migration
Here's a complete example for migrating to a VPS:
```bash
# 1. Set up environment
export GITEA_TOKEN="a1b2c3d4e5f6g7h8i9j0"
export GITEA_URL="http://192.168.1.100:3000"
export VPS_HOST="mleku@192.168.1.100"
# 2. Test connection and do dry run
DRY_RUN=true ./scripts/gitea-migrate-repos.sh
# 3. Review output, then run actual migration
./scripts/gitea-migrate-repos.sh
# 4. Confirm when prompted
# Press 'y' to continue
# 5. Wait for migration to complete
# The script will show progress for each repository
# 6. Review summary
# Check for any failures and investigate
```
## Post-Migration
After successful migration:
1. **Update remote URLs** in your local development repositories:
```bash
cd /home/mleku/Documents/github/your-repo
git remote set-url origin http://your-vps-ip:3000/mleku/your-repo.git
```
2. **Set up SSH URLs** for password-less push (recommended):
```bash
git remote set-url origin ssh://mleku@your-vps-ip:2222/mleku/your-repo.git
```
3. **Test push/pull**:
```bash
git pull origin main
git push origin main
```
## Statistics
Your migration includes:
- **86 repositories** found in `/home/mleku/Documents/github`
- All branches will be migrated
- All tags will be migrated
- Repository descriptions will be extracted from README.md or .git/description
## Support
If you encounter issues:
1. Check Gitea logs: `sudo journalctl -u gitea -f`
2. Enable verbose Git output: `GIT_TRACE=1 ./scripts/gitea-migrate-repos.sh`
3. Check the script output for specific error messages