2010-08-27 31 views
68

Tôi đoán đây là lỗi cấu hình ở đâu đó, nhưng tôi không thể tìm ra vị trí. Các lệnh git thông thường xuất hiện để 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ụ tìm 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 lates (1.7.2.2)."git diff" không có gì

Điều tôi thấy là khi tôi chạy "git diff" từ không gian làm việc của tôi, nó chỉ đơn giản là thoát, không làm gì cả.

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

Nếu tôi trở lại lên một thư mục, ra khỏi không gian làm việc gốc của tôi, gõ "git diff" mang lại cho tôi điều này:

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

Hành vi này có thể được mong đợi kể từ khi tôi không dưới một kho 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?

+0

làm cho bạn nghĩ gì có bất cứ điều gì để khắc phục? Bạn mong đợi điều gì? –

+0

Lưu ý: thông báo lỗi khi sử dụng 'git diff' * bên ngoài * một repo sẽ sớm rõ ràng hơn. Hãy xem [câu trả lời của tôi dưới đây] (http://stackoverflow.com/a/18895460/6309) – VonC

+0

Lưu ý rằng nếu bạn đang cố gắng tìm ra một tệp cụ thể giữa hai lần commit và không thấy kết quả đầu ra, hãy đảm bảo rằng vỏ bọc là đúng trong đường dẫn vào tệp. –

Trả lời

91

Đầu ra mặc định cho git diff là 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] [-] [...]

Hình thức này là để xem các thay đổi bạn đã thực hiện liên quan đến các chỉ số (dàn dựng diện tích tiếp theo cam kết). 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 tiếp vào chỉ mục nhưng bạn vẫn chưa thêm.

Xem documentation để biết thêm chi tiết. Đặc biệt, di chuyể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. Diff bản sao làm việc với chỉ số
  2. Diff chỉ số với ĐẦU
  3. Diff bản sao làm việc với ĐẦU

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

+9

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

+2

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

+0

không git diff làm: (chỉ mục) - (thư mục làm việc) hoặc cách khác xung quanh: (thư mục làm việc) - (chỉ mục)? – BKSpurgeon

2

Nó không có gì nếu thư mục làm việc của bạn được sạch sẽ và không có sự khác biệt từ bản cập nhật mới nhất. Hãy thử chỉnh sửa một tập tin và sau đó chạy git diff một lần nữa, và sau đó nó sẽ hiển thị diff.

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 hệt với GNU diff. Vì vậy, bạn cần phải thông báo cho 2 thư mục hoặc tập tin được so sánh. Ví 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.

4

Lưu ý: starting git 1.8.5 or 1.9, Q4 2013:

Khi người dùng nhập "git diff" bên ngoài một cây làm việc, nghĩ anh là bên trong một, được thông báo lỗi hiện tại đó là một single-liner:

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

có thể không đủ để khiến anh ấy nhận ra lỗi.

Add "Not a git repository" để được thông báo lỗi khi chúng ta rơi vào chế độ "--no-index" mà không có một 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".
Trạng thái khi không có trong kho, --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> 
0

Không có trong trường hợp của bạn, nhưng có lẽ vì các tập tin mà bạn vượt qua không tồn tại

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

gì xảy ra

Các vấn đề liên quan