2009-04-03 53 views
105

Tôi muốn xem danh sách các tệp được sửa đổi kể từ lần commit cuối cùng, như 'trạng thái git' hiển thị, nhưng tôi chỉ quan tâm đến các tệp nằm trong một thư mục duy nhất. 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 tin đã thay đổi, vì chúng sẽ là nếu tôi viết 'git add <directory>' trước). Tài liệu cho trạng thái git không nói 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 ...) .trạng thái git - có cách nào chỉ hiển thị thay đổi trong một thư mục cụ thể không?

Trả lời

144

Từ trong thư mục:

git status . 

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

git status <directoryPath> 

Ví dụ cho thư mục với đường dẫn "/ mát của tôi/path/here"

git status my/cool/path/here 
+2

Cảm ơn! Ngoài ra, 'git status ' dường như đang làm những gì tôi mong đợi - Tôi thành thật không nhớ vấn đề tôi đã có với nó trước đây ... có thể đó là vấn đề của một phiên bản git khác, dunno. –

+0

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

+1

Đúng, hành vi chắc chắn đã thay đổi từ 1,6 đến 1,7. Nó đáp ứng các yêu cầu OP trong 1,7 nhưng 1,6 tiếp tục trên toàn bộ repo. – colgur

13

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

  1. Tới thư mục
  2. git status | grep -v '\.\.\/'

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

+0

Love it. Không kiểu cách. – redolent

26

Lý do mà git status mất các tùy chọn tương tự như git commit là mục đích của git status 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 truyền cho git status. Về mặt này, git status thực sự là git commit --preview.

Để có được những gì bạn muốn, bạn có thể làm điều này mà chương trình dàn dựng thay đổi:

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

và điều này, trong đó cho thấy những thay đổi unstaged:

git diff --stat -- <directory_of_interest> 

hoặc này trong đó cho thấy cả hai:

git diff --stat HEAD -- <directory_of_interest> 
+1

Đ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 được theo dõi), chẳng hạn như git-status ... –

+0

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

+0

'git ls-files -o' hiển thị các tập tin trong các thư mục chưa được sắp xếp đệ quy, trong khi' git status' chỉ hiển thị thư mục cấp cao nhất. Và người ta sẽ phải soạn 'git diff',' git ls-files' và tái tạo tất cả các mã màu vv mà 'git status' cung cấp nếu nó là thay thế cho' git status'. Tôi cũng thực sự muốn thấy một giải pháp cho điều này! –

0

Là một 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;

 
### create file 
sudo nano /usr/local/bin/gitstat 

### put this in 

#!/usr/bin/env bash 

dir=$1 

if [[ $dir == "" ]]; then 
    echo "Directory is required!" 
    exit 
fi 

echo "Git stat for '$dir'." 

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

### give exec perm 
sudo chmod +x /usr/local/bin/gitstat 

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

Điểm Uy Tín:

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