đầu tiên tôi chạy một thử nghiệm chống lại dụ máy chủ bitbucket tôi để nhận được bất kỳ thông báo lỗi đầu ra trên màn hình:
echo shell_exec("cd /website/root/htdocs && git status 2>&1");
này ném một lỗi mà nó không thể tìm thấy lệnh git do đó phải cung cấp một đường dẫn đầy đủ để git của nhị phân:
'which git'
trả lại (tiếp tục gọi YOU_FULL_GIT_BINARY_PATH_HERE):
/usr/local/git/bin/git
Một đường dẫn đầy đủ ví dụ '/ usr/local/git/bin/git status' hiện đang chạy lệnh git độc đáo.
Điều này không vượt qua mật khẩu git được yêu cầu để sử dụng lệnh 'git pull' cho một bộ trong người dùng git/config git. Chạy dưới lệnh trong git repo:
git config credential.helper store
[lệnh] [1] sẽ nhắc cho mật khẩu và cho phép bạn lưu trữ nó không được mã hóa tại địa phương (chỉ bảo vệ bởi hệ thống tập tin ví dụ trong /root/.git-credentials). Điều này sẽ cho phép chạy 'git pull' mà không cần nhắc nhập mật khẩu. Cách khác (có lẽ tốt hơn) là tạo các khóa ssh cho máy chủ web của bạn như apached rồi thêm chúng vào tài khoản người dùng bitbucket hoặc các khóa repo của bạn.
Tất cả các thư mục của tôi đã được thiết lập để được sở hữu bởi người sử dụng apache (Centos 6.8 phiên bản khác có thể là www-data: www-data vv):
chown -R apache:apache YOUR_WEB_FODLER
Tôi không phải sử dụng thủ thuật bẩn 'chmod o + rw -R' để làm việc.
Nguồn
2017-04-30 14:50:21
'exec' nên làm việc tốt miễn là kịch bản PHP có quyền cập nhật repo của bạn. Hãy thử sử dụng 'system()' và xem giá trị trả về là gì. – Prisoner
đã giải quyết được sự cố ... với quyền sở hữu của .git, nó không phải là www-data – rjv
Sử dụng thư viện như [php-git] (https://github.com/libgit2/php-git) –