Như đã nói, để loại trừ khỏi trạng thái chỉ cần sử dụng:
git status -uno # must be "-uno" , not "-u no"
Thay vào đó, nếu bạn muốn bỏ qua vĩnh viễn các tệp hiện không bị theo dõi, bạn có thể, từ thư mục gốc của dự án, khởi chạy:
git status --porcelain | grep '^??' | cut -c4- >> .gitignore
Mỗi cuộc gọi tiếp theo git status
sẽ bỏ qua những tập tin đó.
CẬP NHẬT : lệnh trên có một nhược điểm nhỏ: nếu bạn chưa có .gitignore
tệp nhưng gitignore của bạn sẽ tự bỏ qua! Điều này xảy ra bởi vì tập tin .gitignore
được tạo trước khi git status --porcelain
được thực thi. Vì vậy, nếu bạn chưa có .gitignore
tệp nào, tôi khuyên bạn nên sử dụng:
echo "$(git status --porcelain | grep '^??' | cut -c4-)" > .gitignore
Điều này tạo ra một subshell mà hoàn thành trước khi các .gitignore
tập tin được tạo ra.
GIẢI THÍCH QUY TẮC vì tôi đang nhận được rất nhiều phiếu bầu (cảm ơn bạn!) Tôi nghĩ rằng tôi nên giải thích rõ hơn về lệnh này một chút:
git status --porcelain
được sử dụng thay git status --short
vì nhãn hiệu quốc gia "Đưa đầu ra trong một định dạng dễ phân tích cú pháp cho các kịch bản. Đây là giống với sản lượng ngắn, nhưng sẽ duy trì ổn định trên các phiên bản git và bất kể cấu hình người dùng." Vì vậy, chúng tôi có cả khả năng phân tích và ổn định;
grep '^??'
chỉ lọc các dòng bắt đầu bằng ??
, theo hướng dẫn trạng thái git , tương ứng với các tệp không bị theo dõi;
cut -c4-
xóa 3 ký tự đầu tiên của mỗi dòng, điều này cho chúng ta đường dẫn tương đối đến tệp không bị theo dõi;
- các
|
ký hiệu là các đường ống , chuyển đầu ra của lệnh trước sang đầu vào của lệnh sau;
- các ký hiệu
>>
và >
là các toán tử chuyển hướng , nối thêm đầu ra của lệnh trước đó vào một tệp hoặc ghi đè / tạo một tệp mới, tương ứng.
KHÁC NHAU cho những người thích sử dụngsed
thay vì grep
và cut
, đây là một cách khác:
git status --porcelain | sed -n -e 's/^?? //p' >> .gitignore