2009-05-19 25 views
10

trạng:website Cập nhật với một lệnh đơn (git push) thay vì FTP kéo và thả

  • Tôi có một bản sao cục bộ của một trang web
  • Tôi có một máy chủ mà tôi có quyền truy cập SSH để

Tôi muốn làm gì?

  • Cam kết tại địa phương cho đến khi tôi đang hạnh phúc với mã của tôi
  • Hãy chi nhánh tại địa phương
  • Có một chi nhánh tổng thể đó là một trong đó nên được đẩy đến máy chủ
  • Cập nhật các trang web sử dụng một lệnh đơn (git push origin master)

Nếu tôi thiết lập git repo cục bộ bằng git init, sau đó đẩy vào thư mục trên máy chủ, nó không hoạt động. Khi tôi FTP đến máy chủ để kiểm tra các tập tin, họ đang thực sự ở đó. Khi tôi SSH vào máy chủ và làm trạng thái git, nó không sạch sẽ, mặc dù nó nên được kể từ khi tôi chỉ cần đẩy đến máy chủ.


bước tôi đang làm:

  1. Tạo một thư mục mới trên máy tính của tôi (mkdir folder_x)
  2. Đi vào thư mục đó (cd folder_x)
  3. Thiết lập một kho git mới ở đó (git init)
  4. (thiết lập kho git thành công)
  5. Đẩy kho lưu trữ đến máy chủ bằng cách sử dụng lệnh gốc git push (nơi nguồn gốc là s et up as user: [email protected]) ​​
+0

sao chép http://stackoverflow.com/questions/3728054/git-push-to-live-server – cmcginty

+0

bản sao có thể có của [Triển khai dự án bằng Git push] (http://stackoverflow.com/questions/279169/ deploy-a-project-using-git-push). [git config receive.denyCurrentBranch updateInstead] (http://stackoverflow.com/a/28381235/895245) trên điều khiển từ xa là một khả năng tốt. –

Trả lời

12

Bạn cần phải viết một móc hậu sau khi chạy git checkout -f sau khi kho git từ xa nhận được push. Xem Using Git to manage a web site để biết chi tiết.

+1

điều này dường như giả sử tôi không thực sự làm việc trên máy chủ web của tôi. Vì vậy, bất kỳ công việc thực hiện có bị mất – gman

+0

Với Git 2.3 bạn không cần móc này nữa bạn có thể làm 'git config receive.denyCurrentBranch updateInstead'. Xem https://github.com/blog/1957-git-2-3-has-been-released. – Aurelien

+1

Tôi nghĩ nhận xét của @Aurelien phải là câu trả lời được chấp nhận! Giải pháp rất đẹp! –

1

Khi bạn đẩy tới kho lưu trữ git, nó không cập nhật các tệp làm việc của kho lưu trữ đó. Nói chung khi bạn đẩy, bạn nên được đẩy đến một kho trống --- mà dường như là cách họ dự định git đẩy để làm việc.

Đối với một trong các dự án (địa phương) của tôi, tôi đã viết một kịch bản để tự động kiểm tra thư mục con "ui" mới nhất khi tôi đẩy công việc của mình vào kho lưu trữ triển khai. Nó được nhúng trong câu trả lời trước đây tại đây: Developing Django projects using Git

Bạn cũng có thể chỉ cần móc hậu cập nhật trên máy chủ thực hiện "git reset --hard master" nếu ai đó đẩy cập nhật lên master và sử dụng repo thay vì có một khu vực riêng biệt cho các tập tin kiểm tra.

0

tôi sử dụng móc hậu cập nhật chi tiết trong FAQ cụm từ này: http://git.or.cz/gitwiki/GitFaq#non-bare

Nó sẽ cập nhật cây làm việc của bạn nếu bạn đã cấu hình repo từ xa là "trần".

0

Phiên bản Git 1.9.1
Máy chủ Ubuntu 14.04 LTS
ĐAMPN LAMP Máy chủ

Tôi đặt máy chủ LAMP của mình cập nhật thư mục làm việc của tôi trên Git bất cứ khi nào một trong những nhà phát triển web của tôi đẩy máy chủ thay đổi. Tôi nhận thấy rằng nhật ký sẽ lưu ý các cam kết mới, nhưng sẽ không cập nhật thư mục làm việc. Thay vì làm điều này bằng tay (git checkout -f) cho mỗi lần cập nhật, điều này có thể được thiết lập tự động để làm như vậy sau khi một push đã được nhận.

  1. Trong ".git" thư mục của bạn, hãy vào "móc" thư mục.
  2. Tạo một file có tên "hậu nhận" trong "móc" thư mục với nội dung này:

    #/bin/sh

    # Cập nhật thư mục làm việc kể từ ngày nhận một sự thúc đẩy từ khách hàng từ xa.
    # Điều này nên được hướng vào thư mục làm việc git.

    GIT_WORK_TREE =/var/www/dev_site git checkout -f

  3. Enable quyền để thực hiện các tập tin bằng cách gõ "chmod + x hậu nhận" trong "móc" thư mục.

Bây giờ, nó sẽ cập nhật thư mục làm việc khi các cam kết được đẩy vào bộ nhớ Git. Trang web của tôi hiện hiển thị các thay đổi khi tôi truy cập vào trình duyệt trong trình duyệt.

Trong ví dụ này, thư mục làm việc của tôi là "/var/www/dev_site". Thay đổi điều này cho phù hợp với nơi Repo của bạn.

Xin lưu ý, Repo này không phải là một Repo trống. Một Repo trống không có thư mục làm việc mà một máy chủ web có thể đọc được.

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