Git: tự động kéo từ kho lưu trữ?


90

Có cách nào để thiết lập git sao cho nó lắng nghe các bản cập nhật từ một kho lưu từ xa và sẽ kéo bất cứ khi nào có điều gì đó thay đổi không? Trường hợp sử dụng là tôi muốn triển khai ứng dụng web bằng git (vì vậy tôi có quyền kiểm soát phiên bản của ứng dụng đã triển khai) nhưng muốn đặt git repo "trung tâm" trên Github thay vì trên máy chủ web (giao diện của Github rất đẹp) .

Có ai nhận được điều này làm việc? Heroku làm điều đó như thế nào? Google-fu của tôi không cung cấp cho tôi bất kỳ kết quả phù hợp nào.

Câu trả lời:


48

Git có các "hook", các hành động có thể được thực thi sau các hành động khác. Những gì bạn có vẻ đang tìm kiếm là "câu sau nhận". Trong quản trị github, bạn có thể thiết lập một url sau khi nhận sẽ bị truy cập (với trọng tải chứa dữ liệu về những gì vừa được đẩy) mỗi khi ai đó đẩy đến repo của bạn.

Đối với những gì nó đáng giá, tôi không nghĩ rằng tự động kéo là một ý tưởng hay - điều gì sẽ xảy ra nếu có điều gì đó không ổn được đẩy đến chi nhánh của bạn? Tôi sẽ sử dụng một công cụ như capistrano(hoặc tương đương) cho những việc như vậy.


10
Trường hợp sử dụng theo kế hoạch của tôi là có một repo / nhánh riêng cho giai đoạn "thử nghiệm và làm rối tung" nhà phát triển và có một repo "thúc đẩy sản xuất" đặc biệt mà tôi chỉ đẩy đến khi tôi chắc chắn rằng mọi thứ đều hoạt động. Về cơ bản, tôi đang sử dụng Git để làm với rsync có thể làm được, ngoại trừ nó lưu giữ nhật ký của tất cả các phiên bản được triển khai và tôi có thể dễ dàng quay lại phiên bản trước đó. Lợi thế so với thứ gì đó khó tính hơn như capistrano là tôi sẽ không phải học một công cụ hoàn toàn mới cho những gì (tính đến thời điểm hiện tại) là một dự án thực sự nhỏ.
Li Haoyi

xác thực webhook thêm các vấn đề an toàn và phức tạp hơn, vì vậy các giải pháp dựa trên kéo vẫn có lợi thế của chúng. Kiểm soát phiên bản phát hành có thể được thực hiện với các thẻ để tránh triển khai ngẫu nhiên.
lz96

21

Trên unix-like, bạn có thể tạo cron job gọi là "git pull" (hàng ngày, hàng tuần hoặc bất cứ thứ gì) trên máy của bạn. Trên windows, bạn có thể sử dụng bộ lập lịch tác vụ hoặc lệnh "AT" để làm điều tương tự.


3
Không phải là một cách thích hợp để sử dụng Git.
deepdive

26
@deepdive Tại sao không? Hãy tưởng tượng bạn có một Rasperry Pi nhỏ trong nhà và không có sẵn IP tĩnh. Bạn có lựa chọn nào khác sau đó chạy cron hoặc runwhen job?
kaiser

2
Nó không phải là một ý tưởng tốt. Anh ấy muốn những thay đổi được áp dụng ngay sau khi thúc đẩy.
boi_echos

10
OP đặc biệt yêu cầu một phương pháp lắng nghe các bản cập nhật từ một kho lưu từ xa và sẽ kéo bất cứ khi nào có điều gì đó thay đổi . Giải pháp này sẽ chỉ kéo từ kho lưu trữ thường xuyên, vì vậy để nó có hiệu quả, khoảng thời gian sẽ phải rất ngắn, dẫn đến rất nhiều yêu cầu kéo dư thừa.
Boaz

3
Một cách nhanh chóng để làm điều này mà không thay đổi tab cron: while true; do git pull; sleep 10; done. Điều này sẽ thực hiện git pullcứ sau 10 giây ...
JakeD

3

Có các chương trình tích hợp liên tục như Jenkins hoặc Bamboo, có thể phát hiện các cam kết và kích hoạt các hoạt động như xây dựng, thử nghiệm, đóng gói và triển khai. Chúng làm những gì bạn muốn, nhưng chúng chứa nhiều phụ thuộc, khó định cấu hình và cuối cùng chúng có thể sử dụng kiểm tra định kỳ đối với kho lưu trữ git, điều này sẽ có tác dụng tương tự như gọi git pull by cron mỗi phút.


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.