Làm cách nào để git hiển thị danh sách các tệp đang được theo dõi?


535

Sử dụng dòng lệnh git, làm cách nào để git hiển thị danh sách các tệp đang được theo dõi trong kho lưu trữ?



2
Tôi tin rằng đó là. Nhưng nó không cảm thấy đúng khi đánh dấu điều này là dup khi điều này có câu trả lời tốt hơn.
lindhe 30/03/2016

5
trong một vũ trụ song song, câu hỏi này giống nhau đến mức nào bao gồm tất cả các câu trả lời, nhưng mỗi câu hỏi đều có sự tinh tế đặc biệt của riêng nó.
Jeff Puckett

Câu trả lời:


628

Nếu bạn muốn liệt kê tất cả các tệp hiện đang được theo dõi dưới nhánh master, bạn có thể sử dụng lệnh này:

git ls-tree -r master --name-only

Nếu bạn muốn một danh sách các tệp đã tồn tại (nghĩa là bao gồm các tệp đã bị xóa):

git log --pretty=format: --name-only --diff-filter=A | sort - | sed '/^$/d'

61
Sử dụng git ls-tree -r HEAD --name-only nếu bạn muốn liệt kê các tệp của nhánh hiện tại
Ramast 18/03/2015

3
Tại sao các thư mục không được liệt kê?
Shuzheng

13
@NicolasLykkeIversen - gitkhông phiên bản thư mục trực tiếp. Thay vào đó, nó lưu trữ các tập tin và đường dẫn của chúng. ls-treesẽ xuất tất cả các tập tin phiên bản. Để hiểu rõ hơn về sự khác biệt này, hãy thử dàn dựng một thư mục trống git. Thư mục trống sẽ không bao giờ hiển thị trong các thay đổi theo giai đoạn. Cách duy nhất để phiên bản một thư mục trống như vậy là thực sự phiên bản một tệp trong thư mục. Đối với các trường hợp sử dụng khi bạn cần một thư mục giữ chỗ trống như vậy trong kiểm soát phiên bản, bạn có thể tạo một tệp giả trong thư mục và phiên bản đó. Tôi hy vọng lời giải thích là rõ ràng.
Tuxdude

2
Chỉ cần lưu ý, ls-tree masterkhông hiển thị các tệp được theo dõi trong khu vực tổ chức.
nn0p

Có thể chỉ hiển thị thư mục cấp cao nhất nếu nó bao gồm nhiều thư mục con và tệp?
Blaszard

191

Các tập tin được quản lý bởi git được hiển thị bởi git ls-files. Kiểm tra trang hướng dẫn của nó.


4
Điều đó dường như chỉ hiển thị các tập tin tại hoặc bên dưới thư mục hiện tại.
Lyle Z

11
Nếu tôi chỉnh sửa phần này để bao gồm các phần có liên quan của trang hướng dẫn?
Nathan Basan

1
@NathanBasan có lẽ bạn có thể thêm một câu trả lời với thông tin đó.
Jose Castro

@LyleZ Có lẽ điều này được dự định phù hợp với ls... hoặcls -R
Flow2k

1
@LyleZ Ngoài ra, hành vi này giống với git ls-tree- nó liên quan đến pwd.
Flow2k

18

Câu trả lời được chấp nhận chỉ hiển thị các tệp trong cây của thư mục hiện tại. Để hiển thị tất cả các tệp được theo dõi đã được cam kết (trên nhánh hiện tại), hãy sử dụng

git ls-tree --full-tree --name-only -r HEAD
  • --full-tree làm cho lệnh chạy như thể bạn đang ở trong thư mục gốc của repo.
  • -rđệ quy vào các thư mục con. Kết hợp với --full-tree, điều này cung cấp cho bạn tất cả các tệp được cam kết, theo dõi.
  • --name-only xóa thông tin SHA / quyền khi bạn chỉ muốn đường dẫn tệp.
  • HEADchỉ định nhánh nào bạn muốn danh sách các tệp được cam kết theo dõi. Bạn có thể thay đổi tên này thành masterhoặc bất kỳ tên chi nhánh nào khác, nhưng HEADlà cam kết bạn đã kiểm tra ngay bây giờ.

Đây là phương pháp từ câu trả lời được chấp nhận cho ~ câu hỏi trùng lặp https://stackoverflow.com/a/8533413/4880003 .


Cảm ơn! Điều này cũng hoạt động cho repos trần.
hzpc-joostk

5

Bạn có thể muốn đầu ra màu với điều này.

Tôi sử dụng một-liner này để liệt kê các tập tin và thư mục được theo dõi trong thư mục hiện tại của chi nhánh hiện tại:

ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)

Bạn có thể muốn thêm nó dưới dạng bí danh:

alias gl='ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)'

Nếu bạn muốn liệt kê đệ quy các tệp:

'ls' --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)

Và một bí danh:

alias glr="'ls' --color=auto -d \$(git ls-tree -rt \$(git branch | grep \\* | cut -d \" \" -f2) --name-only)"

Các glrbí danh bạn với điều kiện có vẻ hơi lạ nên tôi làm một phiên bản phù hợp hơn với định dạng của các bí danh đầu tiên mà bạn cung cấp: alias glr='ls --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)'. Đã thử nghiệm với git version 2.20.1Debian 10.
baltakatei
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.