2008-11-13 25 views
5

Tôi nhân bản một Git master và thực hiện rất nhiều thay đổi trên bản sao. Kể từ đó tôi đã cam kết những thay đổi này trên bản sao và bây giờ muốn chủ nhân trở thành bản sao carbon của bản sao.Git - kéo các thay đổi từ bản sao trở lại trên bản gốc

Tôi đã thử Git đẩy bản sao để đẩy các thay đổi cho bản gốc - nhưng không có gì tôi cập nhật bản gốc.

Làm cách nào để tôi có thể sao chép chính xác nội dung trên bản sao? Lệnh công việc của việc cập nhật bản sao và có sự đồng bộ chính với bản sao là gì?

Trả lời

6

Có 2 loại kho git, trần và không trần. Kho lưu trữ không trống là bất kỳ kho lưu trữ nào có 'bản sao làm việc' tức là một số phần của kho lưu trữ hiện đã được kiểm tra.

Bạn có thể đẩy vào kho không trống, nhưng nó sẽ không cập nhật bản sao làm việc đã kiểm tra ngay cả khi nhánh đã kiểm tra giống với nhánh bạn đã đẩy. Điều này là do bản sao được kiểm tra có thể có các thay đổi không được cam kết và git sẽ không bao giờ hủy các thay đổi mà bạn không yêu cầu một cách rõ ràng (thường các lệnh như vậy có đối số --hard)

Đọc Why won't I see changes in the remote repo after "git push"?How would I use "git push" to sync out of a firewalled host? cho đầy đủ mô tả vấn đề và giải pháp tiềm năng. Lời cảnh báo, nếu bạn đã đẩy vào một repo từ xa, bất kỳ thay đổi không cam kết trong repo từ xa đó sẽ phải được loại bỏ.

Thông thường, âm thanh giống như cách tiếp cận bạn muốn không thực sự được chấp nhận bởi gitters, bởi vì nó không thực sự phù hợp với tâm lý kho lưu trữ được phân phối. Đó là trách nhiệm của riêng bạn để đảm bảo bản sao của repo được cập nhật.

+0

Gareth, Cảm ơn lời giải thích này. Là giải pháp kinh điển mà bạn cần một kho lưu trữ thứ ba mà không có một cây gắn liền với nó? Không phải là nhận được trở lại khái niệm svn của một kho lưu trữ trung tâm? –

+0

Git được xây dựng nhiều hơn xung quanh kéo hơn đẩy. Nó chắc chắn có thể mô phỏng một hệ thống tập trung với Git, đó là những gì chúng tôi làm trong văn phòng của chúng tôi.Đối với chúng tôi, lợi ích của Git là dễ dàng phân nhánh, không phải là bản chất phi tập trung của kiểm soát nguồn – Gareth

5

Nếu bạn đã tạo bản sao của riêng bạn có thể dễ dàng truy cập từ bản gốc, bạn có thể dễ dàng kéo các thay đổi từ bản sao vào bản chính. Chỉ cần:

git pull /path/to/clone 

Điều này sẽ kéo các thay đổi từ HEAD sao chép vào phần chính của bản gốc.

Một trường hợp phổ biến khác là nơi bản sao nằm trên một mạng khác hoặc không thể truy cập trực tiếp vào một mạng nào đó từ bản gốc. Trong trường hợp này, bạn có thể sử dụng một trong số:

  • một kho lưu trữ phổ biến mà clone đẩy tới và tổng thể kéo từ (ví dụ github hay chỉ là một kho trống ở đâu đó.)
  • git-bundle để di chuyển một bó của những thay đổi như một tập tin
  • git-format-patchgit-am gửi thay đổi qua email
2

tôi thích câu trả lời Gareth và Greg. Tôi chỉ đơn giản là thêm rằng tôi thấy nó thực sự tiện dụng để sử dụng một kho trống để đồng bộ hóa công việc với người khác. Điều đó cho phép bất cứ ai đẩy/kéo các thay đổi của họ (bao gồm cả các nhánh) vào kho trống và sau đó những người khác có thể lấy/kéo/hợp nhất khi họ thấy phù hợp. Nó không giống như có một kho lưu trữ trung tâm, vì mỗi bản sao là một kho lưu trữ chính thức.

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