GitPython thêm tất cả và cam kết

Khác biệt là một chức năng nhận hai tập dữ liệu đầu vào và xuất các thay đổi giữa chúng.

$:> echo "this is a diff example" > diff_test.txt
7 là một lệnh Git đa dụng, khi được thực thi sẽ chạy một hàm tìm khác biệt trên các nguồn dữ liệu Git. Các nguồn dữ liệu này có thể là các xác nhận, nhánh, tệp, v.v. Tài liệu này sẽ thảo luận về các lệnh gọi phổ biến của
$:> echo "this is a diff example" > diff_test.txt
7 và các mẫu quy trình công việc khác nhau. Lệnh
$:> echo "this is a diff example" > diff_test.txt
7 thường được sử dụng cùng với
diff --git a/diff_test.txt b/diff_test.txt
index 6b0c6cf..b37e70a 100644
--- a/diff_test.txt
+++ b/diff_test.txt
@@ -1 +1 @@
-this is a git diff test example
+this is a diff example
0 và
diff --git a/diff_test.txt b/diff_test.txt
index 6b0c6cf..b37e70a 100644
--- a/diff_test.txt
+++ b/diff_test.txt
@@ -1 +1 @@
-this is a git diff test example
+this is a diff example
1 để phân tích trạng thái hiện tại của repo Git

Đọc khác biệt. đầu ra

Định dạng đầu ra thô

Các ví dụ sau sẽ được thực thi trong một repo đơn giản. Repo được tạo bằng các lệnh bên dưới

$:> mkdir diff_test_repo
$:> cd diff_test_repo
$:> touch diff_test.txt
$:> echo "this is a git diff test example" > diff_test.txt
$:> git init .
Initialized empty Git repository in /Users/kev/code/test/.git/
$:> git add diff_test.txt
$:> git commit -am"add diff test file"
[main [root-commit] 6f77fc3] add diff test file
1 file changed, 1 insertion[+]
create mode 100644 diff_test.txt

Nếu chúng tôi thực hiện

$:> echo "this is a diff example" > diff_test.txt
7 tại thời điểm này, sẽ không có đầu ra. Đây là hành vi dự kiến ​​vì không có thay đổi trong repo thành khác. Khi repo được tạo và chúng tôi đã thêm tệp
diff --git a/diff_test.txt b/diff_test.txt
index 6b0c6cf..b37e70a 100644
--- a/diff_test.txt
+++ b/diff_test.txt
@@ -1 +1 @@
-this is a git diff test example
+this is a diff example
3, chúng tôi có thể thay đổi nội dung của tệp để bắt đầu thử nghiệm với đầu ra khác

$:> echo "this is a diff example" > diff_test.txt

Thực hiện lệnh này sẽ thay đổi nội dung của tệp

diff --git a/diff_test.txt b/diff_test.txt
index 6b0c6cf..b37e70a 100644
--- a/diff_test.txt
+++ b/diff_test.txt
@@ -1 +1 @@
-this is a git diff test example
+this is a diff example
3. Sau khi sửa đổi, chúng tôi có thể xem khác biệt và phân tích đầu ra. Bây giờ thực thi
$:> echo "this is a diff example" > diff_test.txt
7 sẽ tạo ra đầu ra sau

diff --git a/diff_test.txt b/diff_test.txt
index 6b0c6cf..b37e70a 100644
--- a/diff_test.txt
+++ b/diff_test.txt
@@ -1 +1 @@
-this is a git diff test example
+this is a diff example

Bây giờ chúng ta hãy kiểm tra phân tích chi tiết hơn về đầu ra khác

1. Đầu vào so sánh

$:> echo "this is a diff example" > diff_test.txt
2

Dòng này hiển thị các nguồn đầu vào của sự khác biệt. Chúng ta có thể thấy rằng

diff --git a/diff_test.txt b/diff_test.txt
index 6b0c6cf..b37e70a 100644
--- a/diff_test.txt
+++ b/diff_test.txt
@@ -1 +1 @@
-this is a git diff test example
+this is a diff example
6 và
diff --git a/diff_test.txt b/diff_test.txt
index 6b0c6cf..b37e70a 100644
--- a/diff_test.txt
+++ b/diff_test.txt
@@ -1 +1 @@
-this is a git diff test example
+this is a diff example
7 đã được chuyển đến diff

2. Metadata

$:> echo "this is a diff example" > diff_test.txt
5

Dòng này hiển thị một số siêu dữ liệu Git nội bộ. Bạn rất có thể sẽ không cần thông tin này. Các số trong đầu ra này tương ứng với mã định danh băm phiên bản đối tượng Git

3. Dấu hiệu thay đổi

$:> echo "this is a diff example" > diff_test.txt
6

Những dòng này là chú giải gán ký hiệu cho từng nguồn đầu vào khác. Trong trường hợp này, các thay đổi từ

diff --git a/diff_test.txt b/diff_test.txt
index 6b0c6cf..b37e70a 100644
--- a/diff_test.txt
+++ b/diff_test.txt
@@ -1 +1 @@
-this is a git diff test example
+this is a diff example
6 được đánh dấu bằng
diff --git a/diff_test.txt b/diff_test.txt
index 6b0c6cf..b37e70a 100644
--- a/diff_test.txt
+++ b/diff_test.txt
@@ -1 +1 @@
-this is a git diff test example
+this is a diff example
9 và các thay đổi từ
diff --git a/diff_test.txt b/diff_test.txt
index 6b0c6cf..b37e70a 100644
--- a/diff_test.txt
+++ b/diff_test.txt
@@ -1 +1 @@
-this is a git diff test example
+this is a diff example
7 được đánh dấu bằng ký hiệu
$:> echo "this is a diff example" > diff_test.txt
21

4. khối khác nhau

Đầu ra khác biệt còn lại là danh sách các 'khối' khác biệt. Khác biệt chỉ hiển thị các phần của tệp có thay đổi. Trong ví dụ hiện tại của chúng tôi, chúng tôi chỉ có một đoạn khi chúng tôi đang làm việc với một kịch bản đơn giản. Các khối có ngữ nghĩa đầu ra chi tiết của riêng chúng

$:> echo "this is a diff example" > diff_test.txt
1

Dòng đầu tiên là tiêu đề chunk. Mỗi đoạn được thêm vào trước bởi một tiêu đề được đặt trong các ký hiệu

$:> echo "this is a diff example" > diff_test.txt
22. Nội dung của tiêu đề là bản tóm tắt các thay đổi được thực hiện đối với tệp. Trong ví dụ đơn giản của chúng tôi, chúng tôi có -1 +1 dòng có nghĩa là một đã thay đổi. Trong một sự khác biệt thực tế hơn, bạn sẽ thấy một tiêu đề như

Trong ví dụ tiêu đề này, 6 dòng đã được trích xuất bắt đầu từ dòng số 34. Ngoài ra, 8 dòng đã được thêm vào bắt đầu từ dòng số 34

Nội dung còn lại của đoạn khác hiển thị những thay đổi gần đây. Mỗi dòng đã thay đổi được thêm vào trước một ký hiệu

$:> echo "this is a diff example" > diff_test.txt
23 hoặc
$:> echo "this is a diff example" > diff_test.txt
24 cho biết các thay đổi đến từ phiên bản nào của đầu vào khác. Như chúng ta đã thảo luận trước đây,
$:> echo "this is a diff example" > diff_test.txt
24 biểu thị những thay đổi từ
diff --git a/diff_test.txt b/diff_test.txt
index 6b0c6cf..b37e70a 100644
--- a/diff_test.txt
+++ b/diff_test.txt
@@ -1 +1 @@
-this is a git diff test example
+this is a diff example
6 và + biểu thị những thay đổi từ
diff --git a/diff_test.txt b/diff_test.txt
index 6b0c6cf..b37e70a 100644
--- a/diff_test.txt
+++ b/diff_test.txt
@@ -1 +1 @@
-this is a git diff test example
+this is a diff example
7

Làm nổi bật các thay đổi

1.
$:> echo "this is a diff example" > diff_test.txt
28

$:> echo "this is a diff example" > diff_test.txt
7 cũng có một chế độ đặc biệt để làm nổi bật các thay đổi với độ chi tiết tốt hơn nhiều.
$:> echo "this is a diff example" > diff_test.txt
50. Chế độ này mã hóa các dòng được thêm và xóa bằng khoảng trắng và sau đó phân biệt các dòng đó

diff --git a/diff_test.txt b/diff_test.txt
index 6b0c6cf..b37e70a 100644
--- a/diff_test.txt
+++ b/diff_test.txt
@@ -1 +1 @@
-this is a git diff test example
+this is a diff example
1

Bây giờ đầu ra chỉ hiển thị các từ được mã hóa màu đã thay đổi

2.
$:> echo "this is a diff example" > diff_test.txt
51

Nếu bạn sao chép nguồn git, bạn sẽ tìm thấy một thư mục con có tên contrib. Nó chứa một loạt các công cụ liên quan đến git và các bit và phần thú vị khác chưa được nâng cấp lên git core. Một trong số đó là tập lệnh Perl có tên là diff-highlight. Diff-highlight ghép nối các dòng phù hợp của đầu ra khác biệt và làm nổi bật các đoạn từ phụ đã thay đổi

diff --git a/diff_test.txt b/diff_test.txt
index 6b0c6cf..b37e70a 100644
--- a/diff_test.txt
+++ b/diff_test.txt
@@ -1 +1 @@
-this is a git diff test example
+this is a diff example
3

Bây giờ chúng tôi đã giảm sự khác biệt của mình xuống mức thay đổi nhỏ nhất có thể

Các tập tin nhị phân khác nhau

Ngoài các tiện ích tệp văn bản mà chúng tôi đã trình bày cho đến nay,

$:> echo "this is a diff example" > diff_test.txt
7 có thể chạy trên các tệp nhị phân. Thật không may, đầu ra mặc định không hữu ích lắm

diff --git a/diff_test.txt b/diff_test.txt
index 6b0c6cf..b37e70a 100644
--- a/diff_test.txt
+++ b/diff_test.txt
@@ -1 +1 @@
-this is a git diff test example
+this is a diff example
5

Git có một tính năng cho phép bạn chỉ định lệnh trình bao để chuyển đổi nội dung của tệp nhị phân thành văn bản trước khi thực hiện tìm khác biệt. Nó đòi hỏi một chút thiết lập mặc dù. Trước tiên, bạn cần chỉ định bộ lọc textconv mô tả cách chuyển đổi một loại nhị phân nhất định thành văn bản. Chúng tôi đang sử dụng một tiện ích đơn giản có tên là pdftohtml [có sẵn qua homebrew] để chuyển đổi các tệp PDF của tôi thành HTML mà con người có thể đọc được. Bạn có thể thiết lập điều này cho một kho lưu trữ duy nhất bằng cách chỉnh sửa tệp

$:> echo "this is a diff example" > diff_test.txt
53 của mình hoặc trên toàn cầu bằng cách chỉnh sửa
$:> echo "this is a diff example" > diff_test.txt
54

$:> echo "this is a diff example" > diff_test.txt
0

Sau đó, tất cả những gì bạn cần làm là liên kết một hoặc nhiều mẫu tệp với bộ lọc pdfconv của chúng tôi. Bạn có thể làm điều này bằng cách tạo một tệp

$:> echo "this is a diff example" > diff_test.txt
55 trong thư mục gốc của kho lưu trữ của bạn

Sau khi được định cấu hình, trước tiên,

$:> echo "this is a diff example" > diff_test.txt
7 sẽ chạy tệp nhị phân thông qua tập lệnh chuyển đổi được định cấu hình và tìm khác biệt đầu ra của bộ chuyển đổi. Ví dụ, kỹ thuật tương tự có thể được áp dụng để nhận các khác biệt hữu ích từ tất cả các loại tệp nhị phân. zip, lọ và các tài liệu lưu trữ khác. sử dụng
$:> echo "this is a diff example" > diff_test.txt
57 [hoặc tương tự] thay cho pdf2html sẽ hiển thị cho bạn các đường dẫn đã được thêm hoặc xóa giữa các hình ảnh xác nhận. exiv2 có thể được sử dụng để hiển thị các thay đổi siêu dữ liệu, chẳng hạn như tài liệu kích thước hình ảnh. công cụ chuyển đổi tồn tại để chuyển đổi. không,. doc và các định dạng tài liệu khác thành văn bản thuần túy. Trong một tình huống khó khăn, các chuỗi thường sẽ hoạt động đối với các tệp nhị phân không tồn tại trình chuyển đổi chính thức

So sánh tệp. tập tin git diff

Lệnh

$:> echo "this is a diff example" > diff_test.txt
7 có thể được chuyển qua tùy chọn đường dẫn tệp rõ ràng. Khi một đường dẫn tệp được chuyển đến
$:> echo "this is a diff example" > diff_test.txt
7, thao tác tìm khác biệt sẽ được đặt trong phạm vi tệp đã chỉ định. Các ví dụ dưới đây chứng minh cách sử dụng này

$:> echo "this is a diff example" > diff_test.txt
1

Ví dụ này nằm trong phạm vi

$:> echo "this is a diff example" > diff_test.txt
60 khi được gọi, nó sẽ so sánh các thay đổi cụ thể trong thư mục làm việc, với chỉ mục, hiển thị các thay đổi chưa được sắp xếp. Theo mặc định,
$:> echo "this is a diff example" > diff_test.txt
7 sẽ thực hiện so sánh với
$:> echo "this is a diff example" > diff_test.txt
62. Bỏ qua
$:> echo "this is a diff example" > diff_test.txt
62 trong ví dụ trên
$:> echo "this is a diff example" > diff_test.txt
64 cũng có tác dụng tương tự

$:> echo "this is a diff example" > diff_test.txt
2

Khi

$:> echo "this is a diff example" > diff_test.txt
7 được gọi với tùy chọn
$:> echo "this is a diff example" > diff_test.txt
66, khác biệt sẽ so sánh các thay đổi theo giai đoạn với kho lưu trữ cục bộ. Tùy chọn
$:> echo "this is a diff example" > diff_test.txt
66 đồng nghĩa với
$:> echo "this is a diff example" > diff_test.txt
68

So sánh tất cả các thay đổi

Gọi

$:> echo "this is a diff example" > diff_test.txt
7 mà không có đường dẫn tệp sẽ so sánh các thay đổi trên toàn bộ kho lưu trữ. Ở trên, các ví dụ cụ thể về tệp, có thể được gọi mà không cần đối số
$:> echo "this is a diff example" > diff_test.txt
60 và có cùng kết quả đầu ra trên tất cả các tệp trong kho lưu trữ cục bộ

Các thay đổi kể từ lần xác nhận cuối cùng

Theo mặc định,

$:> echo "this is a diff example" > diff_test.txt
7 sẽ hiển thị cho bạn mọi thay đổi chưa được cam kết kể từ lần cam kết cuối cùng

So sánh các tệp giữa hai lần xác nhận khác nhau

$:> echo "this is a diff example" > diff_test.txt
7 có thể được thông qua Git refs để cam kết khác. Một số ví dụ về giới thiệu là,
$:> echo "this is a diff example" > diff_test.txt
62, thẻ và tên chi nhánh. Mọi cam kết trong Git đều có ID cam kết mà bạn có thể nhận được khi thực thi
$:> echo "this is a diff example" > diff_test.txt
14. Bạn cũng có thể chuyển ID cam kết này cho
$:> echo "this is a diff example" > diff_test.txt
7

$:> echo "this is a diff example" > diff_test.txt
3

So sánh các chi nhánh

So sánh hai nhánh

Các nhánh được so sánh giống như tất cả các đầu vào tham chiếu khác với

$:> echo "this is a diff example" > diff_test.txt
7

$:> echo "this is a diff example" > diff_test.txt
4

Ví dụ này giới thiệu toán tử dấu chấm. Hai dấu chấm trong ví dụ này cho biết đầu vào khác là mẹo của cả hai nhánh. Hiệu ứng tương tự xảy ra nếu các dấu chấm bị bỏ qua và một khoảng trắng được sử dụng giữa các nhánh. Ngoài ra, có một toán tử ba chấm

$:> echo "this is a diff example" > diff_test.txt
5

Toán tử ba dấu chấm khởi tạo khác biệt bằng cách thay đổi tham số đầu vào đầu tiên

$:> echo "this is a diff example" > diff_test.txt
17. Nó thay đổi
$:> echo "this is a diff example" > diff_test.txt
17 thành một tham chiếu của cam kết tổ tiên chung được chia sẻ giữa hai đầu vào khác, tổ tiên được chia sẻ của
$:> echo "this is a diff example" > diff_test.txt
17 và nhánh tính năng khác. Tham số đầu vào tham số cuối cùng không thay đổi như đầu nhánh của tính năng khác

So sánh các tập tin từ hai chi nhánh

Để so sánh một tệp cụ thể giữa các nhánh, hãy chuyển đường dẫn của tệp làm đối số thứ ba cho

$:> echo "this is a diff example" > diff_test.txt
7

$:> echo "this is a diff example" > diff_test.txt
6

Tóm lược

Trang này thảo luận về quy trình phân biệt Git và lệnh

$:> echo "this is a diff example" > diff_test.txt
7. Chúng tôi đã thảo luận về cách đọc đầu ra
$:> echo "this is a diff example" > diff_test.txt
7 và các dữ liệu khác nhau có trong đầu ra. Các ví dụ được cung cấp về cách thay đổi đầu ra
$:> echo "this is a diff example" > diff_test.txt
7 bằng tô sáng và màu sắc. Chúng tôi đã thảo luận về các chiến lược khác nhau, chẳng hạn như cách phân biệt các tệp trong các nhánh và các cam kết cụ thể. Ngoài lệnh
$:> echo "this is a diff example" > diff_test.txt
7, chúng tôi cũng đã sử dụng
diff --git a/diff_test.txt b/diff_test.txt
index 6b0c6cf..b37e70a 100644
--- a/diff_test.txt
+++ b/diff_test.txt
@@ -1 +1 @@
-this is a git diff test example
+this is a diff example
1 và
diff --git a/diff_test.txt b/diff_test.txt
index 6b0c6cf..b37e70a 100644
--- a/diff_test.txt
+++ b/diff_test.txt
@@ -1 +1 @@
-this is a git diff test example
+this is a diff example
16

Chủ Đề