2010-03-08 23 views
10

Đây là những gì tôi đang cố gắng làm:Tự động kéo trên máy chủ từ xa bằng Git push?

Tôi có kho lưu trữ GitHub, một phần mà tôi muốn làm cho trang web có thể xem được. Ngay bây giờ tôi đã nhân bản kho lưu trữ trên máy chủ của riêng tôi và nó hoạt động tốt, nhưng để giữ cho nó cập nhật, tôi phải đăng nhập bằng tay và kéo những thay đổi mới nhất.

Tôi không chắc đây có phải là ý tưởng hay nhất (hay cách tiếp cận tốt nhất), nhưng tôi muốn máy chủ từ xa tự động kéo bất cứ khi nào ai đó đẩy vào kho lưu trữ. GitHub làm cho nó dễ dàng đủ để chạy một kịch bản khi ai đó đẩy, nhưng tôi không chắc chắn làm thế nào để kéo một khi ai đó làm điều đó.

Tôi đã sử dụng PHP để đơn giản, nhưng chỉ cần làm một cái gì đó giống như git pull một cách tự nhiên không hoạt động do quyền. Đây có phải là một ý tưởng tồi hay là có một cách khác để đạt được những gì tôi muốn làm? Điều này có vẻ giống như một thiết lập chung, nhưng tôi không chắc chắn.

Cảm ơn.

Trả lời

2

Nếu nó rất dễ dàng để chạy kịch bản để đẩy, bạn có thể thiết lập móc để đẩy:

  • từ GitHub đến một trần (trống worktree) repo trên máy chủ web của bạn
  • từ repo trần trên máy chủ web của bạn để repo "sống" (với một worktree đại diện cho trang web của bạn)

Sau đó bạn có thể kết hợp với một móc trên repo "sống" của bạn để tự cập nhật (thông qua "git merge", hợp nhất nội dung của repo trần của bạn với y của chúng tôi "sống" repo), bất cứ khi nào repo trần của bạn đẩy bất cứ điều gì.

Bạn nhận được hiệu ứng mình muốn: bất kỳ thao tác đẩy nào vào repo GitHub của bạn (đối với một nhánh nhất định mà tôi giả định) sẽ kích hoạt làm mới trên repo web "trực tuyến" của bạn.

1

Tôi đã tạo một cái gì đó hoạt động gần như chính xác theo cách này, ngoại trừ repo "từ xa" nhận được đẩy trên cùng một máy với repo mà sau đó kéo. Đúng là (và quan trọng) mà chính xác cùng một tập hợp người dùng có quyền trên cả hai kho lưu trữ. (Nhưng điều này nên được OK, bạn không muốn những người ngẫu nhiên đẩy repo của bạn.) Trong mọi trường hợp, tôi chỉ đơn giản là có hook git post-update gọi một kịch bản lệnh shell làm pull cho tôi. Một trong những khó khăn bit là bạn phải làm sạch môi trường (tôi sử dụng env -i, hoặc bạn có thể bỏ đặt các biến liên quan đến git), nếu không kéo được nhầm lẫn.

Các vấn đề liên quan