2012-04-02 36 views
57

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

Có ai đã làm việc này không? Làm thế nào để Heroku làm điều đó? Google-fu của tôi không cung cấp cho tôi bất kỳ kết quả có liên quan nào.

Trả lời

33

Git có "móc", 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à "móc sau khi nhận". Trong quản trị viên github, bạn có thể thiết lập một url sau khi nhận sẽ được nhấn (với một tải trọng chứa dữ liệu về những gì vừa được đẩy) mỗi khi ai đó đẩy vào repo của bạn.

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

+4

Trường hợp sử dụng được lên kế hoạch của tôi là có một repo/nhánh riêng biệt cho giai đoạn" thử nghiệm và rối tung xung quanh ", và có một repo" push to production "đặc biệt mà tôi chỉ đẩy một lần tôi chắc chắn mọi thứ đều hoạt động. Tôi về cơ bản sử dụng Git để làm với rsync có thể làm, ngoại trừ nó giữ một bản ghi của tất cả các phiên bản được triển khai, và tôi dễ dàng có thể quay trở lại một phiên bản trước đó. Lợi thế về thứ gì đó mạnh mẽ 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 dự án thực sự nhỏ (hiện tại). –

11

Trên các mục thích hợp, bạn có thể tạo công việc cron gọi "git pull" (mỗi ngày hoặc mỗi tuần hoặc bất kỳ thứ gì) trên máy của bạn. Trên cửa sổ, bạn có thể sử dụng lệnh lên lịch tác vụ hoặc lệnh "AT" để thực hiện tương tự.

+2

Không phải là một phù hợp cách sử dụng Git. – deepdive

+13

@deepdive Tại sao không? Hãy tưởng tượng bạn có một chút Pi Rasperry trong nhà của bạn và không có IP tĩnh. Bạn đã chọn tùy chọn nào khác sau đó chạy một công việc cron hoặc runwhen? – kaiser

+2

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

2

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 commit và kích hoạt các hoạt động như xây dựng, thử nghiệm, gói và triển khai. Họ làm những gì bạn muốn, nhưng họ nặng với phụ thuộc, khó cấu hình và cuối cùng họ có thể sử dụng kiểm tra định kỳ chống lại git kho, mà sẽ có tác dụng tương tự như gọi git kéo bởi cron mỗi phút.

0

Tôi biết câu hỏi này là một chút cũ, nhưng bạn có thể sử dụng các cửa sổ đăng nhập và git để autopull dự án của bạn sử dụng một webhook và php (giả sử dự án của bạn liên quan đến một máy chủ web Xem ý chính của tôi ở đây:. https://gist.github.com/upggr/a6d92e2808e9628ebe0d01fd93569f4a

2

Bạn có thể viết một kịch bản để đạt được điều này bằng cách thực hiện những điều sau đây:

  1. được TRỤ xa cam kết id
  2. so sánh id với ĐẦU địa phương
  3. nếu họ khác nhau, sử dụng git pull và sử dụng lệnh triển khai
  4. nếu giống nhau, vượt qua
  5. viết một công việc định kỳ để thực thi kịch bản (Chú ý:. Tránh trùng lặp thực hiện)
Các vấn đề liên quan