Làm thế nào khách hàng của tôi có thể áp dụng bản vá được tạo bởi git diff
mà không cần cài đặt git? Tôi đã cố gắng sử dụng patch
lệnh nhưng nó luôn yêu cầu tên tệp để vá.
patch
không hỗ trợ đầy đủ định dạng này.
Làm thế nào khách hàng của tôi có thể áp dụng bản vá được tạo bởi git diff
mà không cần cài đặt git? Tôi đã cố gắng sử dụng patch
lệnh nhưng nó luôn yêu cầu tên tệp để vá.
patch
không hỗ trợ đầy đủ định dạng này.
Câu trả lời:
git diff > patchfile
và
patch -p1 < patchfile
làm việc nhưng như nhiều người nhận thấy trong các bình luận và các bản vá câu trả lời khác không hiểu thêm, xóa và đổi tên. Không có tùy chọn nhưng git apply patchfile
nếu bạn cần xử lý thêm tập tin, xóa và đổi tên.
EDIT tháng 12 năm 2015
Các phiên bản patch
lệnh mới nhất (2.7, được phát hành vào tháng 9 năm 2012) hỗ trợ hầu hết các tính năng của định dạng "diff --git", bao gồm đổi tên và sao chép, thay đổi quyền và khác biệt symlink (nhưng chưa phải là khác biệt nhị phân) ( thông báo phát hành ).
Vì vậy, với điều kiện một người sử dụng phiên bản hiện tại / mới nhất patch
thì không cần phải sử dụng git
để có thể áp dụng diff của nó như một bản vá.
git diff > patchfile
, nhưngpatch -p1 < patchfile
relative
tùy chọn như:git diff --no-prefix --relative=my/relative/path > patchfile
patch -p1 < patchfile
không yêu cầu cài đặt git. Lệnh đầu tiên thể hiện lệnh để tạo diff, không áp dụng nó.
git diff from_branch > patchfile; git checkout from_branch; git patch -p1 < patchfile
hoặcgit diff from_branch to_branch > patchfile; ...
Sử dụng
git apply patchfile
nếu có thể.
patch -p1 < patchfile
có tác dụng phụ tiềm năng.
git apply
cũng xử lý các tệp thêm, xóa và đổi tên nếu chúng được mô tả ở git diff
định dạng, điều patch
này sẽ không được thực hiện. Cuối cùng, git apply
là một mô hình "áp dụng tất cả hoặc hủy bỏ tất cả" trong đó mọi thứ được áp dụng hoặc không có gì, trong khi bản vá có thể áp dụng một phần các tệp vá, khiến thư mục làm việc của bạn ở trạng thái lạ.
git apply
là cách tốt nhất để làm điều đó, nhưng câu hỏi này đặc biệt hỏi cách áp dụng bản vá mà không cần cài đặt Git .
--dry-run --verbose
rất hữu ích để xác định tác dụng phụ sẽ là gì, nếu có. (sử dụng bản vá v2.5.8)
git apply patchfile -
... câu trả lời lành mạnh duy nhất ..." - điều đó gần như buồn cười. Mỗi lần các nhà phát triển OpenSSL gửi cho tôi một bản vá để kiểm tra, Git không áp dụng nó. Đó là mọi lúc. Tôi vẫn chưa thấy công cụ ngu ngốc đó áp dụng một bản vá.
tôi sử dụng
patch -p1 --merge < patchfile
Bằng cách này, xung đột có thể được giải quyết như bình thường.