2009-08-28 27 views
6

Đây có thể là câu hỏi về quy ước, các phương pháp hay nhất và/hoặc sở thích cá nhân:Sử dụng quyền git (để có mã trang web riêng)?

Vì vậy, tôi không phải là phần mềm chia sẻ, vì vậy tôi không sử dụng github hoặc nội dung tương tự.

Biết rằng git không cần một kho lưu trữ trung tâm tôi nghĩ: tuyệt vời, máy trạm và máy chủ của tôi là hai nút, và tôi sẽ chỉ đẩy các thay đổi từ máy trạm của tôi đến máy chủ.

Khi tôi bắt đầu, mã chỉ trên máy chủ, vì vậy tôi:

  1. Mở server: git init
  2. Trên máy trạm: git clone [email protected]:path/to/repo
  3. vui vẻ thực hiện thay đổi và cam kết tại địa phương
  4. Trên máy trạm : git push [email protected]:path/to/repo

Tôi nhận được kết quả lạ. Các tệp tôi đã có được thêm được xuất hiện cục bộ trên máy chủ nhưng các thay đổi đối với các tệp hiện có không được phản ánh.

Sau đó, tôi đã đọc cảnh báo chống lại việc đẩy tới chi nhánh từ xa được kiểm tra. Vì vậy, các thiết lập mới là:

  1. Ran git clone --bare để thực hiện một kho trần
  2. Đặt kho trần trên máy chủ của tôi (~/repos/mysite.git - không phải là một thư mục công cộng)
  3. Mã địa phương và: git push [email protected]:repos/mysite.git
  4. Trên máy chủ : git pull ~/repos/mysite.git để nhận số mới nhất

Đây có phải là đúng? Nó có hợp lý không? Đó là những gì bạn sẽ làm gì?

Trả lời

4

Thiết lập mới cách chính xác để thiết lập kho lưu trữ máy chủ.

Tham khảo chương Getting Git on a Server trên sách Pro Git để biết thêm thông tin.

+1

guh một chương đặc biệt cho những gì tôi đang làm. Tôi sẽ đọc Pro Git trước khi hỏi thêm câu hỏi git ... – EMiller

+0

Đó là một đọc tốt. Chúc vui vẻ :) – spatz

5

Bất kể bạn chọn làm gì, bạn có thể muốn tự động hóa nó một chút bằng cách sử dụng git hooks. Hooks là tập hợp các tập lệnh mà git sẽ thực thi trên các sự kiện nhất định. Cái liên quan ở đây là hook post-update (trong kho của máy chủ). Trong một repo bình thường, móc là trong .git/hooks, do đó, trong một repo trần họ đang ở hooks. Thư mục đó có thể chứa rất nhiều kịch bản móc ví dụ (có tên là *.sample trong các phiên bản gần đây). Bạn sẽ cần tạo một cái gọi là post-update, chứa bất kỳ hành động nào bạn muốn thực hiện sau khi máy chủ được đẩy tới (ví dụ: cd đến repo khác và thực hiện thao tác kéo).

Đối với các chi tiết cụ thể về giải pháp của bạn ... bạn đang làm điều đúng bằng cách không đẩy vào chi nhánh đã thanh toán. Vấn đề duy nhất có thể xảy ra với những gì bạn đang làm là máy chủ kết thúc với một bản sao bổ sung của kho lưu trữ chỉ được sử dụng để kiểm tra các tệp.Nếu bạn quyết định không thích sự lãng phí này không gian đĩa, tôi khá chắc chắn điều này sẽ làm những gì bạn muốn:

git --work-tree=/path/to/checkout-dir --bare reset --hard 

này cho git để thiết lập lại trạng thái thích hợp, bằng cách sử dụng con đường được cho là làm việc thư mục, nhưng hãy nhớ rằng kho lưu trữ thực sự là trống. Tôi chưa đích thân làm điều này trước đây, nhưng có vẻ như tôi đã làm bài kiểm tra nhỏ của mình! Một lưu ý: nếu bạn quyết định bạn muốn đẩy vào một chi nhánh đã kiểm tra (chỉ khi repo trên máy chủ sẽ không bao giờ được sử dụng cho bất cứ điều gì nhưng đẩy và kiểm tra một bản sao của các tập tin) .. Nếu bạn hoàn toàn chắc chắn về điều này, bạn có thể thiết lập receive.denyCurrentBranch thành false trong gitconfig của máy chủ, thực thi git reset --hard trên máy chủ, buộc thư mục làm việc của nó vào trạng thái nó phải ở trong.

2

Đọc "Tại sao Tôi thấy những thay đổi trong repo từ xa sau khi "git push"? " trong GitFaq (trên Git Wiki).

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