Cách áp dụng bản vá cho tệp (và tạo bản vá) trong Linux

Linux 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 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 khác biệt nhập cuộc. 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ác 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 .

Đô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 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úp 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 cho 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 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 .

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 đ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 để 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 .

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 để á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-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á để 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 để làm mọi thứ ngoài việc thực sự sửa đổi các tệp. 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 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 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ớ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à 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 . 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.


$config[zx-auto] not found$config[zx-overlay] not found