Tôi có một vài trang web sử dụng Drupal, tôi có một số máy chủ, sống, dev1, dev2 ...Giữ gương git đồng bộ ở tất cả các lần
codebase repo Drupal là lớn (112MB), vì vậy tôi mong muốn để tận dụng tối đa khả năng liên kết cứng của git để mỗi lần tôi thêm một trang web, nó không nhân đôi điều này.
Vì vậy, trên máy chủ trực tiếp, tôi có kho lưu trữ chính trống và tất cả các trang web của tôi là bản sao của điều này, mỗi trang web sử dụng một nhánh khác. Điều này là rất tốt trên một máy chủ, liên kết cứng được sử dụng, nó nhanh chóng và hiệu quả.
Nhưng trên máy chủ dev của tôi, chúng thường được sao chép từ repo chính trống, có nghĩa là hai trang web trên cùng một máy không thể sử dụng liên kết cứng để tiết kiệm dung lượng.
Những gì tôi muốn làm là thiết lập một gương của repo trần trên mỗi máy chủ dev của tôi, và sau đó sao chép từ đó.
dev1$ git clone --mirror live:master-bare-repo dev1-mirror-repo
dev1$ git clone -b site1 dev1-mirror-repo site1
dev1$ git clone -b site2 dev1-mirror-repo site2
Tất cả đều tốt cho đến nay. Nhưng tôi muốn những chiếc gương luôn đồng bộ. Vì vậy, tôi đã sử dụng post-receive hook trên gương của dev1 để làm git push --mirror origin
. Bây giờ nếu site1 trên dev1 đẩy commit, chúng được đẩy một cách kỳ diệu vào master-bare-repo.
Nhưng điều gì xảy ra nếu tôi thực hiện thay đổi trên máy chủ trực tiếp và đẩy điều đó? Tôi không thể thiết lập móc nối post-receive
để đẩy vào (các) khác vì điều đó có lẽ sẽ kích hoạt các mócpost-receive
của chúng sẽ kết thúc trong đệ quy?
Có cách nào thông minh xung quanh vấn đề này không?
Quy trình nền có định kỳ cố gắng kéo và đẩy đến công việc máy chủ trực tiếp (thay vì sau khi nhận) không? Ngoài ra, hãy thử nó, nhưng tôi không nghĩ rằng bạn sẽ bị mắc kẹt trong một vòng lặp với phương pháp của bạn, bởi vì lần thứ hai bạn cố gắng đẩy các máy chủ khác không nhận được bất cứ điều gì vì không có gì để đẩy. – Shahbaz