Quản lý và đồng bộ mã nguồn với nhiều Git Remote Repository

Trong quá trình phát triển phần mềm, đôi khi bạn cần đẩy mã nguồn của mình lên nhiều máy chủ Git khác nhau cùng lúc (ví dụ: vừa lưu trữ trên GitHub để làm Portfolio, vừa lưu trữ trên GitLab của công ty). Dưới đây là các phương pháp kỹ thuật để quản lý nhiều Remote Repository cho cùng một dự án Git.

Cách 1: Sử dụng các Remote định danh riêng biệt

Đây là phương pháp cơ bản nhất khi bạn muốn kiểm soát việc đẩy (push) và kéo (pull) mã nguồn từ các kho lưu trữ một cách độc lập.

1. Khởi tạo Git cục bộ nếu dự án của bạn là mới:

git init

2. Thêm các Remote Repository với tên gọi khác nhau để phân biệt:

git remote add github-repo https://github.com/user/project.git
git remote add gitlab-repo https://gitlab.com/user/project.git

3. Kiểm tra danh sách các Remote đã cấu hình:

git remote -v

4. Để đẩy hoặc kéo mã nguồn, bạn cần chỉ định rõ tên Remote:

# Đẩy lên GitHub
git push github-repo main

# Đẩy lên GitLab
git push gitlab-repo main

# Kéo mã nguồn từ một kho cụ thể
git pull github-repo main

Cách 2: Đẩy mã nguồn lên nhiều Server chỉ với một lệnh duy nhất

Nếu bạn cảm thấy việc gõ nhiều lệnh push quá phiền phức, bạn có thể cấu hình một Remote duy nhất chứa nhiều URL đích. Khi đó, chỉ cần một lệnh git push, mã nguồn sẽ được gửi đi tất cả các kho lưu trữ.

1. Giả sử bạn đã có một Remote mặc định là origin:

git remote add origin https://github.com/user/project.git

2. Thêm URL thứ hai vào cùng Remote origin đó:

git remote set-url --add --push origin https://gitlab.com/user/project.git

3. Kiểm tra lại cấu hình. Bạn sẽ thấy origin hiện có một URL để Fetch và nhiều URL để Push:

git remote -v

4. Bây giờ, bạn chỉ cần thực hiện lệnh đẩy một lần:

git push origin main

Cách 3: Thêm Remote vào dự án hiện hữu và xử lý xung đột lịch sử

Trong trường hợp dự án đang phát triển bình thường và bạn cần bổ sung thêm một kho lưu trữ mới đã có sẵn nội dung, bạn có thể gặp lỗi refusing to merge unrelated histories khi thực hiện lệnh pull.

1. Thêm Remote mới cho dự án:

git remote add backup-server https://server-khac.com/user/project.git

2. Khi kéo mã nguồn từ Remote mới này, Git sẽ chặn vì hai kho lưu trữ không có chung lịch sử commit. Để giải quyết, hãy sử dụng cờ --allow-unrelated-histories:

git pull backup-server master --allow-unrelated-histories

3. Sau khi xử lý xong các xung đột (conflict) nếu có, bạn thực hiện commit và đẩy mã nguồn lên như bình thường:

git push backup-server master

Lưu ý về việc đồng bộ Tag và Branch

Nếu bạn muốn đồng bộ toàn bộ các nhánh và các tag từ kho lưu trữ hiện tại sang một kho lưu trữ mới hoàn toàn sạch, bạn có thể sử dụng các lệnh sau:

# Thêm remote mới
git remote add mirror-storage https://new-git-server.com/project.git

# Đẩy tất cả các nhánh
git push mirror-storage --all

# Đẩy tất cả các thẻ (tags)
git push mirror-storage --tags

Thẻ: git version-control git-remote DevOps workflow

Đăng vào ngày 25 tháng 10 lúc 07:09