0w0

2026/05

깃 저장소를 codeberg로 옮겼다.

깃허브, 깃랩에 있는 것을 선별해서 옮겨보니 실질적으로 약 240여개의 레포지토리에서 옮길만한 것은 12개 남짓이었다.

반성하게된다.

이런 생각이 있었는데 불필요한 것들을 걷어내고 보니 부족함이 많아 변화방법을 고심중이다.

레포지토리 전체를 옮기려고 파워쉘 스크립트를 실행해 옮겼다.

# --- 설정 부분 ---
$githubToken = "여기에_GITHUB_토큰_입력"
$codebergToken = "여기에_CODEBERG_토큰_입력"
$githubUser = "본인의_GITHUB_ID"
# ----------------

$headers_gh = @{ "Authorization" = "token $githubToken" }
$headers_cb = @{ 
    "Authorization" = "token $codebergToken"
    "Content-Type"  = "application/json"
}

# 1. GitHub에서 모든 저장소 정보 가져오기
echo "GitHub에서 저장소 목록을 불러오는 중..."
$url_gh = "https://api.github.com/user/repos?per_page=1000&type=owner"
$repos = Invoke-RestMethod -Uri $url_gh -Headers $headers_gh

echo "총 $($repos.Count)개의 저장소를 발견했습니다."

# 2. 반복문 돌며 Codeberg로 이행 명령 전송
foreach ($repo in $repos) {
    $name = $repo.name
    $isPrivate = $repo.private # GitHub의 공개/비공개 여부 그대로 가져옴
    
    echo "------------------------------------------------"
    echo "이행 시작: $name (Private: $isPrivate)"
    
    $body = @{
        "clone_addr" = $repo.clone_url
        "mirror"     = $false   # 지속적 동기화를 원하면 $true로 변경
        "repo_name"  = $name
        "private"    = $isPrivate
        "auth_token" = $githubToken
    } | ConvertTo-Json

    try {
        $response = Invoke-RestMethod -Method Post -Uri "https://codeberg.org/api/v1/repos/migrate" -Headers $headers_cb -Body $body
        echo "성공: $name 이행 요청 완료"
    } catch {
        echo "오류 발생 ($name): $_"
    }

    # 3. 과부하 방지를 위해 2초간 대기 (sleep)
    echo "안전을 위해 2초간 대기합니다..."
    Start-Sleep -Seconds 2
}

echo "------------------------------------------------"
echo "모든 작업이 완료되었습니다!"

다 옮겨지지 않아 내용을 보니 codeberg는 레포지토리 생성이 100개까지만 가능하기 때문에 그런 것이었다.