2012-01-25 45 views
20

Khi tôi thực hiện git status Tôi nhận được danh sách các tệp có tiền tố là new file:. Làm thế nào tôi có thể nhận được chỉ danh sách này? Tôi muốn xử lý các tập tin này trong một vòng lặp đơn giản trong một kịch bản shell nhỏ.git: liệt kê các tệp mới chỉ

+0

Bạn đã thử 'grep' chưa? 'git status | grep tệp mới'. – Zeta

+0

Có, nhưng điều đó không mang lại cho tôi tên tệp đơn giản. – BetaRide

+2

Tôi thà dùng 'git ls-files --others --exclude-standard' (http://stackoverflow.com/a/2299448/6309) – VonC

Trả lời

15

Tôi sẽ sử dụng một cái gì đó như git status --porcelain | grep "^A" | cut -c 4-

+0

Đó là năm sau đó, nhưng điều này không còn làm việc cho tôi (đầu ra của 'trạng thái git' có khả năng thay đổi). ** CHỈNH SỬA: ** Bah. Chưa thêm/cam kết nó. Khẳng định thời gian thử nghiệm! – Hendy

12

Bạn có thể sử dụng trạng thái git git --short để nhận danh sách tệp.

+5

Điều này không nên bỏ qua. – jarederaj

54

Không sử dụng grep để phân tích đầu ra git. Git gần như chắc chắn có những thứ bạn đang tìm kiếm được xây dựng trong (trừ khi bạn đang đi cho những thứ thực sự tiên tiến).
Bạn có thể sử dụng git diff để hiển thị các thay đổi. --name-only chỉ hiển thị tên tệp. --diff-filter=A chỉ liệt kê các tệp được thêm vào.
Nếu bạn muốn xem các tệp mới mà bạn đã thêm vào chỉ mục sử dụng --cached, nếu không hãy bỏ qua nó. Để xem cả hai khác biệt với HEAD.
Các lệnh giống như thế này:

git diff --name-only --diff-filter=A --cached # All new files in the index 
git diff --name-only --diff-filter=A   # All files that are not staged 
git diff --name-only --diff-filter=A HEAD  # All new files not yet committed 
+2

diff-filter thực sự là con đường để đi :) –

+1

Thật không may là OP không chấp nhận câu trả lời này, như trong quan điểm khiêm nhường của tôi, bạn hoàn toàn đúng. :) –

8

Thay vì phân tích đầu ra của "tình trạng git", nó có lẽ là tao nhã hơn để sử dụng

git ls-files -o --exclude-standard 

Như với git status, ls-files sẽ sản xuất sản lượng so với thư mục làm việc của bạn.

Bạn có thể muốn bao gồm --full-name tùy chọn:

git ls-files -o --exclude-standard --full-name 
+0

OP được yêu cầu liệt kê các tệp mới và câu trả lời này không yêu cầu bất kỳ chương trình nào khác để dẫn đầu ra. Tôi tìm thấy trên mac git diff đã không làm việc với các bộ lọc như mong đợi trong khi điều này đã làm :) –

+0

Điều này rõ ràng là người chiến thắng. Nó hoạt động trên các thư mục mới chứa tất cả các tệp mới. – Ali

+0

Tuy nhiên, lưu ý rằng điều này không hoạt động từ thư mục con. Tôi đã kết thúc bằng cách sử dụng 'git diff' để làm cho tập lệnh của tôi hoạt động từ mọi thư mục trong kho: ' $ git diff --name-only --diff-filter = A HEAD' –

0

Danh sách các tập tin mới hoặc để có được các tập tin được thêm vào git, có thể được nhận bằng tình trạng git và lệnh grep như git status -s | grep ??

[email protected]:~/project-repo-directory# git status -s | grep ?? 
?? src/.../file1.js 
?? src/.../file2.js 
?? src/.../file3.js 
.... 
0
git status | grep "new file:" | cut -c 14- 

git status | grep "modified:" | cut -c 14- 
Các vấn đề liên quan