Чи є спосіб визначити, чи відслідковується файл, виконавши якусь 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.