Чи є спосіб визначити, чи відслідковується файл, виконавши якусь git
команду та перевіривши вихідний код?
Іншими словами: чи відслідковує файл git?
Чи є спосіб визначити, чи відслідковується файл, виконавши якусь git
команду та перевіривши вихідний код?
Іншими словами: чи відслідковує файл git?
Відповіді:
спробуйте:
git ls-files --error-unmatch <file name>
вийде з 1, якщо файл не відстежується
--error-unmatch
параметр перед назвою файлу, щоб отримати помилку. Якось ця опція застосовується лише до імен файлів, які слідують за нею.
--
) --error-unmatch
трактується як просто інше (не в індексі) ім'я файлу і не має ефекту.
git ls-files | grep <PATTERN>
? приклад:git ls-files | grep Main.h
Якщо ви не хочете захаращувати консоль повідомленнями про помилки, можете також запустити
git ls-files file_name
а потім перевірити результат. Якщо git нічого не повертає, файл не відстежується. Якщо це відстежується, git поверне шлях до файлу.
Це стане в нагоді, якщо ви хочете об'єднати його в сценарій, наприклад PowerShell:
$gitResult = (git ls-files $_) | out-string
if ($gitResult.length -ne 0)
{
## do stuff with the tracked file
}
file_name
має бути точна відповідність (повний шлях + назва файлу), але його можна використовувати з підстановкою:git ls-files *foo.rb
EDIT
Якщо вам потрібно використовувати git з bash, є --porcelain
варіант git status
:
- порцеляна
Дайте вихід у стабільному, простому для розбору форматі сценаріїв. В даний час це ідентично - короткий вихід, але гарантується, що він не зміниться в майбутньому, що робить його безпечним для сценаріїв.
Вихід виглядає приблизно так:
> git status --porcelain
M starthudson.sh
?? bla
Або якщо ви одночасно створюєте лише один файл:
> git status --porcelain bla
?? bla
ОРИГІНАЛЬНИЙ
робити:
git status
Ви побачите звіт із зазначенням, які файли були оновлені, а які - не відстежуються.
Ви можете бачити, bla.sh
як відстежується та змінюється, і newbla
не відстежується:
# 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
ваш друг, якщо вам потрібно проаналізувати вихідний сценарій, подивіться на пов'язаний документ, він покаже деякі інші корисні варіанти
git status --porcelain error: unknown option
porcelain 'Версія 1.6.0 :-)
Спробуйте запустити git status
файл. Він надрукує помилку, якщо її не відслідковує git
PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
git status trackedfile
я отримую вихідний код 1 (очікується, що 0 буде корисним), але він не дає мені "error:" у висновку. Я б швидше проаналізував вихідний код, ніж виведення рядка
.gitignore
$ git status notthere
:On branch master nothing to commit, working directory clean
Я не знаю жодної команди git, яка дає "поганий" код виходу, але це здається простим способом зробити це було б використовувати команду git, яка не дає виводу для не відстежуваного файлу, наприклад git-log або git-ls-файли. Таким чином, вам не потрібно робити будь-який аналіз, ви можете запустити його через іншу просту утиліту, наприклад grep, щоб побачити, чи був вихід.
Наприклад,
git-ls-файли test_file.c | греп.
вийде з нульовим кодом, якщо файл відстежується, але код виходу одного, якщо файл не відстежується.
Я пропоную для користувача псевдонім на вас .gitconfig
.
Ви повинні зробити так:
1) За допомогою команди git:
git config --global alias.check-file <command>
2) Редагування ~/.gitconfig
та додавання цього рядка в псевдонімі розділу:
[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"
Після запуску команди (1) або збереженого файлу (2) на робочій області ви можете протестувати її:
$ git check-file
$ Filename missing
$ git check-file README.md
$ File tracked
$ git check-file foo
$ File not tracked
використання git log
дасть інформацію про це. Якщо файл відстежується в git, команда показує деякі результати (журнали). Інакше це порожньо.
Наприклад, якщо файл відстежується git,
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
....
....
Якщо файл не відслідковується,
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
root@user-ubuntu:~/project-repo-directory#
Всього два мої центи:
git ls-files | grep -x relative/path
де relative/path
їх можна легко визначити, натиснувши tab
в оболонці автоматичного завершення. Додайте додатковий, | wc -l
щоб отримати вихід 1 або 0.
grep
варіант --fixed-strings
.