Đây có phải là một cách tốt để tạo ra một bản vá?


15

Tôi muốn tạo một bản vá từ một gccchi nhánh cụ thể so sánh nó với các bản phát hành chính thức; Vì vậy, khi tôi giải nén tarball từ bản phát hành ổn định, tôi có thể áp dụng bản vá và nhận được tương đương với những gì trong nhánh cụ thể đó.

Đây là lần đầu tiên tôi cần tạo một bản vá, vì vậy đây là lần đầu tiên tôi làm điều này và mối quan tâm chính của tôi là có được các tùy chọn và phân tích cú pháp ngay khi chúng ta đang nói về một phần mềm cực kỳ quan trọng

diff -crB GccStable GccGit > /tmp/fromStabletoBranch.patch

Điều này là đủ và cách tốt nhất để làm điều đó?


Các thực hành tốt thông thường ở đây liên quan đến kiểm soát phiên bản hoặc một số biến thể của những điều này. Điều này bao gồm, đồng bóng, git và các phần mở rộng hàng đợi vá liên quan của chúng. Bạn cũng có thể xem xét chăn. Có lẽ bạn có thể đi vào chi tiết hơn về những gì bạn đang cố gắng làm?
Faheem Mitha

@FaheemMitha bạn có ý nghĩa gì với "chi tiết hơn"? Tôi có một phiên bản gcctừ ổn định chính thức tar.bz2và một phiên bản không ổn định khác của nó từ gitkho lưu trữ, tôi muốn tạo một bản vá, tất nhiên tôi muốn so sánh chỉ với masterchi nhánh, không phải toàn bộ kho lưu trữ.
user2485710

OK, tốt, chắc chắn bạn có thể sử dụng một cái gì đó đơn giản như diff. nhưng sử dụng kiểm soát phiên bản thường là tốt hơn. Đối với một điều, nó làm cho khó khăn hơn nhiều để mất theo dõi những gì bạn đang làm.
Faheem Mitha

@FaheemMitha Tôi không hiểu những gì bạn đang đề xuất, tar.bz2rõ ràng tôi không phải là một gitkho lưu trữ, bạn nghĩ tôi nên tiếp tục như thế nào?
user2485710

1
Thực hiện tìm kiếm "tạo các bản vá bằng cách sử dụng kiểm soát phiên bản". Hai câu trả lời trước đây tôi đã viết có liên quan là unix.stackexchange.com/a/127810unix.stackexchange.com/a/139817
Faheem Mitha

Câu trả lời:


20

Vâng, đây là một cách tốt để tạo ra một bản vá.

Nói ngắn gọn:

  1. Để tạo bản vá cho một tệp, lệnh của bạn có thể trông giống như

    diff -Naru file_original file_updated > file.patch

    Ở đâu

    • -N: coi các tập tin vắng mặt là trống
    • -a: coi tất cả các tệp dưới dạng văn bản
    • -r: so sánh đệ quy bất kỳ thư mục con nào được tìm thấy
    • -u: đầu ra NUM (mặc định 3) dòng của bối cảnh hợp nhất
  2. Để tạo bản vá cho toàn bộ thư mục:

    diff -crB dir_original dir_updated > dfile.patch

    Ở đâu

    • -c: đầu ra NUM (mặc định 3) dòng ngữ cảnh được sao chép
    • -r: so sánh đệ quy bất kỳ thư mục con nào
    • -B: bỏ qua các thay đổi có dòng hoàn toàn trống

Sau khi tất cả để áp dụng bản vá này, người ta có thể chạy

patch -p1 --dry-run < dfile.patch

nơi chuyển đổi phướng dẫn bản vá để loại bỏ tiền tố đường dẫn để các tệp sẽ được xác định chính xác. Trong hầu hết các trường hợp nên được 1.

Xóa --dry-runnếu bạn hài lòng với kết quả được in trên màn hình.


Câu hỏi: những gì sẽ xảy ra nếu một thư mục hoặc một tập tin bị xóa dir_updatedso với những gì đã có dir_original? Việc diffchăm sóc điều đó quá hay nó bị bỏ qua?
user2485710

@ user2485710 diff thấy tập tin nào đã bị xóa. file.patchchỉ trong một tệp văn bản, vì vậy bạn có thể mở nó trong bất kỳ trình soạn thảo nào hoặc chỉ catnó và bạn sẽ thấy một dòng nhưonly in dir_original: missingfile.txt
jimmij

ok, nhưng sau đó patchsẽ xóa cái đó missingfile.txthay cái gì khác?
user2485710

Nó phụ thuộc. Nếu bạn muốn loại bỏ chúng, hãy sử dụng diff -N ...như trong ví dụ đầu tiên của tôi. Thông thường patchsẽ loại bỏ các tập tin trống theo mặc định. Nếu bạn không muốn, chỉ sử dụng diff -crBnhư trong câu hỏi của bạn. Ngoài ra trong một số trường hợp (hiếm) -Etùy chọn trong patchlệnh là cần thiết để xóa các tệp trống, sau khi sử dụng bản vá:if the input is not a context diff or if patch is conforming to POSIX, patch does not remove empty patched files unless this option is given
jimmij

Tôi đã chạy diff -Naru dir/file dir/file.new > diff.patchnhận được can't find file to patch at input line 3với patch -p0 --dry-run < diff.patchdòng đầu tiên của bản vá lần đọc --- dir/filethứ hai +++ dir/file.newvới thời gian, các diff có vẻ là vừa phải, là có bất kỳ tùy chọn cách báo cáo tên tập tin chính xác lệnh ngoại hình cho?
ptica
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.