"Git diff" không làm gì cả


94

Tôi cho rằng đây là lỗi cấu hình ở đâu đó, nhưng tôi không thể tìm ra nguyên nhân. Các lệnh git thông thường dường như hoạt động tốt, nhưng "git diff" không làm gì cả. Để an toàn, tôi đã xóa các công cụ khác biệt bên ngoài khỏi tệp .gitconfig của mình. Điều này đã được cài đặt thông qua MacPorts và là phiên bản mới nhất (1.7.2.2).

Những gì tôi thấy là khi tôi chạy "git diff" từ không gian làm việc của mình, nó chỉ thoát ra mà không làm gì cả.

$ git --version
git version 1.7.2.2
$ git diff
$ 

Nếu tôi sao lưu một thư mục, ngoài không gian làm việc gốc của mình, nhập "git diff" sẽ cho tôi điều này:

$ git diff
usage: git diff [--no-index] <path> <path>

Đây có thể là hành vi được mong đợi vì tôi không ở trong kho lưu trữ git.

Bất kỳ ý tưởng nào về những gì tôi có thể làm để khắc phục sự cố này?


Điều gì khiến bạn nghĩ rằng có bất cứ điều gì để gỡ rối? Bạn đã mong đợi để xem những gì?
Rob Kennedy

Lưu ý: thông báo lỗi khi sử dụng git diff bên ngoài repo sẽ sớm rõ ràng hơn. Xem câu trả lời của tôi bên dưới
VonC

Lưu ý rằng nếu bạn đang cố gắng khác biệt một tệp cụ thể giữa hai lần cam kết và không thấy đầu ra, hãy đảm bảo cách viết hoa chính xác trong đường dẫn đến tệp.
Seth Flowers

Câu trả lời:


110

Đầu ra mặc định cho git difflà danh sách các thay đổi chưa được cam kết / thêm vào chỉ mục. Nếu không có thay đổi, thì không có đầu ra.

git diff [--options] [-] […]

Biểu mẫu này là để xem những thay đổi bạn đã thực hiện liên quan đến chỉ mục (vùng tổ chức cho lần cam kết tiếp theo). Nói cách khác, sự khác biệt là những gì bạn có thể yêu cầu git thêm vào chỉ mục nhưng bạn vẫn chưa có.

Xem tài liệu để biết thêm chi tiết. Đặc biệt, hãy cuộn xuống các ví dụ và đọc phần này:

$ git diff            # (1)
$ git diff --cached   # (2)
$ git diff HEAD       # (3)
  1. Khác biệt bản sao làm việc với chỉ mục
  2. Chênh lệch chỉ số với HEAD
  3. Khác biệt bản sao làm việc với HEAD

Bên ngoài không gian làm việc của bạn, như bạn đoán, git sẽ không biết điều gì khác biệt, vì vậy bạn phải chỉ định rõ ràng hai đường dẫn để so sánh, do đó có thông báo sử dụng.


13
Tôi không chắc câu trả lời của bạn là đúng, nhưng nó đã giúp tôi tìm ra câu trả lời, vì vậy, cảm ơn bạn và tôi sẽ đánh dấu nó là như vậy! Đầu ra mặc định cho git diff không phải là danh sách các thay đổi chưa được cam kết, nó là danh sách các thay đổi chưa được cam kết cũng là "chưa được tổ chức cho lần cam kết tiếp theo". Vì vậy, lệnh thực hiện những gì tôi mong đợi "git diff" thực hiện là "git diff HEAD".
Tom Lianza,

2
Để hoàn thành bức tranh, hãy sử dụng git diff --cached để chỉ hiển thị những gì trong chỉ mục.
Douglas

git diff làm: (index) - (working directory) hay ngược lại: (working directory) - (index)?
BKSpurgeon

4

Lưu ý: bắt đầu git 1.8.5 hoặc 1.9, Q4 2013 :

Khi người dùng nhập " git diff" bên ngoài cây làm việc , nghĩ rằng mình đang ở bên trong cây , thì thông báo lỗi hiện tại là một lớp lót đơn:

usage: git diff --no-index <path> <path>

có thể không đủ để khiến anh ta nhận ra sai lầm.

Thêm " Not a git repository" vào thông báo lỗi khi chúng tôi rơi vào --no-indexchế độ "" mà không có tùy chọn dòng lệnh rõ ràng để hướng dẫn chúng tôi làm như vậy.


Xem:

Làm rõ tài liệu cho " diff --no-index".
Tuyên bố rằng khi không ở bên trong kho lưu trữ, --no-indexđược ngụ ý và hai đối số là bắt buộc.

Làm rõ thông báo lỗi từ diff-no-indexđể thông báo cho người dùng rằng CWD không nằm trong kho lưu trữ và do đó hai đối số là bắt buộc.

To compare two paths outside a working tree:
usage: git diff --no-index <path> <path>

2

Sẽ không có gì nếu thư mục làm việc của bạn sạch sẽ và không có sự khác biệt nào so với bản cập nhật trước. Hãy thử chỉnh sửa tệp rồi chạy lại git diff, và sau đó nó sẽ hiển thị khác.


1

Nếu bạn đang sử dụng nó bên ngoài kho lưu trữ thực hoặc bản sao công việc, hành vi của nó giống với sự khác biệt của GNU. Vì vậy bạn cần thông báo 2 thư mục hoặc tệp tin cần so sánh. Thí dụ:

git diff old_dir new_dir.

Nếu có bất kỳ sự khác biệt nào giữa chúng, đầu ra sẽ hiển thị cho bạn, như mong đợi.


0

Không phải trong trường hợp của bạn, nhưng có thể do tệp bạn vượt qua không tồn tại

$ git difftool HEAD HEAD^ -- path/that-not-exists

không có gì xảy ra

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.