2013-04-18 25 views
11

Nền: Phát triển ứng dụng Facebook bằng cách sử dụng PHP Laravel framework & MySQL cho cơ sở dữ liệu.Muốn thiết lập móc sao chép các tệp đã cam kết vào một thư mục cụ thể

Tôi đã thiết lập Gitlab trên máy chủ phát triển của chúng tôi và tạo một kho lưu trữ trên đó, nơi nhóm đã được thêm và đang cam kết & mã đẩy.

Những gì tôi muốn làm là, khi tôi đẩy mã vào một nhánh cụ thể trên GitLab (ví dụ như Master) tôi muốn nó có sẵn tại/var/www/productname để tôi có thể kiểm tra nó trong Facebook canvas là tốt (một số điều xảy ra ở đó không thể được kiểm tra trên máy cục bộ của bạn).

Tuy nhiên, tôi không muốn móc sao chép tất cả các tệp qua mỗi lần xảy ra sự cố trên máy chủ, chỉ các tệp đã được sửa đổi.

Có ai có thể trợ giúp bằng móc này không?

Cảm ơn bạn.

+1

Bạn đã chọn câu trả lời đúng trước đây. Tốt nhất là để git làm việc thanh toán, tôn trọng.gitignore và các thuộc tính git khác, thay vì rsynch sao chép/đồng bộ hóa mọi thứ. – VonC

Trả lời

3

Sử dụng rsync thay vì cp cho thao tác này. Nó tự động kiểm tra khác. theo cách đó, hook bài đăng của bạn không trở nên phức tạp một cách không cần thiết.

+0

Đây là lời khuyên tuyệt vời và tôi đã thực hiện nó vào quy trình làm việc của mình. Cảm ơn bạn rất nhiều. – Kopty

3

This post trên blog Seb Duggan mô tả nó độc đáo. Bạn chỉ cần tạo post-receive móc có chứa:

#!/bin/sh 
GIT_WORK_TREE=/path/to/webroot/of/mywebsite git checkout -f 

Thêm nó +x cờ và nó sẽ kiểm repo của bạn trong thư mục nhất định.

+0

Đây chỉ là những gì tôi đang tìm kiếm. Cảm ơn bạn! – Kopty

+0

Bạn cũng có thể xem tệp kê khai con rối [gitdeploy] (https://github.com/hauleth/puppet-gitdeploy) của tôi. Nó vẫn còn trong giai đoạn phát triển ban đầu nhưng như tôi đã thử nghiệm cho đến nay nó hoạt động :) – Hauleth

+0

Xin lỗi nhưng ý của bạn là gì? Ngoài ra, có một lý do móc sau cam kết của tôi chạy nhưng không phải của tôi sau khi nhận được? Cảm ơn! – andli

8

Bạn sẽ cần phải thêm vào repo trần (bởi GitLab quản lý) một cái móc post-receive đó sẽ:

  • duy trì một cây lao động (git checkout -f thạc sĩ)
  • sao chép các tập tin mà bạn muốn từ mà làm việc

đó sẽ là:

cd ~git/repositories/yourRepo.git/hooks 
touch post-receive 
chmod +x post-receive 

Bạn có thể làm s ure mà móc sẽ chỉ được kích hoạt nếu ai đó đẩy vào chi nhánh master:

#!/bin/bash 
while read oldrev newrev refname 
do 
    branch=$(git rev-parse --symbolic --abbrev-ref $refname) 
    if [ "master" == "$branch" ]; then 
     # Do something 
    fi 
done 

Đối với kiểm tra thực hiện bằng cách móc rằng, xem "GIT post-receive checkout without root folder", đó là:
chắc chắn rằng bạn chỉ định --git-dir--git-work-tree:

git --git-dir=/path/to/project_root.git --work-tree=/path/to/your/workingtree checkout -f 

một lần nữa, /path/to/your/workingtree có thể là:

  • chỉ là một hoạt động trung gian cây để bạn trích xuất từ ​​đó các tệp có liên quan mà bạn muốn sao chép.
  • hoặc đường dẫn đến ứng dụng của bạn, nếu bạn muốn tất cả các tệp từ bản gốc được cập nhật trong thư mục đích của ứng dụng wab của bạn.
+0

Điều này thật hoàn hảo. Cảm ơn bạn rất nhiều vì câu trả lời chi tiết của bạn. – Kopty

+0

Chúng tôi có thể sử dụng khóa sha làm tên thư mục phụ mới không? –

+0

@dipievil Tôi không chắc chắn làm thế nào một phím sha đóng bất kỳ vai trò trong câu hỏi này hoặc câu trả lời này. – VonC

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