Есть ли способ узнать, отслеживается ли файл, запуская некоторую команду git
и проверяя его код выхода?
Другими словами: git отслеживание файла?
Есть ли способ узнать, отслеживается ли файл, запуская некоторую команду git
и проверяя его код выхода?
Другими словами: git отслеживание файла?
попробовать:
git ls-files --error-unmatch <file name>
выйдет с 1, если файл не отслеживается
Если вы не хотите загромождать консоль сообщениями об ошибках, вы также можете запустить
git ls-files file_name
а затем проверьте результат. Если git ничего не возвращает, файл не отслеживается. Если он отслеживается, git вернет путь к файлу.
Это пригодится, если вы хотите объединить его в script, например PowerShell:
$gitResult = (git ls-files $_) | out-string
if ($gitResult.length -ne 0)
{
## do stuff with the tracked file
}
ИЗМЕНИТЬ
Если вам нужно использовать git из bash, есть опция --porcelain
для git status
:
- фарфор
Дайте результат в стабильном, удобном для анализа формате для скрипты. В настоящее время это идентично to -short output, но гарантируется не измениться в будущем, сделав это для сценариев.
Результат выглядит следующим образом:
> 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
в файле. Он выдает сообщение об ошибке, если не отслеживается git
PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
Я не знаю никакой команды git, которая дает "плохой" код выхода, но кажется, что это простой способ сделать это, будет использовать команду git, которая не дает вывода для файла, который не отслеживается, например git -log или git -ls файлы. Таким образом, вам не нужно выполнять какой-либо синтаксический анализ, вы можете запустить его с помощью другой простой утилиты, такой как grep, чтобы узнать, есть ли какой-либо вывод.
Например,
git -ls файлы test_file.c | grep.
выйдет с нулевым кодом, если файл будет отслежен, но код выхода из него, если файл не отслеживается.
Только мои два цента:
git ls-files | grep -x relative/path
где relative/path
можно легко определить, нажав tab
внутри оболочки автоматического завершения. Добавьте дополнительный | wc -l
, чтобы получить выход 1 или 0.
Я предлагаю вам псевдоним. .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 отслеживается,
[email protected]:~/project-repo-directory# git log src/../somefile.js
commit ad9180b772d5c64dcd79a6cbb9487bd2ef08cbfc
Author: User <[email protected]>
Date: Mon Feb 20 07:45:04 2017 -0600
fix eslint indentation errors
....
....
Если файл не отслеживается git,
[email protected]:~/project-repo-directory# git log src/../somefile.js
[email protected]:~/project-repo-directory#