Làm thế nào để áp dụng một bản vá được tạo bằng bản vá định dạng git?


221

Tôi có 2 kho lưu trữ cục bộ cả hai chỉ vào cùng một kho lưu trữ từ xa.

Trong một kho lưu trữ git, nếu tôi làm git format-patch 1, làm thế nào tôi có thể áp dụng bản vá đó cho kho lưu trữ khác?

Câu trả lời:


330

Lưu ý: Trước tiên, bạn có thể xem trước bản vá của mình sẽ làm gì:

Đầu tiên là số liệu thống kê:

git apply --stat a_file.patch

Sau đó chạy khô để phát hiện lỗi:

git apply --check a_file.patch

Cuối cùng, bạn có thể sử dụng git amđể áp dụng bản vá của mình như một cam kết: nó cho phép bạn đăng xuất một bản vá được áp dụng.
Điều này có thể hữu ích để tham khảo sau này.

git am --signoff < a_file.patch 

Xem một ví dụ trong bài viết này :

Trong nhật ký git của bạn, bạn sẽ thấy rằng các thông điệp cam kết có chứa một thẻ Signed-off-by-by. Thẻ này sẽ được đọc bởi Github và những người khác để cung cấp thông tin hữu ích về cách cam kết kết thúc trong mã.

Thí dụ


9
Lưu ý cho bản thân: Huy hiệu vàng Câu trả lời lớn thứ 200.
VonC

4
git am < somepatch.patchmang lại "fatal: tên nhận dạng trống (cho <>) không được phép". Ai đó có thể giải thích cho tôi tại sao?
gromit190

@ gromit190 có nghĩa là Authortiêu đề xấu trong bản vá và / hoặc bạn đã không git config user.{name,email}.
ulidtko

ĐỒNG Ý; git apply --checknói patch does not applygit apply -3nói repository lacks the necessary blob to fall back on 3-way merge.Trong git, cam kết nổi loạn là một làn gió như vậy; nhưng làm thế nào để mọi người phản ứng lại các bản vá của họ trên đầu mã được cập nhật?
ulidtko

1
@ulidtko Có lẽ với stackoverflow.com/a/15375869/6309 ?
VonC

162
git apply name-of-file.patch

25
Điều này có thể không trả lời câu hỏi chi tiết ban đầu nhưng nó đã trả lời câu hỏi trong tiêu đề đó là lý do tại sao tôi ở trên trang này. cảm ơn bạn!
Rock Lee

12
Tôi hiểu đây là một câu hỏi và câu trả lời cũ ... nhưng tôi nghĩ nó có thể hữu ích cho một số người để hiểu sự khác biệt giữa git áp dụng và git am .
mgarey

1
git áp dụng "[... đường dẫn đầy đủ vào tệp ...] / name-of-file.patch"
Anton Lyhin

41

Hoặc, nếu bạn đang đá trường cũ:

cd /path/to/other/repository
patch -p1 < 0001-whatever.patch

3
Chỉ để bạn biết: Điều đó sẽ không tạo ra một cam kết, vì vậy nó sẽ mất thông điệp cam kết và thông tin tác giả.
Caesar

22

Trước tiên, bạn nên lưu ý về sự khác biệt giữa git amgit apply

Khi bạn đang sử dụng, git ambạn thường muốn áp dụng nhiều bản vá. Do đó nên sử dụng:

git am *.patch

hoặc chỉ:

git am

Git sẽ tự động tìm các bản vá và áp dụng chúng theo thứ tự ;-)

CẬP NHẬT
Ở đây bạn có thể tìm thấy làm thế nào để tạo ra các bản vá như vậy


1
Giải thích về sự khác biệt này đã giúp tôi sử dụng git apply.. và trong --reverse:-)
Jordan Gee


14

Nếu bạn đang sử dụng IDE JetBrains (như IntelliJ IDEA, Android Studio, PyCharm), bạn có thể kéo tệp vá và thả nó vào trong IDE và một hộp thoại sẽ xuất hiện, hiển thị nội dung của bản vá. Tất cả những gì bạn phải làm bây giờ là nhấp vào "Áp dụng bản vá" và một cam kết sẽ được tạo.


1
Cảm ơn vì điều đó. Điều này thực sự hữu ích cho tất cả mọi người. Có một câu trả lời được chấp nhận. nhưng điều này cũng hữu ích.
Lasitha Benaragama

1
@ambarox Nhưng câu trả lời này đã bị hạ cấp một lần, tôi không biết tại sao
ice1000

1
có thể ai đó nghĩ rằng cách duy nhất để áp dụng các bản vá là thông qua dòng lệnh. : D tôi đã cho bạn một upvote. cổ vũ người bạn đời.
Lasitha Benaragama

1
@LasithaBenaragama - loại. SO có nghĩa là không chỉ giúp OP, mà còn cho tất cả những người theo dõi. Câu trả lời này (trong khi hữu ích) không cung cấp giải pháp chung. Điều này sẽ làm cho một bài đăng blog nhỏ tuyệt vời, nhưng không phải là một câu trả lời "SO tốt". Sẽ giải thích các downvote!
OldTinfoil

-2

Bạn có thể sử dụng cmd được đề cập dưới đây

git apply fileName.patch
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.