Làm cách nào để tạo một tập tin cập nhật git đẩy trên máy chủ web của bạn?


13

Tôi có một vài trang web được lưu trữ trên cùng một dịch vụ lưu trữ web dưới dịch vụ lưu trữ được chia sẻ. Máy chủ web của tôi hỗ trợ Git và tôi có quyền truy cập SSH vào nó và tôi cũng có thiết lập Git trên máy tính xách tay của mình.

Tôi muốn làm cho nó để khi tôi thực hiện "git push origin master", nó sẽ tự động cập nhật các tệp trên máy chủ web của tôi và cũng lưu bản sao lưu của các tệp cam kết trước đó để tôi có thể dễ dàng quay lại nếu muốn. Điều này có thể không?


Tò mò - nhà cung cấp dịch vụ lưu trữ của bạn là ai?
người dùng

Và tại sao bạn muốn có một "bản sao lưu các tệp cam kết trước đó"? Bạn chỉ có thể đẩy các cam kết trước đó, nếu bạn muốn quay lại (giả sử bạn luôn biết những gì bạn đã đẩy cuối cùng - nhưng dù sao bạn cũng nên biết điều đó).
sleske

Câu trả lời:


12

Điều này được tóm tắt từ Sử dụng Git để quản lý một trang web

Chìa khóa của quy trình là hook phía máy chủ 'post-receive' (nhiều hơn về git hook tại Tùy chỉnh Git - Git Hooktrang man githooks ). Móc này chạy sau khi máy chủ đã nhận được tất cả dữ liệu.

Khi máy chủ nhận được dữ liệu, nó chạy git checkout -f Tùy chọn -f sẽ buộc thanh toán đến đầu ngay cả khi có sự khác biệt cục bộ.

#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f

Đặt nó trong hooks/thư mục như post-receivevà thực thi. Tất nhiên, đường dẫn thay đổi thành nơi bạn có tệp của máy chủ web (việc sử dụng GIT_WORK_TREEđặt biến môi trường để bạn không cần phải xử lý các tệp chấm và cài đặt git trên máy chủ).

Để quay trở lại, người ta nên gắn thẻ cho mỗi bản phát hành (điều này cũng có thể được thực hiện như một phần của hook post-commit). Bằng cách gắn thẻ bản phát hành, người ta có thể dễ dàng xác định vị trí để quay lại, mặc dù điều đó có thể liên quan đến việc đăng nhập vào máy chủ và kiểm tra thẻ đó.


Cần lưu ý rằng điều này có nghĩa là bạn đang sử dụng git làm công cụ triển khai, đây là điều mà nó không thực sự dành cho. Nó có thể hoạt động, nhưng có rất nhiều hạn chế (cần tải xuống toàn bộ repo, không có cách nào để gọi tập lệnh hoặc quản lý quyền truy cập tệp, không có cách nào để giải nén công cụ ...). Có lẽ tốt hơn để sử dụng một công cụ triển khai thích hợp.
sleske

@sleske Bạn có thể làm tất cả những điều đó trong post-receivehook, đây thực sự chỉ là một kịch bản mà bạn có thể đặt bất cứ thứ gì bạn muốn.
Mario

@Mario: Có, bạn có thể - điều đó có nghĩa là bạn đang triển khai hiệu quả giải pháp triển khai của riêng mình như một cái móc nhận sau. Vẫn có những lợi ích khi sử dụng một giải pháp hiện có, nhưng đôi khi, chính bạn có thể là tốt nhất ...
sleske

Bạn thậm chí có thể kiểm tra vào một thư mục trung gian và có các liên kết từ thư mục web đến thư mục trung gian để tránh có các tệp .git trong thư mục web của bạn.
Bent

0

Cách đơn giản nhất để cập nhật cây làm việc của kho lưu trữ mà bạn đang đẩy tới là đặt git config receive.denyCurrentBranch updateInstead ở phía bên nhận. Xem https://git-scm.com/docs/git-config/#git-config-receuredenyCienBranch

Câu trả lời của Ryan với hook hook post tốt hơn ở chỗ nó cho phép kiểm tra một số vị trí khác nhau (bạn có thể không muốn có .git trong thư mục web của mình). Nhưng ở cấp độ này, có thể là một ý tưởng tốt để sử dụng một số công cụ triển khai hiện có, như sleske đã nói trong các bình luận.

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.