Cách áp dụng bản vá cho tệp (và tạo bản vá) trong Linux
Linux vá
lệnh cho phép bạn chuyển các thay đổi từ một tập hợp tệp này sang một tập hợp tệp khác một cách nhanh chóng và an toàn. Học cách sử dụng vá
cách đơn giản.
Các lệnh vá lỗi và khác biệt
Hãy tưởng tượng bạn có một tệp văn bản trên máy tính của mình. Bạn nhận được phiên bản đã sửa đổi của tệp văn bản đó từ người khác. Làm cách nào để bạn nhanh chóng chuyển tất cả các thay đổi từ tệp đã sửa đổi sang tệp gốc của mình? Đó là nơi vá
và khác biệt
nhập cuộc. vá
và khác biệt
được tìm thấy trong Linux và các hệ điều hành Unix-Like khác, chẳng hạn như macOS.
Các khác biệt
lệnh kiểm tra hai phiên bản khác nhau của tệp và liệt kê sự khác biệt giữa chúng. Sự khác biệt có thể được lưu trữ trong một tệp được gọi là tệp vá.
Cácvá
lệnh có thể đọc một tệp vá và sử dụng nội dung như một tập hợp các hướng dẫn. Bằng cách làm theo các hướng dẫn đó, các thay đổi trong tệp đã sửa đổi sẽ được sao chép trong tệp gốc.
Bây giờ hãy tưởng tượng quá trình đó xảy ra với toàn bộ thư mục tệp văn bản. Tất cả trong một lần. Đó là sức mạnh của vá
.
Đôi khi bạn không nhận được các tệp đã sửa đổi gửi. Tất cả những gì bạn nhận được là tập tin vá lỗi. Tại sao phải gửi hàng chục tệp trong khi bạn có thể gửi một tệp hoặc đăng một tệp để dễ dàng tải xuống?
Bạn sẽ làm gì với tệp vá để thực sự vá tệp của mình? Ngoài việc gần như là một câu nói líu lưỡi, đó cũng là một câu hỏi hay. Chúng tôi sẽ hướng dẫn bạn qua nó trong bài viết này.
Các vá
Lệnh thường được sử dụng bởi những người làm việc với các tệp mã nguồn phần mềm, nhưng nó hoạt động tốt như nhau với bất kỳ tập hợp tệp văn bản nào cho dù mục đích của chúng, mã nguồn hay không.
LIÊN QUAN:Cách so sánh hai tệp văn bản trong Linux Terminal
Kịch bản ví dụ của chúng tôi
Trong trường hợp này, chúng ta đang ở trong một thư mục có tên là work chứa hai thư mục khác. Một người được gọi là đang làm việc, và cái còn lại được gọi là muộn nhất. Thư mục làm việc chứa một tập hợp các tệp mã nguồn. Thư mục mới nhất chứa phiên bản mới nhất của các tệp mã nguồn đó, một số tệp đã được sửa đổi.
Để an toàn, thư mục làm việc là bản sao của phiên bản hiện tại của tệp văn bản. Nó không phải là bản sao duy nhất của chúng.
Tìm sự khác biệt giữa hai phiên bản của tệp
Các khác biệt
lệnh tìm sự khác biệt giữa hai tệp. Hành động mặc định của nó là liệt kê các dòng đã sửa đổi trong cửa sổ đầu cuối.
Một tệp được gọi là slang.c
. Chúng tôi sẽ so sánh phiên bản trong thư mục làm việc với phiên bản trong thư mục mới nhất.
Các -u
(hợp nhất) tùy chọn cho biết khác biệt
cũng liệt kê một số dòng văn bản chưa được sửa đổi từ trước và sau mỗi phần đã thay đổi. Những dòng này được gọi là dòng ngữ cảnh. Họ giúpvá
lệnh định vị chính xác nơi phải thực hiện thay đổi trong tệp gốc.
Chúng tôi cung cấp tên của các tệp để khác biệt
biết những tệp nào để so sánh. Tệp gốc được liệt kê đầu tiên, sau đó đến tệp đã sửa đổi. Đây là lệnh chúng tôi phát hành khác biệt
:
diff -u working / slang.c mới nhất / slang.c
khác biệt
tạo ra một danh sách đầu ra cho thấy sự khác biệt giữa các tệp. Nếu các tệp giống hệt nhau, sẽ không có đầu ra nào được liệt kê. Xem loại đầu ra này từ khác biệt
xác nhận rằng có sự khác biệt giữa hai phiên bản tệp và tệp gốc cần được vá.
Tạo một tập tin vá
Để nắm bắt những khác biệt đó trong một tệp vá, hãy sử dụng lệnh sau. Đó là lệnh tương tự như trên, với đầu ra từ khác biệt
được chuyển hướng thành một tệp có tên slang.patch.
diff -u working / slang.c mới nhất / slang.c> slang.patch
Tên của tệp vá là tùy ý. Bạn có thể gọi nó là bất cứ thứ gì bạn thích. Cung cấp cho nó một phần mở rộng “.patch” là một ý tưởng hay; tuy nhiên, vì nó làm cho nó rõ ràng đó là loại tệp nào.
Để làm chová
hành động trên tệp vá và sửa đổi tệp working / slang.c, sử dụng lệnh sau. Các -u
(hợp nhất) tùy chọn cho phép vá
biết rằng tệp bản vá chứa các dòng ngữ cảnh hợp nhất. Nói cách khác, chúng tôi đã sử dụng tùy chọn -u với khác biệt, vì vậy chúng tôi sử dụng -u
tùy chọn với vá
.
patch -u working.slang.c -i slang.patch
Nếu mọi việc suôn sẻ, sẽ có một dòng đầu ra cho bạn biết vá
đang vá tệp.
Tạo bản sao lưu của tập tin gốc
Chúng tôi có thể hướng dẫn vá
để tạo một bản sao lưu của các tệp đã vá trước khi chúng được thay đổi bằng cách sử dụng-b
(sao lưu) tùy chọn. Các -Tôi
(input) tùy chọn cho bản vá biết tên của tệp bản vá sẽ sử dụng:
patch -u -b working.slang.c -i slang.patch
Tệp được vá như trước, không có sự khác biệt rõ ràng trong đầu ra. Tuy nhiên, nếu nhìn vào thư mục làm việc, bạn sẽ thấy tệp có tên slang.c.orig đã được tạo. Dấu ngày và giờ của các tệp cho thấy rằng slang.c.orig là tệp gốc và slang.c là tệp mới được tạo bởi vá
.
Sử dụng khác biệt với thư mục
Chúng ta có thể sử dụng khác biệt
để tạo một tệp vá chứa tất cả sự khác biệt giữa các tệp trong hai thư mục. Sau đó, chúng tôi có thể sử dụng tệp vá lỗi đó với vá
để áp dụng những khác biệt đó cho các tệp trong thư mục làm việc bằng một lệnh duy nhất.
Các tùy chọn chúng tôi sẽ sử dụng với khác biệt
là -u
(ngữ cảnh hợp nhất) mà chúng tôi đã sử dụng trước đó, -r
(đệ quy) tùy chọn để thực hiện khác biệt
xem xét bất kỳ thư mục con nào và -N
(tệp mới) tùy chọn.
Các -N
tùy chọn nói với khác biệt
cách xử lý các tệp trong thư mục mới nhất không có trong thư mục làm việc. Nó buộc khác biệt
để đưa hướng dẫn vào tệp vá đểvá
tạo các tệp có trong thư mục mới nhất nhưng bị thiếu trong thư mục làm việc.
Bạn có thể nhóm các tùy chọn lại với nhau để chúng sử dụng một dấu gạch ngang (-
).
Lưu ý rằng chúng tôi chỉ cung cấp tên thư mục, chúng tôi không cho biết khác biệt
để xem các tệp cụ thể:
diff -ruN working / new /> slang.patch
Nhìn trộm bên trong tệp bản vá
Hãy xem nhanh tập tin vá lỗi. Chúng tôi sẽ sử dụng ít hơn
để xem nội dung của nó.
Phần trên cùng của tệp hiển thị sự khác biệt giữa hai phiên bản slang.c.
Cuộn xuống sâu hơn qua tệp vá, chúng tôi thấy rằng sau đó nó mô tả các thay đổi trong một tệp khác có tên là structs.h. Điều này xác minh rằng tệp bản vá chắc chắn chứa sự khác biệt giữa các phiên bản khác nhau của nhiều tệp.
Xem xét trước khi bạn bước nhảy vọt
Việc vá một bộ sưu tập lớn các tệp có thể hơi khó chịu một chút, vì vậy chúng tôi sẽ sử dụng - chạy thử
tùy chọn để kiểm tra mọi thứ đều ổn trước khi chúng tôi lao vào và cam kết thực hiện các thay đổi.
Các - chạy thử
tùy chọn nói với vá
để làm mọi thứ ngoài việc thực sự sửa đổi các tệp. vá
sẽ thực hiện tất cả các kiểm tra trước chuyến bay của nó đối với các tệp và nếu nó gặp bất kỳ vấn đề nào, nó sẽ báo cáo chúng. Dù bằng cách nào, không có tệp nào được sửa đổi.
Nếu không có sự cố nào được báo cáo, chúng tôi có thể lặp lại lệnh mà không có - chạy thử
và tự tin vá các tệp của chúng tôi.
Các -d
(thư mục) tùy chọn cho biết vá
thư mục nào để làm việc trên.
Lưu ý rằng chúng tôi đang không phải sử dụng -Tôi
(đầu vào) tùy chọn để nói vá
tệp bản vá nào chứa các hướng dẫn từ khác biệt
. Thay vào đó, chúng tôi đang chuyển hướng tệp vá thành vá
với <
.
patch --dry-run -ruN -d working <slang.patch
Trong toàn bộ thư mục, khác biệt
tìm thấy hai tệp để vá. Các hướng dẫn liên quan đến các sửa đổi cho hai tệp đó đã được kiểm tra bởi vá
, và không có vấn đề nào được báo cáo.
Kiểm tra trước chuyến bay là OK; chúng tôi đã sẵn sàng để cất cánh.
Vá một thư mục
Để thực sự áp dụng các bản vá cho các tệp, chúng tôi sử dụng lệnh trước đó mà không có - chạy thử
Lựa chọn.
patch -ruN -d working <slang.patch
Lần này mỗi dòng đầu ra không bắt đầu bằng “kiểm tra”, mỗi dòng bắt đầu bằng “vá”.
Và không có vấn đề nào được báo cáo. Chúng tôi có thể biên dịch mã nguồn của mình và chúng tôi sẽ sử dụng phiên bản mới nhất của phần mềm.
Giải quyết sự khác biệt của bạn
Đây là cách dễ nhất và an toàn nhất để sử dụng vá
. Sao chép các tệp đích của bạn vào một thư mục và vá thư mục đó. Sao chép lại chúng khi bạn hài lòng rằng quá trình vá đã hoàn tất mà không có lỗi.