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ữ?
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ữ?
Câu trả lời:
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'
git
khô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-tree
sẽ 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.
ls-tree master
không hiển thị các tệp được theo dõi trong khu vực tổ chức.
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ó.
ls
... hoặcls -R
git ls-tree
- nó liên quan đến pwd
.
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.HEAD
chỉ đị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 master
hoặc bất kỳ tên chi nhánh nào khác, nhưng HEAD
là 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 .
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)"
glr
bí 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.1
Debian 10.