- Khi chuyển một số dự án từ GitHub sang Codeberg, bài viết tổng hợp cách bắt đầu quá trình chuyển đổi với ít công sức nhất
- Thông qua tính năng nhập kho lưu trữ của Codeberg, có thể chuyển đầy đủ cả issue, PR và release, đồng thời giao diện và quy trình làm việc tương tự GitHub
- Lưu trữ trang tĩnh có thể được thay thế bằng codeberg.page, và cũng có các lựa chọn khác như grebedoc.dev hay statichost.eu
- Khó khăn lớn nhất là thiết lập môi trường CI, vì phải từ bỏ runner macOS và dung lượng chạy miễn phí của GitHub, nhưng có thể thay bằng Forgejo Actions hoặc Woodpecker CI
- Sau khi chuyển, có thể giữ kho GitHub ở trạng thái lưu trữ chỉ đọc hoặc mirror, để không cắt đứt hoàn toàn kết nối với hệ sinh thái mã nguồn mở
Quá trình chuyển từ GitHub sang Codeberg
- Dựa trên trải nghiệm bắt đầu chuyển một số kho lưu trữ từ GitHub sang Codeberg, bài viết giải thích mức độ khó và sự thuận tiện của quá trình migration thực tế
- Tác giả từng trì hoãn vì nghĩ Codeberg chưa đủ sẵn sàng, nhưng tùy dự án thì việc chuyển có thể đơn giản hơn mong đợi
- Mục tiêu không phải là thiết lập hoàn hảo mà là tìm ra cách dễ nhất để bắt đầu việc chuyển đổi
-
Chuyển kho lưu trữ và issue
- Codeberg cung cấp tính năng import kho GitHub, cho phép chuyển cả issue, PR, release và các artifact liên quan
- Trong quá trình này, số issue, nhãn và thông tin tác giả được giữ nguyên
- Giao diện của Codeberg gần như giống GitHub, mang lại trải nghiệm đơn giản hơn nhiều so với các thủ tục phức tạp thường cần khi chuyển từ tracker khác sang GitHub
-
Lưu trữ trang tĩnh
- Nếu đang dùng GitHub Pages, có thể thay bằng codeberg.page
- Dù không có cam kết mức độ sẵn sàng (SLO) chính thức, tác giả nói rằng trên thực tế chưa từng gặp downtime
- Cách hoạt động là push HTML lên một branch, với cấu trúc tương tự GitHub Pages
- Ngoài ra cũng có thể dùng grebedoc.dev hoặc statichost.eu
-
Khó khăn của môi trường CI (tích hợp liên tục)
- Phần khó nhất trong quá trình migration là thiết lập môi trường CI
- GitHub cung cấp runner macOS miễn phí và dung lượng chạy không giới hạn cho kho công khai, nhưng khi sang Codeberg thì phải chấp nhận từ bỏ các lợi ích này
- Có thể giải quyết bằng cách tận dụng cross-compile theo từng ngôn ngữ và tự host runner cho Forgejo Actions
-
Forgejo Actions vs Woodpecker CI
- Trên Codeberg, Woodpecker CI ổn định hơn, nhưng Forgejo Actions mang lại môi trường quen thuộc hơn cho người dùng GitHub Actions
- Giao diện và cú pháp YAML gần như giống hệt, nên phần lớn workflow GitHub Actions hiện có vẫn chạy nguyên trạng
- Ví dụ, phần dùng
uses: dtolnay/rust-toolchain trong GitHub Actions
trên Forgejo Actions chỉ cần đổi thành uses: https://github.com/dtolnay/rust-toolchain
- Tài liệu Forgejo Actions hiện tại của Codeberg chưa được cập nhật mới nhất, và đã có PR liên quan
-
Khi cần runner macOS
- Nếu thực sự cần build trên macOS, có thể tiếp tục dùng GitHub Actions và mirror commit từ kho Codeberg sang GitHub
- Có thể cấu hình để Forgejo Actions polling GitHub API và đồng bộ trạng thái CI về Codeberg
- Tác giả cũng đã thử các dịch vụ CI khác có hỗ trợ build macOS, nhưng việc tích hợp với Codeberg không đơn giản bằng GitHub Actions
-
Cách xử lý kho GitHub
- Sau khi chuyển xong, kho GitHub được sửa README rồi đưa vào trạng thái lưu trữ
- Cũng có thể cấu hình để push commit từ Codeberg sang GitHub, nhưng khi đó người dùng vẫn có thể tạo PR và bình luận vào issue
- Một số dự án tắt tính năng issue trên kho GitHub, nhưng làm vậy thì toàn bộ issue sẽ biến mất dưới dạng 404 và không thể tắt PR
- Ví dụ, kho
libvirt/libvirt dùng một GitHub Action tự động đóng tất cả PR
- Cách tiếp cận này có thể gây ảnh hưởng tiêu cực đến việc tự host và toàn bộ hệ sinh thái mã nguồn mở
- Người dùng có thể mất động lực cải thiện tối ưu build hoặc tần suất tải xuống file phát hành
- Trong giai đoạn chuyển tiếp, cũng có thể cân nhắc duy trì mirror chỉ đọc hoặc tiếp tục dùng song song GitHub Pages và Actions
1 bình luận
Ý kiến trên Hacker News
Tôi không ghét Codeberg, nhưng nó không phải bản thay thế hoàn chỉnh cho GitHub
Có khá nhiều hạn chế nếu muốn đưa kho mã cá nhân hoặc script thử nghiệm lên, và repo riêng tư bị giới hạn ở 100MB
Cũng không thể host homepage như GitHub Pages. Với các nhu cầu như vậy, giải pháp thực tế hơn là tự host Forgejo
Nội dung liên quan được tổng hợp khá rõ trong Codeberg FAQ
Lý do tôi đưa các dự án OSS lên GitHub rất đơn giản — cộng đồng ở đó
Nếu chỉ cần đăng code thì tôi tự host trực tiếp bằng SSH hoặc SFTP
Tôi chỉ đăng lên instance Gitea cá nhân của mình và không bận tâm đến star hay quảng bá
Tôi đang quản lý mọi dự án cá nhân bằng Forgejo tự host. Hoàn toàn không nhớ GitHub
Có thể giới hạn truy cập bằng Tailscale để chặn AI crawler
Có lẽ việc đánh giá các lựa chọn thay thế GitHub sẽ ngày càng quan trọng
Nhưng GitHub đã gần như đặt ra tiêu chuẩn CI và build đa kiến trúc, nên các lựa chọn thay thế do cộng đồng dẫn dắt rất khó cạnh tranh
GitHub cung cấp nhiều thứ “miễn phí”, nhưng đổi lại dữ liệu có khả năng bị thu thập và dùng để huấn luyện
Codeberg không hỗ trợ repo riêng tư, nên cũng không thể ngăn Copilot quét repo công khai
Theo Codeberg FAQ, nếu cần dự án riêng tư thì họ khuyến nghị tự host Forgejo
Công ty chúng tôi đã chuyển hoàn toàn từ GitHub sang GitLab tự host
Đặt sau Tailscale nên không phải lo gánh nặng SSO, còn CI runner thì chạy trên EKS và cụm GPU. Tôi có thể giúp những ai đang cân nhắc một đợt chuyển đổi tương tự
Chỉ nói “hãy thay thế GitHub” thì không có nhiều ý nghĩa. Cần thói quen mới và đề xuất giá trị mới
Giống như GitHub từng thay thế SourceForge, nền tảng thế hệ tiếp theo phải kết nối việc viết code và cộng tác theo thời gian thực
Ví dụ, nó có thể trở thành một cấu trúc mà mỗi prompt đều tạo ra một commit, kiểu như Google Docs
Codeberg thì lý tưởng, nhưng thực tế lại có vấn đề ổn định đáng kể
Vì vận hành mà không dùng Cloudflare nên dễ tổn thương trước tấn công DDoS và downtime xảy ra khá thường xuyên. Khi đang phát triển mà không truy cập được remote repo thì thực sự rất khó chịu
Từ sau khi Microsoft mua lại, tôi gần như không dùng GitHub nữa. Tôi lại thích workflow email đơn giản của Sourcehut hơn
Tôi cũng nghĩ CI chỉ cần ở mức dựa trên các lệnh có thể chạy được trên local là đủ
Kho lưu trữ mã về bản chất nên có cấu trúc phân tán/liên hợp
Nhờ cơ chế chữ ký mật mã (GPG/SSH) của git, có thể tách riêng độ tin cậy của kho lưu trữ và độ tin cậy của commit
Chỉ cần để phần máy chủ trung tâm lo key server và quản lý namespace, còn lại thì phân tán là được