Kiểm tra tệp Git đến một vị trí bên ngoài kho lưu trữ


21

Có thể để thanh toán trên phạm vi địa điểm bên ngoài kho lưu trữ không? Ý tôi là một bản sao của một nhánh không có thư mục .gitv.

Ví dụ: Sử dụng git để quản lý một trang web. Bạn chỉnh sửa một số tệp, cam kết và sao chép các tệp vào máy chủ web qua WebDAV. Đường dẫn WebDAV sẽ là vị trí bên ngoài kho lưu trữ, không nên chứa phần mềm .git.

Đây có thể không phải là vấn đề mà git đã được xây dựng, nhưng điều này có thể không?

Câu trả lời:


19

Vâng, điều này chắc chắn là có thể.

Hãy nói rằng tôi có một kho lưu trữ trần có tên /srv/production.gittrên hệ thống / máy chủ đích.

Trên hệ thống đích tôi có thể sử dụng lệnh cd /srv/production.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

Nếu tôi ở trong một kho lưu trữ không trống, lệnh sẽ hơi khác một chút. Hãy nói rằng tôi có một kho lưu trữ không trần tại /srv/testing. Để kiểm tra rằng tôi sẽ sử dụngcd /srv/testing/.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

Trong thực tế trên hệ thống của tôi, tôi thậm chí tự động hóa điều này trong một hook hậu cam kết trong production.gitkho lưu trữ của tôi . Vì vậy, khi bạn đẩy lên production.gitphiên bản mới nhất sẽ tự động kiểm tra root web.

#!/bin/sh
#
# An example hook script that is called after a successful
# commit is made.
#
# To enable this hook, rename this file to "post-commit".

GIT_WORK_TREE=/srv/production-www/ git checkout -f
# ... misc other commands to verify permissions are set correctly.

Nếu quyền truy cập duy nhất của bạn vào hệ thống từ xa là webdav, chắc chắn bạn có thể viết một hook post-commit sẽ kiểm tra máy chủ webdav, trực tiếp hoặc đến một vị trí tạm thời, sau đó bạn có thể kịch bản tải lên.


Tìm kiếm ở nhiều nơi .. chỉ có giải pháp làm việc, cũng sạch!
karthikeayan

6

Nếu bạn chỉ muốn các tập tin, bạn có thể sử dụng git archive. Thông thường, nó ghi vào một kho lưu trữ như tarball hoặc ZIP, nhưng bạn cũng có thể chuyển nó thành:

git archive master | tar -x -C /some/path

Ở đây, masterrõ ràng là nhánh bạn muốn lưu trữ và /some/pathsẽ chỉ chứa các tệp - không .githoặc .gitignore.


Hoặc bạn có thể sử dụng git checkout-indexcái nào gần giống với "kiểm tra" các tệp hơn:

git checkout-index -f -a --prefix=/some/path/

Ở đây, -atùy chọn cho biết gitđể kiểm tra tất cả các tập tin. Tiền tố sẽ được thêm vào đầu ra. Ai đó cũng đã viết một bao bọc xung quanh này để cung cấp cho một git export.


2
Tôi nghĩ rằng bạn đang làm điều này khó khăn hơn nó cần phải được. Chỉ cần chạy GIT_WORK_TREE=/destinationpath git checkout -ftrong khi thư mục hiện tại của bạn ở trên cùng của một kho lưu trữ trần hoặc thư mục con .git. Bạn sẽ nhận được một kiểm tra đến / Destinationpath
Zoredache

Ok, tôi phải bỏ qua tùy chọn đó, +1 cho bạn.
slhck

1
Tôi thấy tùy chọn này cách trực quan hơn, thành thật mà nói. Và ít bị lỗi hơn.
Minix
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.