Có cách nào để biết một tập tin đang được theo dõi bằng cách chạy một số git
lệnh và kiểm tra mã thoát của nó không?
Nói cách khác: git theo dõi một tập tin?
Có cách nào để biết một tập tin đang được theo dõi bằng cách chạy một số git
lệnh và kiểm tra mã thoát của nó không?
Nói cách khác: git theo dõi một tập tin?
Câu trả lời:
thử:
git ls-files --error-unmatch <file name>
sẽ thoát với 1 nếu tệp không được theo dõi
--error-unmatch
tùy chọn trước tên tệp để gặp lỗi. Bằng cách nào đó, tùy chọn chỉ được áp dụng cho tên tệp theo sau nó.
--
), --error-unmatch
nó được coi như một tên tệp khác (không có trong chỉ mục) và không có hiệu lực.
git ls-files | grep <PATTERN>
? ví dụ:git ls-files | grep Main.h
Nếu bạn không muốn làm lộn xộn bảng điều khiển của mình với các thông báo lỗi, bạn cũng có thể chạy
git ls-files file_name
và sau đó kiểm tra kết quả. Nếu git trả về không có gì, thì tệp không được theo dõi. Nếu nó được theo dõi, git sẽ trả về đường dẫn tệp.
Điều này rất hữu ích nếu bạn muốn kết hợp nó trong một tập lệnh, ví dụ như PowerShell:
$gitResult = (git ls-files $_) | out-string
if ($gitResult.length -ne 0)
{
## do stuff with the tracked file
}
file_name
cần phải là một kết hợp chính xác (đường dẫn đầy đủ + tên tệp), nhưng có thể được sử dụng với các ký tự đại diện:git ls-files *foo.rb
BIÊN TẬP
Nếu bạn cần sử dụng git từ bash, có --porcelain
tùy chọn git status
:
-
Cung cấp đầu ra ở định dạng ổn định, dễ phân tích cho các tập lệnh. Hiện tại điều này giống hệt với đầu ra --short, nhưng được đảm bảo không thay đổi trong tương lai, làm cho nó an toàn cho các tập lệnh.
Đầu ra trông như thế này:
> git status --porcelain
M starthudson.sh
?? bla
Hoặc nếu bạn chỉ làm một tệp tại một thời điểm:
> git status --porcelain bla
?? bla
NGUYÊN
làm:
git status
Bạn sẽ thấy báo cáo cho biết tập tin nào đã được cập nhật và tập tin nào không bị theo dõi.
Bạn có thể thấy bla.sh
được theo dõi và sửa đổi và newbla
không được theo dõi:
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
#
# modified: bla.sh
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# newbla
no changes added to commit (use "git add" and/or "git commit -a")
git status --porcelain
là bạn của bạn nếu bạn cần phân tích đầu ra theo kịch bản, hãy xem tài liệu được liên kết, nó hiển thị một số tùy chọn hữu ích khác
git status --porcelain error: unknown option
phiên bản Git: sứ rất cũ là 1.6.0 :-)
Hãy thử chạy git status
trên tập tin. Nó sẽ in một lỗi nếu nó không được theo dõi bởi git
PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
git status trackedfile
tôi nhận được mã thoát 1 (dự kiến 0 sẽ hữu ích) nhưng nó không cho tôi "lỗi:" trong đầu ra. Tôi muốn phân tích mã thoát hơn là đầu ra chuỗi.
.gitignore
$ git status notthere
:On branch master nothing to commit, working directory clean
Tôi không biết bất kỳ lệnh git nào cung cấp mã thoát "xấu", nhưng có vẻ như một cách dễ dàng để làm là sử dụng lệnh git không cung cấp đầu ra cho tệp không được theo dõi, chẳng hạn như git-log hoặc git-ls-files. Bằng cách đó, bạn không thực sự phải thực hiện bất kỳ phân tích cú pháp nào, bạn có thể chạy nó thông qua một tiện ích đơn giản khác như grep để xem liệu có bất kỳ đầu ra nào không.
Ví dụ,
git-ls-file test_file.c | grep.
sẽ thoát với mã 0 nếu tệp được theo dõi, nhưng mã thoát là một nếu tệp không được theo dõi.
Tôi đề nghị một bí danh tùy chỉnh trên bạn .gitconfig
.
Bạn phải làm thế nào để làm:
1) Với lệnh git:
git config --global alias.check-file <command>
2) Chỉnh sửa ~/.gitconfig
và thêm dòng này vào phần bí danh:
[alias]
check-file = "!f() { if [ $# -eq 0 ]; then echo 'Filename missing!'; else tracked=$(git ls-files ${1}); if [[ -z ${tracked} ]]; then echo 'File not tracked'; else echo 'File tracked'; fi; fi; }; f"
Sau khi khởi chạy lệnh (1) hoặc tệp đã lưu (2), trên không gian làm việc của bạn, bạn có thể kiểm tra nó:
$ git check-file
$ Filename missing
$ git check-file README.md
$ File tracked
$ git check-file foo
$ File not tracked
sử dụng git log
sẽ cung cấp thông tin về điều này. Nếu tệp được theo dõi trong git, lệnh sẽ hiển thị một số kết quả (nhật ký). Khác nó là trống rỗng.
Ví dụ: nếu tệp được git theo dõi,
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
commit ad9180b772d5c64dcd79a6cbb9487bd2ef08cbfc
Author: User <someone@somedomain.com>
Date: Mon Feb 20 07:45:04 2017 -0600
fix eslint indentation errors
....
....
Nếu tập tin không được theo dõi git,
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
root@user-ubuntu:~/project-repo-directory#
Chỉ hai xu của tôi:
git ls-files | grep -x relative/path
nơi relative/path
có thể dễ dàng xác định bằng cách nhấn tab
trong vỏ tự động hoàn thành. Thêm một bổ sung | wc -l
để có được đầu ra 1 hoặc 0.
grep
tùy chọn --fixed-strings
.