Trước hết hãy để tôi đảm bảo bạn không nhầm lẫn --ignored
với --other
.
--other
là tùy chọn bạn đưa ra để liệt kê các tệp không được theo dõi. Từ hướng dẫn của git-ls-files
(tôi nhấn mạnh):
-o, --others
Hiện khác (ví dụ: untracked) file trong đầu ra
Điều đó nói rằng, chúng ta hãy xem những gì --ignored
làm. Bất kể những gì bạn đang liệt kê, cho dù đó là các tập tin theo dõi, các tập tin không được sửa chữa, tập tin đã sửa đổi, vv, bạn có thể loại trừ một số tập tin từ đầu ra. Hãy suy nghĩ về nó như là một miễn phí grep -v
tự động thực hiện trên đầu ra. Ví dụ:
git ls-files --other --exclude=*.o
sẽ liệt kê tất cả các tệp không được theo dõi không khớp với *.o
. Mẫu loại trừ không có gì để làm với .gitignore
. Thật vậy, .gitignore
xác định những gì --other
sẽ xuất trong khi --exclude
lọc đầu ra sau khi danh sách được thực hiện (hoặc ít nhất đó là hành vi được quan sát) .
Hiện tại --ignored
chỉ cần hoàn nguyên đầu ra. Vì vậy, những gì đã bị loại trừ bởi exclude=
sẽ được in thay thế và những gì không bị loại trừ sẽ bị bỏ qua. Vì vậy, ví dụ:
git ls-files --other --exclude=*.o --ignored
sẽ in tất cả các file untracked rằng làm trận đấu *.o
.
Không chính xác như vậy, --exclude
chỉ lọc các tệp không được theo dõi, vì vậy nếu bạn liệt kê các tệp được theo dõi, --exclude
sẽ không loại trừ bất kỳ thứ gì. Tuy nhiên, với --ignored
nó sẽ liệt kê các tệp cần được loại trừ. Đó là một chút lạ.
Kết luận:--ignored
về cơ bản sẽ hoàn nguyên mẫu loại trừ được đưa ra trong dòng lệnh. Theo mặc định, mẫu loại trừ trống (bạn thấy mọi thứ), do đó, --ignored
mà không có bất kỳ mẫu loại trừ nào dẫn đến mọi thứ bị bỏ qua. Điều này không bao giờ hữu ích và đó là lý do tại sao một mẫu loại trừ là bắt buộc đối với --ignored
để hoạt động.
Vì --exclude-standard
đã được đề cập, tôi cũng muốn mở rộng điều đó. --exclude-standard
sẽ thêm các mẫu bị bỏ qua (chẳng hạn như được viết bằng .gitignore
) làm mẫu loại trừ trong danh sách. Vì vậy, hãy suy nghĩ về lệnh sau:
git ls-files --ignored --exclude-standard
Lúc đầu, lệnh này liệt kê tất cả các tệp được theo dõi. Sau đó, với lệnh --ignored
, lệnh này sẽ chỉ in các tệp đó khớp với mẫu loại trừ. Với --exclude-standard
, các tệp hiệu quả phù hợp với các mẫu trong .gitignore
sẽ được in. NHƯNG đó là những tập tin mà bạn giữ không được theo dõi. Vì vậy, hiệu quả, bạn sẽ thấy không có gì. Trường hợp duy nhất bạn sẽ xem điều gì đó là nếu bạn đang theo dõi các tệp mà bạn cũng đã đề cập bị bỏ qua trong .gitignore
.
Nói cách khác, nếu lệnh đó xuất ra bất kỳ thứ gì, điều đó có nghĩa là bạn đã yêu cầu git bỏ qua một số tệp nhất định, nhưng bạn đã vi phạm các quy tắc của riêng mình và thêm chúng vào kho lưu trữ.
lệnh thú vị khác có thể là:
git ls-files --other --exclude-standard
Hiển thị tất cả các file untracked rằng bạn đã không chỉ định trong .gitignore
. Bạn cũng sẽ thấy các tệp này trong git status
.
git ls-files --other --ignored --exclude-standard
Hiển thị tất cả các tệp không được theo dõi mà bạn đã bỏ qua thành công với .gitignore
. Nói cách khác, (giả sử truy vấn trước đó trống, nghĩa là không có các tập tin chưa được hủy liên kết) điều này cho thấy tất cả các tệp nằm trong thư mục hiện tại không thuộc về kho lưu trữ. Điều này rất hữu ích để kiểm tra các tệp không nên bị bỏ qua và phải được đặt trong kho lưu trữ.
Bạn có nghĩa là cần chỉ định '--exclude-standard' (hoặc tương tự)? –