Làm cách nào để liệt kê mọi tệp cho mọi sửa đổi trong Git (như bảng kê khai hg của Mercurial --all)?


10

Mercurial có một lệnh để liệt kê mọi tệp mà kho lưu trữ có cho mỗi lần sửa đổi:

hg manifest --all

Có một lệnh tương đương trong Git?


Một cái gì đó như git log --stat?
jmreicha

4
git ls-files?
NN

Chỉ tò mò, vì lý do gì bạn cần điều này?
Stephen Jennings

@StephenJennings: đó là một cách hay hơn để biết loại tệp nào mà người dùng có quyền kiểm soát phiên bản hơn là " ls -Rtrừ .gitignore" về mặt tinh thần . Tính hữu dụng nói chung: người ta có thể ít nhiều biết những gì đang xảy ra, nhưng việc xem xét nội dung của kho lưu trữ mang lại cho một sự tự tin mà người ta biết. Đặc biệt đối với người dùng mới bắt đầu, sự tự tin như vậy tạo ra sự khác biệt lớn trong việc sử dụng chương trình dễ chịu như thế nào. Git không làm cho người dùng yên tâm, đó là lý do tại sao rất nhiều người ghét nó cho đến khi họ tìm hiểu nó.
Esteis

Câu trả lời:


3

Tôi hoàn toàn khủng khiếp với các kịch bản shell nên điều này chắc chắn là tối ưu phụ, nhưng loại điều này có thể làm điều đó cho bạn, giả sử bạn đang sử dụng bash. Hy vọng rằng ai đó khác có thể đến và dọn dẹp nó, hoặc thay thế nó bằng một cái gì đó tốt hơn. Tôi chỉ thử nghiệm nó trên máy Mac của mình, vì vậy hãy cẩn thận.

Nó nên in tất cả các tệp trong các cam kết là tổ tiên của ĐẦU hiện tại. Lưu nó trong một tệp được gọi manifest.shở đâu đó trong đường dẫn của bạn:

#!/bin/bash

TFILE=$(mktemp -t git-manifest)

for sha in $(git log --pretty=format:%H)
do
    git ls-tree --name-only --full-tree -r $sha >> $TFILE
done

sort -u $TFILE
rm $TFILE

1
Không cần exportvì nó không cần phải có sẵn trong các quy trình con. Nếu vòng lặp vượt quá băm SHA, vòng lặp hoạt động tốt, nếu không, việc sử dụng readvà trích dẫn biến sẽ tốt hơn. sortcó một -utùy chọn mà làm những gì uniq. Tệp sẽ không nhận được rmkhi bạn hủy nửa chừng, bạn cần một cái trapcho điều đó, nhưng điều đó có thể là quá mức cho tập lệnh này.
Daniel Beck

@DanielBeck: Cảm ơn, tôi đã cập nhật nó một chút. mktempkhông tồn tại trong Git Bash, tôi nên tìm ra cách đối phó với điều đó để Windows cũng có thể chơi.
Stephen Jennings
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.