- Mô tả cụ thể quá trình và kết quả chuyển các dự án cá nhân và website từ GitHub sang Codeberg
- Dùng tính năng “migrate from GitHub” của Forgejo để chuyển đầy đủ kho lưu trữ, issue, PR, wiki và release
- Thực hiện đổi hướng liên kết và xử lý stub cho kho GitHub bằng script tự động để hiển thị rõ việc đã chuyển đi
- Trong chuyển CI/CD, tận dụng Forgejo Actions của Codeberg và xây dựng workflow gọn nhẹ phù hợp với các ràng buộc của môi trường
- Website được chuyển bằng git-pages và Grebedoc mà không bị gián đoạn, toàn bộ quá trình migration hoàn tất trong cuối tuần
Tổng quan migration
- Chuyển website đang host trên GitHub Pages và 45 kho lưu trữ sang Codeberg
- Không chỉ là vài cú nhấp chuột mà còn cần nhiều bước làm thủ công
- Toàn bộ quá trình được hoàn tất trong cuối tuần và diễn ra suôn sẻ, không gây bất tiện
- Mục đích là cho thấy các lập trình viên khác cũng có thể chuyển đi dễ dàng
Bước 1: Chuyển kho lưu trữ
- Codeberg dựa trên Forgejo và cung cấp tính năng “migrate from GitHub”
- Có thể tạo Personal Access Token (PAT) trên GitHub để mang cả metadata như issue sang cùng
- Do rate limit của GitHub API, nếu nhập nhiều kho cùng lúc thì có thể bị lỗi
- Issue, PR, wiki và release được chuyển hoàn chỉnh nên không còn cần tham chiếu GitHub
Bước 2: Đổi hướng liên kết
- Chuyển hàng loạt các liên kết GitHub trong kho cục bộ sang địa chỉ Codeberg
- Dùng lệnh
sed và find để tự động thay thế ở mức văn bản
- URL
git remote của từng kho cũng được đổi sang Codeberg rồi push lên tất cả các kho
Bước 3: Xử lý stub cho kho GitHub
- Thêm README thông báo đã chuyển vào các kho GitHub, đồng thời sửa phần mô tả và liên kết trang chủ sang Codeberg
- Viết script tự động để áp dụng hàng loạt cho nhiều kho
- Dùng lệnh
gh repo archive để chuyển kho sang trạng thái lưu trữ
Bước 4: Chuyển CI/CD
- Tài liệu CI của Codeberg nhấn mạnh nguyên tắc giảm thiểu tiêu thụ năng lượng
- Vì vậy chỉ giữ CI cho những dự án thực sự cần thiết như website, build tài liệu, v.v.
- Codeberg cung cấp hai lựa chọn CI là Woodpecker và Forgejo Actions
- Tác giả chọn Forgejo Actions vì tương tự GitHub Actions
- Những khác biệt chính
- Phần lớn Actions vẫn hoạt động nguyên trạng
- Chỉ có runner dành cho Linux, không có macOS hay Windows
- Phần mềm cài sẵn ít hơn và tài nguyên bị giới hạn hơn
- Dùng lazy runners có thể giúp phân tán tải và vận hành thân thiện hơn với môi trường
- Để cải thiện hiệu năng CI, tác giả từng dùng Docker image cài sẵn LaTeX, nhưng do vấn đề phiên bản nên quay lại image Ubuntu mặc định
Bước 5: Host lại website
- Tác giả định chuyển site đang chạy trên GitHub Pages sang Codeberg Pages, nhưng tính năng này hiện ở chế độ bảo trì
- Việc cập nhật đang bị trì hoãn vì độ phức tạp và vấn đề hiệu năng
- Thay vào đó, tác giả tìm thấy và sử dụng git-pages cùng Grebedoc
- Hỗ trợ upload trước khi đổi DNS, cho phép chuyển đổi không gián đoạn
- Hỗ trợ redirect phía máy chủ và custom header
- Việc chuyển hoàn tất mà vẫn giữ nguyên liên kết cũ (
eldred.fr/fortISSimO)
- Codeberg dự kiến trong tương lai sẽ chuyển dần sang git-pages
- Tác giả hài lòng hơn so với GitHub Pages nên đã ủng hộ Patreon cho nhà phát triển git-pages
Thời gian thực hiện
- Chuyển kho lưu trữ (bước 1~3): nửa ngày
- Chuyển CI (bước 4): nửa ngày
- Chuyển website (bước 5): mất vài ngày, bao gồm cả xử lý technical debt
- Nhìn chung hoàn tất trong cuối tuần, công việc đơn giản hơn dự kiến
Sau migration
- Website hoạt động bình thường, chỉ có nhánh master trên GitHub bị thu gọn
- Các permalink vẫn tiếp tục hoạt động
- Việc xóa kho GitHub hiện vẫn được hoãn lại vì không có redirect
- Tài khoản GitHub vẫn được giữ để đóng góp cho các dự án khác
- Khi chuyển sang Codeberg, số lượng contributor có thể giảm, nhưng một số người dùng đã tạo tài khoản Codeberg và tiếp tục đóng góp
Lời cảm ơn
- Catherine ‘whitequark’: vận hành git-pages và Grebedoc
- Đội ngũ SERVFAIL network: cung cấp DNS
- Những người đóng góp cho Codeberg và Forgejo: tạo nền tảng cho quá trình migration
1 bình luận
Ý kiến trên Hacker News
Điều nổi bật trong câu chuyện di chuyển này không phải là khía cạnh kỹ thuật, mà là việc ‘feature parity’ thực ra không phải rào cản lớn nhất
Codeberg đủ dùng cho quy trình làm việc hằng ngày, nhưng thiếu hiệu ứng mạng lưới và quán tính mà GitHub đã tích lũy
Dựa trên các giao thức như Bluesky, nó được thiết kế để danh tính và tính kết nối vẫn được giữ nguyên dù Git được host ở đâu
Rất khó tìm lại một issue mà tôi chắc chắn đã từng thấy trước đó. Hiệu năng gần đây đã ổn hơn, nhưng nếu là dự án có hàng trăm issue thì nên thử di chuyển trước
Những thứ như CI/CD không nhất thiết cả nhóm đều phải biết, chỉ cần một người nắm rõ là đủ
Codeberg là một fork của Gitea, còn Gitea là fork của Gogs
Cả hai fork này đều bắt đầu vì lý do triết lý hơn là lý do kỹ thuật, và Joe Chen, người tạo ra Gogs, có công rất lớn
Gitea bị fork vì một nhà phát triển độc chiếm quyền với kho lưu trữ, còn Forgejo là fork được tạo ra để lấy lại quyền kiểm soát thương hiệu của Gitea
Tôi tò mò không biết có ai đã dùng Codeberg cùng với F-Droid chưa
Muốn biết liệu nó có thể tự động phát hiện bản phát hành như GitHub không
Có vẻ giờ đã đạt tới hiệu ứng ngưỡng (threshold effect)
Trong vài ngày gần đây tôi thấy nhiều dự án rời khỏi GitHub
Không rõ có sự kiện hay xu hướng gì đang diễn ra không
Sự bất mãn trong cộng đồng mã nguồn mở đã tích tụ và dường như chạm ngưỡng
Tranh cãi về AI và quảng cáo trên toàn bộ hệ sinh thái Microsoft, cùng với việc Windows 10 kết thúc hỗ trợ, có vẻ cũng ảnh hưởng
Khái niệm liên quan được nêu ra lần đầu trong chuỗi Twitter này
Tôi thấy thời còn chạy trên Rails còn tốt hơn
Có thể chỉ là hiện tượng nhất thời bị chú ý quá mức so với thực tế
Tôi muốn biết trong các lựa chọn thay thế GitHub, đâu là thứ phù hợp cho nhóm nhỏ hoặc lập trình viên cá nhân
Codeberg có vẻ tập trung vào FOSS nên không hợp lắm cho mục đích thương mại
GitLab có nhiều tính năng nhưng rất nặng để vận hành
Ngoài ra còn có nhiều forge FOSS khác như Gitea, Gogs, Phorge
Nó không cố sao chép UI GitHub, và tôi thích giao diện tức thời nhanh như làm việc cục bộ
Không nhất thiết phải chuyển chỉ vì “ghét Microsoft”
Cuối cùng tôi đưa dự án mới lên Codeberg, còn một phần vẫn duy trì private mirror trên GCP
Tôi cũng đã đăng chuỗi Ask HN về chuyện này nhưng không có phản hồi
Xem bài blog trên eldred.fr, lý do của tác giả là hợp lý, nhưng từ góc nhìn người dùng thì hầu như không có cải thiện cảm nhận được
Sau khi dùng thử Codeberg thì
Ví dụ: https://codeberg.org/dnkl/foot
Có lẽ để README làm trang chính sẽ tốt hơn
Bản trả phí còn có thể tùy biến hình ảnh
Nếu làm khác quá thì ngược lại còn dễ bị phản ứng
Việc giấu nút đăng nhập GitHub là quyết định mang tính cộng đồng, và nếu muốn thì có thể đề xuất bằng PR
Mục tiêu là tìm một giải pháp thay thế có đạo đức nhưng vẫn có bộ tính năng tương đương GitHub
Nếu việc GitHub quét cho AI không phải vấn đề, tôi muốn biết liệu có lý do phi chính trị nào để chuyển đi không
Tôi muốn biết Codeberg có cung cấp CI runner miễn phí không
GitHub được cho là chi hơn 100 triệu USD mỗi năm cho CI
Nhưng việc nhắc đến chi phí môi trường có thể lại khiến người dùng ngại tham gia
Với dân kỹ thuật, tiếp cận như một bài toán tối ưu hiệu năng có lẽ hiệu quả hơn
Tôi từng thất vọng khi thấy Codeberg thổi phồng một sự cố spam trước đây thành “chiến dịch thù ghét cực hữu” rồi tự ca ngợi mình
Chỉ cần thừa nhận là đã thất bại trong khâu phòng ngừa là đủ, nhưng họ lại đóng khung nó theo hướng chính trị
Liên kết liên quan: issue, thảo luận HN, bài blog
Nếu vì vậy mà bạn mất đi sự tôn trọng, thì vấn đề không nằm ở dự án mà ở góc nhìn đó
Tôi cũng từng chuyển kho lưu trữ sang Codeberg rồi quay lại GitHub
Tôi không thích nhiều tính năng của GitHub, nhưng Codeberg thiếu sức hút để kéo cộng tác
Với một người bảo trì đơn lẻ, độ hiển thị và hiệu ứng mạng lưới là cực kỳ quan trọng