Khi tôi thực hiện trạng thái git trong một thư mục con của kho lưu trữ của tôi, nó cũng bao gồm trạng thái của các thư mục mẹ.
Có cách nào để giới hạn git-status chỉ trong một thư mục cụ thể không?
Khi tôi thực hiện trạng thái git trong một thư mục con của kho lưu trữ của tôi, nó cũng bao gồm trạng thái của các thư mục mẹ.
Có cách nào để giới hạn git-status chỉ trong một thư mục cụ thể không?
Câu trả lời:
git status .
sẽ hiển thị trạng thái của thư mục hiện tại và các thư mục con.
Ví dụ: các tệp (số) đã cho trong cây này:
a/1
a/2
b/3
b/4
b/c/5
b/c/6
từ thư mục con "b", git status
hiển thị các tệp mới trong toàn bộ cây:
% git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: ../a/1
# new file: ../a/2
# new file: 3
# new file: 4
# new file: c/5
# new file: c/6
#
nhưng git status .
chỉ hiển thị các tệp ở "b" trở xuống.
% git status .
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: 3
# new file: 4
# new file: c/5
# new file: c/6
#
git status .
hiển thị tất cả các tệp bên dưới "b" một cách đệ quy. Để chỉ hiển thị các tệp trong "b" chứ không phải bên dưới, bạn cần chuyển danh sách chỉ các tệp (chứ không phải thư mục) tới git status
. Điều này là một chút khó khăn, tùy thuộc vào vỏ của bạn.
Trong zsh, bạn có thể chọn các tệp thông thường với "vòng loại toàn cầu" (.)
. Ví dụ:
% git status *(.)
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: 3
new file: 4
Bash không có bộ định lượng toàn cầu nhưng bạn có thể sử dụng GNU find
để chọn các tệp thông thường và sau đó chuyển chúng theo git status
như vậy:
bash-3.2$ find . -type f -maxdepth 1 -exec git status {} +
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: 3
new file: 4
Điều này sử dụng -maxdepth
là một tiện ích mở rộng tìm GNU . POSIX tìm không có -maxdepth
, nhưng bạn có thể làm điều này:
bash-3.2$ find . -path '*/*' -prune -type f -exec git status {} +
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: 3
new file: 4
.
đề cập đến chứ không phải các thư mục con của nó. Bất kỳ công việc xung quanh cho điều đó? Cảm ơn!
git status *(.)
. Bash không có cách viết tắt để chỉ các tệp tin, nhưng bạn có thể sử dụng một find
ví dụ mở rộng find . -type f -maxdepth 1 -exec git status {} +
. Có vẻ như kiểu bạn muốn đặt bí danh hoặc tập lệnh hơn là gõ mọi lúc.
Một số lệnh hệ thống ống nước lấy một thư mục làm tham số:
git ls-files -t -o -m aDirectory
sẽ cung cấp cho bạn tất cả các tệp đã thay đổi nhưng không được cập nhật (không được thêm vào vùng) hoặc không được theo dõi. Và điều đó cho một thư mục.
Như được viết trong chủ đề này , git ls-files không hỗ trợ --added
tùy chọn ' .
lý do cơ bản hơn là vì
ls-files
hệ thống ống nước là về chỉ số .
Thêm vào không phải là để so sánh giữa chỉ mục và cây công việc.
Nó nằm giữa cam kết HEAD và chỉ mục, và nó không thuộc về hệ thống ống nước ls-files.
Vì vậy, sử dụng các lệnh được đề cập ở đây :
git diff-index --name-only -B -R -M -C HEAD src
sẽ cung cấp cho bạn cả tệp chưa thêm và tệp đã thêm
git diff-files --name-only -B -R -M -C src
sẽ chỉ cung cấp cho bạn các tệp không được thêm vào. (trong khi phát hiện viết lại, đổi tên, bản sao, ...)
Như thường lệ với các lệnh về hệ thống ống nước, một số kịch bản theo thứ tự;)
Không hoàn hảo, nhưng điều này cũng hoạt động tốt từ trong thư mục bạn quan tâm:
git status | grep -v ' \.\./'
Điều đó sẽ ẩn tất cả các thư mục yêu cầu tham chiếu hướng lên trong đường dẫn tương đối của chúng.
Nếu bạn muốn màu phun ra ở đầu kia, hãy đặt color.status
thành always
:
git config color.status always
Có thể hạn chế đối git status
với thư mục hiện tại (không có thư mục con) bằng cách đưa ra một pathspec sử dụng từ magic glob
và *:
:
git status ':(glob)*'
Khi tôi thử git, tôi không tìm thấy cách nào để làm điều đó.
Tôi đã kết thúc việc:
x@x:~/x$ git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# b
# main/a
nothing added to commit but untracked files present (use "git add" to track)
x@x:~/x$ git status | grep main
# main/a
cd YOUR_REQUIRED_DIRECTORY, sau đó,
trạng thái git.