Làm thế nào để tôi 'git diff' trên một thư mục nhất định?


132

git diffthực sự chạy một diff trên tất cả các mã nguồn. Làm thế nào để tôi làm điều này trên một thư mục nhất định, để tôi có thể xem các sửa đổi trên các tệp bên dưới nó?


2
stackoverflow.com/a/12123669/1815624 git diff master..yourbranch path/to/folder
CrandellWS

Câu trả lời:


125

Cung cấp một đường dẫn (myfolder trong trường hợp này) và chỉ cần chạy:

git diff myfolder/

28
Tôi muốn sử dụng git diff -- myfolderđể giảm thiểu sự mơ hồ đối với git. Ký hiệu chung cho git diff (và nhiều lệnh git) là git diff [commit-ish] -- [path]nơi cam kết mặc định là CHÍNH (hiện tại bạn đang ở đâu) và [path]mặc định cho thư mục gốc git, nhưng có thể là bất cứ điều gì liên quan đến thư mục hiện tại của bạn. Nếu không có --, git sẽ đoán ý của bạn, [commit-ish]hoặc [path]. Trong một số trường hợp, điều này khiến git nói ký hiệu là 'mơ hồ'. Nếu tôi nhớ chính xác.
L0LN1NJ4

2
Điều này in không có gì khi tôi thử phương pháp trong câu trả lời và phương pháp trong bình luận.
ray

@ray có nghĩa là bạn không có sự khác biệt giữa cây làm việc và cam kết mới nhất
valerij vasilcenko

3
Đối với @ray và các cá nhân trong tương lai nhìn thấy điều này, bạn có thể bao gồm các nhánh bạn đang cố gắng khác nhau git diff master..develop myfolder/như @CrandellWS đã nói trong nhận xét về câu hỏi ban đầu. Trạng thái Git sẽ hiển thị cho bạn các thay đổi nếu đó là những gì bạn đang tìm kiếm.
bvccelate

2
@ray hãy chắc chắn rằng bạn đang ở thư mục gốc. Đường dẫn sẽ liên quan đến thư mục hiện tại của bạn.
Nickofthyme

59

Nếu bạn đang so sánh các nhánh khác nhau, bạn cần sử dụng --để tách bản sửa đổi Git khỏi đường dẫn hệ thống tệp. Ví dụ: với hai chi nhánh địa phương masterbryan-working:

$ git diff master -- AFolderOfCode/ bryan-working -- AFolderOfCode/

Hoặc từ một chi nhánh địa phương đến một điều khiển từ xa:

$ git diff master -- AFolderOfCode/ origin/master -- AFolderOfCode/

29
Chỉ cần một mệnh đề sau khi liệt kê cả hai nhánh, như trong: git diff nhánh1 nhánh2 - đường dẫn / đến / dir
emery

4

Bạn nên tạo thói quen xem tài liệu cho những thứ như thế này. Nó rất hữu ích và sẽ cải thiện kỹ năng của bạn rất nhanh. Đây là bit có liên quan khi bạn làmgit help diff

   git diff [options] [--no-index] [--] <path> <path>

Hai <path>s là những gì bạn cần thay đổi để thư mục trong câu hỏi.


3

Thêm Beyond So sánh dưới dạng differftool của bạn trong Git và thêm bí danh cho diffdir là:

git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"

Nhận gitdiff như:

git diffdir 4bc7ba80edf6  7f566710c7

Tham khảo: So sánh toàn bộ thư mục w git Difftool + Beyond So sánh


1
Dấu bằng dường như là sai đối với git 2.17.1. Sử dụng git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"thay thế
Mark Schäfer

Lưu ý rằng khi sử dụng Beyond So sánh cho dir diff, bạn cần định cấu hình nó để theo liên kết tượng trưng (Trong Chế độ xem so sánh thư mục -> Quy tắc (biểu tượng trọng tài) -> Xử lý -> theo liên kết tượng trưng) HOẶC, thêm --no-symlinkstùy chọn để lệnh đọcgit difftool --dir-diff --no-symlinks
Ashutosh Jindal

1

Không chỉ bạn có thể thêm một đường dẫn, mà bạn có thể thêm git diff --relativeđể có kết quả liên quan đến thư mục đó.

git -C a/folder diff --relative

Và với Git 2.28 (quý 3 năm 2020), các lệnh trong diffgia đình "" đã học cách tôn vinh diff.relativebiến cấu hình "".

Xem cam kết c28ded8 (ngày 22 tháng 5 năm 2020) của Laurent Arnoud ( spk) .
(Được hợp nhất bởi Junio ​​C Hamano - gitster- trong cam kết e34df9a , ngày 02 tháng 6 năm 2020)

diff: thêm tùy chọn cấu hình relative

Đã ký: Laurent Arnoud
Acked-by: Đoàn Trần Công Danh

Các diff.relativetùy chọn thiết lập boolean để truechương trình chỉ thay đổi trong thư mục / giá trị hiện theo quy định của pathđối số của các relativetùy chọn và hiển thị tên đường dẫn tương đối so với thư mục nói trên.

Dạy --no-relativeghi đè sớm hơn--relative

Thêm cho tài liệu tùy chọn git-format-patch (1) --relative--no-relative

Các tài liệu hiện bao gồm :

diff.relative:

Nếu được đặt thành ' true', ' git diff' sẽ không hiển thị các thay đổi bên ngoài thư mục và hiển thị tên đường dẫn liên quan đến thư mục hiện tại.


0

Nếu bạn muốn loại trừ các thư mục con, bạn có thể sử dụng

git diff <ref1>..<ref2> -- $(git diff <ref1>..<ref2> --name-only | grep -v /)

0

Để sử dụng Beyond So sánh dưới dạng Difftool cho thư mục diff, hãy nhớ bật theo các liên kết tượng trưng như vậy:

Trong thư mục So sánh chế độ xemQuy tắc (Biểu tượng trọng tài):

Nhập mô tả hình ảnh ở đây

Và sau đó, kích hoạt theo các liên kết tượng trưng và cập nhật mặc định phiên:

Nhập mô tả hình ảnh ở đây


HOẶC LÀ,

thiết lập bí danh như vậy:

git config --global alias.diffdir "difftool --dir-diff --tool=bc3 --no-prompt --no-symlinks"

Lưu ý rằng trong cả hai trường hợp, mọi chỉnh sửa được thực hiện ở bên (trái hoặc phải) liên quan đến cây làm việc hiện tại đều được giữ nguyên.

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.