2013-03-21 16 views
5

Cho phép giả sử có một kho lưu trữ trung tâm nơi các cam kết từ các vệ tinh được đẩy một thời gian. Nhà phát triển A làm cho một số cam kết trên repo của mình trong khi B làm cho một số trên riêng của mình quá.làm thế nào để áp dụng một bản vá git như thể tác giả đã cam kết với repo của tôi?

Bây giờ, A muốn kết hợp một trong các cam kết của B vào repo của mình (mà anh ta không thể truy cập trực tiếp để kéo).

Một cách là tạo B vá và gửi đến A nhưng trong trường hợp đó có hai vấn đề: 1. Bản vá sẽ xuất hiện dưới dạng sửa đổi cục bộ cho A, sau đó sẽ sửa đổi (với tên riêng của nó)) 2. Khi repo trung tâm được cập nhật, các thay đổi sẽ xung đột (được đẩy bởi hai tác giả khác nhau).

Có cách nào để có bản vá được áp dụng trực tiếp "dưới dạng cam kết" trên repo cục bộ để nó xuất hiện như thể nó được lấy từ repo trung tâm (tức là xuất xứ) không?

PS: (điều này có thể không áp dụng: xem nhận xét: có cách nào để đánh văn bản cho đến khi được xác minh không?) Sau khi một số điều tra và thử nghiệm trông giống như git am < git-formatted-patch sẽ làm cho nó sao cho xuất hiện cam kết với các bậc thầy địa phương (sau đó tôi hy vọng nó sẽ được công nhận là cam kết tương tự khi B đẩy nó vào repo trung tâm). Dường như nó là git áp dụng mà lá bản vá không được cam kết ...

+1

'git am' sẽ ** không ** dẫn đến cam kết giống với bản gốc. Việc xác định tác giả và thời gian sẽ được bảo tồn, nhưng cam kết mới sẽ có một thời gian cam kết khác và (trừ khi bạn nói dối về git về bạn là ai) một bản sắc người đi làm khác nhau. Những khác biệt này sẽ dẫn đến kết quả có một ID SHA1 khác. – qqx

Trả lời

3

B có thể tạo và gửi bundle chứ không phải là bản vá. Điều này cho phép gửi các cam kết khi không có phương tiện nào có sẵn để đẩy hoặc tìm nạp sẽ hoạt động.

13

git am là những gì bạn đang tìm kiếm. Yêu cầu anh ta cam kết tại địa phương và làm git format-patch. Điều này sẽ tạo ra một bản vá. Sau đó bạn có thể sử dụng git am để thêm nó vào repo của bạn.

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