Trạng thái Git - có cách nào để hiển thị các thay đổi chỉ trong một thư mục cụ thể không?


135

Tôi muốn xem danh sách các tệp được sửa đổi kể từ lần xác nhận cuối cùng, như git statushiển thị, nhưng tôi chỉ quan tâm đến các tệp nằm trong một thư mục. Có cách nào để làm việc này không? Tôi đã thử git status <directory>, nhưng có vẻ như điều này làm một cái gì đó hoàn toàn khác (liệt kê tất cả các tệp đã thay đổi, như chúng sẽ được viết git add <directory>trước).

Tài liệu về trạng thái git không cho biết nhiều, ngoài thực tế là nó chấp nhận các tùy chọn tương tự mà git-commit thực hiện (nhưng mục đích của git-commit không hiển thị danh sách các tệp đã thay đổi).

Câu trả lời:


198

Từ trong thư mục:

git status .

Bạn có thể sử dụng bất kỳ đường dẫn thực sự, sử dụng cú pháp này:

git status <directoryPath>

Ví dụ cho thư mục có đường dẫn "my / cool / path / here"

git status my/cool/path/here

3
Cảm ơn! Ngoài ra, 'trạng thái git <thư mục>' dường như đang làm những gì tôi mong đợi - tôi thực sự không nhớ tôi đã gặp vấn đề gì với nó trước đây ... có lẽ đó là vấn đề của một phiên bản git khác, dunno.
Kuba Suder

Không có vấn đề, và có thể - các phiên bản mới hơn của git dường như làm cho mọi thứ dễ dàng hơn.
Sam Doidge

3
Đúng, hành vi chắc chắn thay đổi từ 1.6 đến 1.7. Nó đáp ứng yêu cầu của OP trong 1.7 nhưng 1.6 vẫn tiếp tục trên toàn bộ repo.
colgur

31

Lý do git statuscó các tùy chọn giống như git commitmục đích của git statusnó là để hiển thị những gì sẽ xảy ra nếu bạn cam kết với các tùy chọn tương tự như bạn đã chuyển qua git status. Về mặt này git statuslà thực sự git commit --preview.

Để có được những gì bạn muốn, bạn có thể làm điều này cho thấy những thay đổi theo giai đoạn:

git diff --stat --cached -- <directory_of_interest>

và điều này, cho thấy những thay đổi chưa được thực hiện:

git diff --stat -- <directory_of_interest>

hoặc điều này cho thấy cả hai:

git diff --stat HEAD -- <directory_of_interest>

2
Điều này một phần hoạt động, mặc dù nó không hiển thị các tệp mới được tạo (không bị theo dõi), giống như trạng thái git ...
Kuba Suder

OK, tôi không chắc chắn những gì bạn cần báo cáo. Nếu bạn cần kiểm tra các tập tin chưa được thử, hãy thử git ls-files --others <directory_in_question>hoặc ls-files -o.
CB Bailey

git ls-files -ohiển thị các tệp trong các thư mục không được phân chia theo cách đệ quy, trong khi git statuschỉ hiển thị thư mục cấp cao nhất. Và người ta sẽ phải soạn git diff, git ls-filesxuất và tạo lại tất cả các mã màu, vv git statuscung cấp nếu nó là một sự thay thế cho git status. Tôi cũng thực sự muốn thấy một giải pháp cho vấn đề này!
Peter V. Mørch

14

Giải pháp đơn giản nhất:

  1. Vào thư mục
  2. git status | grep -v '\.\.\/'

Tất nhiên điều này loại bỏ màu sắc.


Nếu cần thiết, bạn có thể thêm một số sửa đổi để cho màu trở lại. ví dụ 1 ví dụ 2
Carson

2

Lưu ý, nếu bạn đơn giản hóa để kiểm tra số liệu thống kê git mà không cần đến thư mục git;

### tạo tập tin
sudo nano / usr / cục bộ / bin / gitstat

### đặt cái này vào

#! / usr / bin / env bash

thư mục = $ 1

if [[$ dir == ""]]; sau đó
    echo "Thư mục là bắt buộc!"
    lối ra
fi

echo "Git stat cho '$ dir'."

git --git-dir = $ dir / .git --work-tree = $ dir diff --stat

### cho phép perm
sudo chmod + x / usr / cục bộ / bin / gitstat

Và gọi kịch bản đơn giản đó : gitstat /path/to/foo-project. Bạn cũng có thể sử dụng nó trong khi foo-projectchỉ đang thực hiện gitstat .và do đó, giả sử ngắn hơn git status -s, git diff --stathoặc git diff --stat HEADnếu bạn luôn sử dụng bàn điều khiển thay vì gui.

Tín dụng:

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.