2010-01-27 34 views
19

Khi tôi thử 'git push origin master' đến kho lưu trữ từ xa trên đĩa ngoài của tôi, cảnh báo git xảy ra cho biết rằng việc truy vấn kho lưu trữ sẽ trong các phiên bản tiếp theo của git bị từ chối theo mặc định. Trên đĩa ngoài tôi đã kiểm tra dự án và tôi muốn gửi các thay đổi mà tôi đã thực hiện trên máy tính của mình cho các reposiotry này. Có phải 'git push origin master' không đúng cách không? Tôi có phải 'git pull ...' trên kho lưu trữ trên đĩa ngoài của tôi không? Vì vậy, tôi không thể đẩy những thay đổi mà chỉ kéo chúng? Chỉ làm việc với kho 'bare' là khác nhau? Vì vậy, nếu kho lưu trữ trên đĩa bên ngoài của tôi là một kho lưu trữ trần tôi có thể đẩy những thay đổi cho nó? Tôi có hiểu đúng không?Git chỉ áp dụng cho các kho lưu trữ trống?

Trả lời

6

Bạn không nên đẩy tới kho lưu trữ không trống vì việc đẩy sẽ chỉ cập nhật trạng thái nội bộ của repo và sẽ không ảnh hưởng đến các bản sao đã sao lưu trên đĩa của tệp. Do đó, bạn có thể gặp sự cố nếu bạn bắt đầu làm việc trong repo đó mà không cập nhật lần đầu (qua git checkout) các bản sao trên đĩa của trạng thái của các tệp trong repo.

+0

Vì vậy, việc đẩy đến repo không chính xác là một sự lôi kéo từ repo? –

+3

trở thànhGuru: Đúng; một cú đẩy có hiệu quả ngược lại với việc tìm nạp. Pull = fetch + merge vào nhánh hiện tại. – ebneter

+2

Điều quan trọng là việc kéo cũng cập nhật các tệp trong cây đang hoạt động (các tệp "trên đĩa"), mà không phải thao tác đẩy cũng không tìm nạp. – mipadi

23

Đọc kỹ cảnh báo. Lệnh cấm mặc định mới chỉ được đẩy vào nhánh hiện đã được kiểm tra trong một kho lưu trữ không phải là trần. Nó là hoàn toàn OK để đẩy đến bất kỳ chi nhánh khác trong một kho không trần.

Lý do cho điều này là quá trình đẩy không có quyền truy cập trực tiếp vào cây làm việc để chỉ mục và đầu nhánh được thay đổi dưới gốc cây đang hoạt động. Khi bạn sau đó đi đến cây làm việc có vẻ như cây làm việc đã hoàn tác các thay đổi được đẩy lẫn lộn với bất kỳ thay đổi nào thực sự đang phát triển. Điều này làm cho nó rất khó khăn để tách hai bộ thay đổi.

Đẩy tới các nhánh khác không có những nhược điểm như vậy. Sau đó, bạn có thể đi đến kho lưu trữ đó và hợp nhất các thay đổi đó vào chi nhánh đã thanh toán nếu muốn.

+3

Tôi không hiểu câu trả lời này cho đến khi tôi đọc [git ready »push to only bare repositories] (http://gitready.com/advanced/2009/02/01/push-to-only-bare-repositories.html) và [tất cả về repos "trần" - những gì, tại sao, và làm thế nào để sửa chữa một push không trần] (http://sitaramc.github.com/concepts/bare.html) (đặc biệt là "yeah yeah, nhưng tại sao Tôi cần một repo trần? "phần). Bây giờ, tuy nhiên, tôi làm! –

+0

Chúng ta có khả năng đẩy chi nhánh không được kiểm tra ra ngoài và sau đó sử dụng barnch móc hợp nhất móc sau khi nhận với nhánh đã được cập nhật không? –

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