Tôi chưa quen với cả điều khiển git và phiên bản vì vậy tôi đang cố gắng tìm ra bản vá là gì và nó khác với các hoạt động còn lại tôi làm trong git như thế nào?
Khi nào tôi áp dụng một bản vá? Có xảy ra mỗi khi tôi cam kết không?
Tôi chưa quen với cả điều khiển git và phiên bản vì vậy tôi đang cố gắng tìm ra bản vá là gì và nó khác với các hoạt động còn lại tôi làm trong git như thế nào?
Khi nào tôi áp dụng một bản vá? Có xảy ra mỗi khi tôi cam kết không?
Câu trả lời:
Bạn có thể thấy trong bài đăng trên blog này cách bạn có thể tạo một bản vá (tập hợp các thay đổi bạn muốn giao tiếp và áp dụng cho một repo khác)
(ảnh từ bài đăng trên blog năm 2008 " Bioruby with git: nó sẽ hoạt động như thế nào? ", được xuất bản bởi Jan AERTS )
Xem thêm Đóng góp cho Rails với Git như một ví dụ cụ thể khác.
Ngày nay, yêu cầu kéo GitHub giúp dễ dàng áp dụng các bản vá trên repos GitHub, rất hữu ích khi bạn không phải là người đóng góp trực tiếp (tức là bạn không có quyền đẩy trực tiếp vào repo).
Trên thực tế, gần đây GitHub đã giới thiệu " Email yêu cầu kéo tốt hơn " để cải thiện thông báo về các bản vá mới.
Patch là một chương trình Unix cập nhật các tệp văn bản theo các hướng dẫn có trong một tệp riêng biệt, được gọi là tệp vá.
Vì vậy, nói cách khác, nó có thể có nghĩa là tệp có hướng dẫn hoặc chương trình xử lý tệp đó và áp dụng nó vào một cái gì đó.
Bây giờ, một tập tin vá là gì? Giả sử bạn có một tệp văn bản có 2 dòng:
This is line A.
This is line B, or otherwise #2.
Sau đó, bạn thay đổi dòng đầu tiên và bây giờ tệp của bạn trông như thế này:
This is SPARTA.
This is line B, or otherwise #2.
Làm thế nào bạn sẽ mô tả sự thay đổi nội dung của tập tin? Bạn có thể nói rằng dòng đầu tiên "Đây là dòng A." đã được thay thế bằng "Đây là SPARTA." hoặc thậm chí từ cuối cùng "A" của dòng đầu tiên được thay thế bằng một từ khác "SPARTA". Và đó là chính xác những gì diff nói với chúng tôi. Giả sử tôi có hai phiên bản của tệp này, một phiên bản gọi là file1.txt và một phiên bản khác là file2.txt, sau đó tôi chạy diff và nhận được điều này:
$ diff -u file1.txt file2.txt
--- file1.txt 2011-11-26 11:07:03.131010360 -0500
+++ file2.txt 2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
This is line B, or otherwise #2.
Có một mô tả về các thay đổi, bạn có thể áp dụng nó cho một nội dung ban đầu và nhận được một nội dung được sửa đổi. Và những thay đổi đó, được đặt ở định dạng hợp nhất mà các chương trình giống như "vá" có thể hiểu được, được gọi là tệp vá. Nó giống như thay vì lấy một con cá từ một người mà họ dạy bạn cách câu cá, để bạn có thể tự mình đào con cá đó ra khỏi vùng nước. Bây giờ, hãy áp dụng bản vá của chúng tôi cho file1.txt để làm cho nó trông giống hệt như file2.txt:
$ cat file1.txt
This is line A.
This is line B, or otherwise #2.
$ cat file2.txt
This is SPARTA.
This is line B, or otherwise #2.
$ diff -u file1.txt file2.txt > changes.patch
$ cat changes.patch
--- file1.txt 2011-11-26 11:09:38.651010370 -0500
+++ file2.txt 2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
This is line B, or otherwise #2.
$ patch < changes.patch
patching file file1.txt
$ cat file1.txt
This is SPARTA.
This is line B, or otherwise #2.
$
Bạn có thể nghĩ rằng sẽ dễ dàng hơn khi chỉ có hai phiên bản của tệp này. Vâng, trong trường hợp đơn giản đó là sự thật. Nhưng khi bạn có rất nhiều tệp và những tệp đó rất lớn, sẽ hiệu quả hơn rất nhiều khi có một vài dòng thay đổi thay vì hai bản sao của toàn bộ.
Khi nói về git, file patch vẫn có nghĩa tương tự, nhưng tự mình sử dụng diff + patch sẽ là một cơn ác mộng. Ví dụ, bạn sẽ luôn phải có hai phiên bản của tệp (hoặc thậm chí toàn bộ kho lưu trữ) để kiểm tra để so sánh chúng. Nghe có vẻ không tốt, phải không? Vì vậy, git sẽ giải quyết tất cả công việc khó khăn cho bạn - nó so sánh tệp cục bộ của bạn với kho lưu trữ bạn đang làm việc và có thể hiển thị nó cho bạn dưới dạng "diff" hoặc áp dụng "diff" như một patch aka cam kết thay đổi của bạn, hoặc thậm chí cho phép bạn áp dụng một số tệp vá mà bạn đã có. Không đi sâu vào chi tiết, theo nghĩa này, git hoàn toàn giống với các hệ thống kiểm soát phiên bản khác như SVN, hoặc thậm chí CVS hoặc lực lượng.
Hy vọng nó giúp!
patch
chương trình tích hợp. Tôi nghĩ rằng git đã thực hiện riêng của mình.
Một bản vá là một tệp nhỏ chỉ ra những thay đổi được thực hiện trong kho lưu trữ. Nó thường được sử dụng khi ai đó bên ngoài nhóm của bạn có quyền truy cập chỉ đọc nhưng có sẵn một thay đổi mã tốt. Anh ta sau đó tạo ra một bản vá và gửi nó cho bạn. Bạn áp dụng nó và đẩy nó vào kho git. Mọi người sau đó được hưởng lợi từ phiên bản cập nhật và tác giả của bản vá không cần truy cập đọc / ghi.
Nó thực sự chủ yếu là một thứ bảo mật (ít nhất, đó là những gì mọi người sử dụng nó cho).
git diff
hiển thị các thay đổi dưới dạng các bản vá theo mặc định, git apply
cho phép bạn áp dụng một bản vá, v.v.).
Một tệp vá đại diện cho một tập hợp các thay đổi có thể được áp dụng cho bất kỳ chi nhánh nào, theo bất kỳ thứ tự nào. Bằng cách sử dụng bản vá, bạn sẽ nhận được sự khác biệt giữa một hoặc nhiều tệp. Và sau này, bạn có thể áp dụng các khác biệt (bản vá) để nhận các thay đổi trên các tệp mới. Có nhiều cách sử dụng cho một bản vá trong Git. Nếu bạn có những thay đổi không được cam kết trong thư mục làm việc của mình và bạn cần lấy những thay đổi đó để áp dụng ở một nơi khác, chỉ cần tạo một bản vá và áp dụng bản vá.
git diff > mypatch.patch
Nếu bạn có tệp mới trong kho lưu trữ của mình (không bị theo dõi), thì bạn nên tạo giai đoạn tệp trước khi tạo bản vá (không cam kết) và sử dụng lệnh sau
git diff --cached > mypatch.patch
Sau này bạn có thể áp dụng bản vá:
git apply mypatch.patch
Nếu bạn muốn thực hiện một số thay đổi đối với kho git, rằng bạn không có quyền ghi, chỉ cần thực hiện các thay đổi và tạo một bản vá giữa cả hai và gửi bản vá cho ai đó có quyền áp dụng bản vá, bằng cách này thay đổi của bạn nên được thêm vào kho git đó.
git format-patch <base_commit_or_branch_name>
= kết thúc tất cả các cam kết từ bây giờ trở lại <base_commit_or_branch_name> thành các tệp đẹp và gọn gàng chứa khác biệt cũng như các thông điệp cam kết, để dễ dàng gửi (ví dụ: qua email) cho người khác muốn vá chúng cơ sở mã của họ. Sau đó, người nhận vá hệ thống của họ bằng tệp của bạn:cat *.patch | git am
Một bản vá là một tập hợp các khác biệt giữa một hoặc nhiều tệp, để hiển thị những gì khác nhau giữa chúng. Bạn thường chỉ tạo ra một bản vá để cho ai đó thấy những gì bạn đã thay đổi. Một ví dụ về thời điểm bạn có thể làm điều này là khi bạn tìm và sửa một lỗi trong ứng dụng nguồn mở và sau đó đăng bản sửa lỗi lên trình theo dõi lỗi của họ.