Giữ các kho git trên các máy chủ khác nhau đồng bộ


34

Tôi đang suy nghĩ về việc bắt đầu một dự án nhỏ và tôi muốn thực hiện phiên bản của nó với git.

Bitbucket có vẻ là một lựa chọn tốt cho tôi với gói miễn phí của họ. Tôi muốn sử dụng nó làm công cụ chính để làm việc với git vì chúng có các công cụ đẹp như giao diện web, máy khách Mac OS, v.v. Nhưng, để có được sự bảo vệ cao hơn khỏi mọi thiệt hại do tai nạn có thể gây ra bởi việc sử dụng dịch vụ của bên thứ ba, tôi cũng muốn cài đặt git trên NAS của mình như một bản sao lưu trữ thứ hai của kho lưu trữ.

Bây giờ câu hỏi của tôi là, liệu có thể tạo một kho lưu trữ trên hai máy chủ khác nhau và sau đó giữ chúng đồng bộ không? Ví dụ: giả sử mỗi tuần một lần tôi cập nhật kho lưu trữ trên NAS của mình để khớp với kho lưu trữ trên Bitbucket. Sau đó, trong trường hợp có điều gì đó xảy ra với Bitbucket, tôi vẫn sẽ có kho lưu trữ đầy đủ với lịch sử phát triển đầy đủ trên bộ lưu trữ NAS cục bộ của mình.

Và có cách nào để nhập kho lưu trữ hiện có với lịch sử đầy đủ sang dịch vụ git khác không?


Tôi nghĩ rằng phản chiếu là những gì tôi cần. Bài viết này dường như để mô tả chính xác những gì tôi cần. Và điều này một là tốt.

Tôi tin rằng nó sẽ tạo bản sao đầy đủ với lịch sử đầy đủ và thậm chí tự động cam kết các phiên bản mới vào kho lưu trữ trên cả hai máy chủ.

Tôi có đúng không


Tôi đang sử dụng xpdev Tôi tự hỏi trong tình huống hệ thống 2 của bạn, bennefit sẽ là gì của git lừa đảo trong trường hợp của bạn. chỉ để chắc chắn từ mỗi bản dựng cuối cùng tôi tạo một bản sao lưu usb. Nhưng phiên bản cơ bản được xử lý whitin xpdev vì vậy nó không phải là một yêu cầu thực sự. BTW nếu bạn sở hữu một NASS Raid1 bằng chứng ngu ngốc hoặc do đó bạn có thể xem xét việc chạy các hệ thống phiên bản của riêng mình, cũng có một số máy miễn phí
user613326

Nhưng tôi muốn có phiên bản đầy đủ có sẵn ở 2 nơi. Nếu máy chủ của bên thứ ba chết, hoặc công ty, điều hành nó, chỉ biến mất, tôi muốn có chính xác trải nghiệm tương tự với tất cả lịch sử phiên bản ...
BartoNaz

Điều đó có nghĩa là tôi sẽ có Bitbucket để thoải mái và git trên NAS để đảm bảo an toàn 99,9%.
BartoNaz

Đối với xp-dev, công ty như vậy không có khả năng chết, họ có thể thay đổi kế hoạch lưu trữ mã, giá, v.v. hoặc hợp nhất với một công ty khác. Nhưng đó là một tiền sữacow cho họ. Và họ cũng sẽ sao lưu dữ liệu có giá trị. Đó là kinh doanh của họ để ở tại chỗ. Tôi sử dụng nó với 3 nhà phát triển và mã của chúng tôi tồn tại ở 5 máy khác nhau, trong đó luôn có một bản sao nguồn cục bộ được đồng bộ hóa tại xp dev. XP dev là miễn phí nếu bạn chỉ có một vài dự án.
dùng613326

1
Tất nhiên, điều đó là không thể. Tuy nhiên, bạn vẫn không bao giờ có thể chắc chắn 100% ...
BartoNaz

Câu trả lời:


19

Vâng, đó chính xác là vẻ đẹp của DVCS như git. Bạn có thể sử dụng bất kỳ số lượng repos khác nhau có cùng trạng thái như trạng thái trên bitbucket hoặc github.

Ngay cả bản sao cục bộ của bạn (kho lưu trữ trên máy tính của bạn) thường là một bản sao đầy đủ của repo từ xa.

Điều duy nhất bạn phải làm để giữ nhiều repos đồng bộ là kéo một (thường được gọi là nguồn gốc hoặc ngược dòng) và đẩy sang các bản sao lưu.


11
Thật không may tất cả là không sáng bóng. Xem cảnh báo mất KDE gần thảm họa . Đó là, đảm bảo rằng bản sao lưu không xóa những thứ (chi nhánh, kho lưu trữ, v.v.) đã bị xóa trên máy chủ được sao lưu.
Jan Hudec

Tôi vẫn không chắc chắn nếu tôi hiểu chính xác. Theo tôi hiểu, đẩy và kéo hoạt động với một phiên bản nhất định. Nhưng hãy nói rằng tôi có một phiên bản mã gần đây trên máy làm việc của mình. Tôi có kho lưu trữ git trên máy chủ từ xa (Bitbucket, Github hoặc bất cứ thứ gì khác), có lịch sử phát triển mã đầy đủ cho đến phiên bản gần đây nhất mà tôi có trên máy làm việc (nếu đã được cam kết). Và tôi có một kho lưu trữ trên NAS trống. Tôi có thể nhập toàn bộ lịch sử mã từ máy chủ từ xa vào NAS để tôi có hai kho lưu trữ giống hệt nhau ở hai nơi không và bằng cách nào?
BartoNaz

2
Sao chép kho lưu trữ từ xa, sau đó kéo tất cả các bản cập nhật (tất cả các chi nhánh) đến nó theo định kỳ. Một bản sao git chứa lịch sử, nó không giống như một thanh toán svn chỉ có phiên bản mới nhất.
Wilbert

11

Đây là một giải pháp đã được thử nghiệm cho sự cố: Kho lưu trữ Git tự động 2 từ xa

Một tập lệnh đơn giản để đồng bộ 2 kho Git từ xa

Tôi đã tìm kiếm trên web một tập lệnh đơn giản sẽ đồng bộ hóa. 2 kho lưu trữ từ xa nhưng tôi không thể tìm thấy tập lệnh như vậy thậm chí nhiều người dường như tìm kiếm nó! Vì vậy, tôi đã tạo 2 kho kiểm tra đơn giản và bắt đầu thử nghiệm và xây dựng tập lệnh như vậy.

Kịch bản như vậy nên làm gì?

Nói chung, các bước để thực hiện nó rất đơn giản: 1. Sao chép kho lưu trữ đầu tiên 1. Thêm kho thứ hai làm kho lưu trữ từ xa bổ sung 1. tìm nạp tất cả trong kho thứ hai 1. đẩy kho lưu trữ cục bộ đã cập nhật lên 2 kho từ xa.

Vấn đề còn lại là - các công tắc chính xác cho tất cả các lệnh git ở trên là gì?

Vì vậy, đây là ...

Kịch bản lệnh 2repose-sync.sh

# Clear the folder first - please use this carefully
rm -rf $REPO_NAME  
# clone the reposotory
git clone --bare $ORIGIN_URL

# add a remote repository
cd $REPO_NAME
git remote add --mirror=fetch repo1 $REPO1_URL

# update the local copy from the first repository
git fetch origin --tags

# update the local copy with the second repository
git fetch repo1 --tags

# sync back the 2 repositories
git push origin --all
git push origin --tags
git push repo1 --all
git push repo1 --tags

LƯU Ý - tập lệnh này không giải quyết các trường hợp xung đột giữa nội dung kho lưu trữ!


Bạn có thể muốn đề cập trong câu trả lời của mình rằng việc đầu tiên bạn làm là xóa một thư mục cục bộ hiện có với $ REPO_NAME. Điều này có vẻ quan trọng và có thể ngăn ngừa mất dữ liệu cho những người chỉ cần sao chép giải pháp của bạn.
Wilbert

Để đi cùng với điều này, LibGit2 rất hữu ích cho loại điều này.
RubberDuck

0

Tôi sử dụng GitLab riêng để lưu trữ tất cả các kho lưu trữ của mình, vì vậy tôi chỉ có một nguồn gốc mà tôi đẩy và kéo từ khi tôi đang phát triển hàng ngày.

Nhưng, đối với các dự án nguồn mở, GitHub là một cộng đồng sôi động hơn nhiều, vì vậy, nếu tôi muốn chấp nhận đóng góp của cộng đồng cho các dự án của mình, tôi sử dụng hệ thống web hook của web GitLab để ping máy chủ mà tôi chạy, sau đó cập nhật các repos công khai của tôi trên GitHub.

Điều này cho phép tôi coi GitHub như một điều khiển từ xa khác mà tôi có thể rút ra khi có ai đó đóng góp - sau đó tôi hợp nhất - không-cục bộ, và có một luồng về cách tất cả các kho lưu trữ chính và công cộng của tôi phân phối các thay đổi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.