Как определить, отслеживается ли файл git (по коду выхода из оболочки)?
Есть ли способ узнать, отслеживается ли файл, запустив некоторые git
команда и проверка его кода выхода?
Другими словами: g it отслеживает файл?
10 ответов
Пытаться:
git ls-files --error-unmatch <file name>
выйдет с 1, если файл не отслежен
Если вы не хотите загромождать консоль сообщениями об ошибках, вы также можете запустить
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
}
РЕДАКТИРОВАТЬ
If you need to use git from bash there is --porcelain
возможность git status
:
--фарфор
Give the output in a stable, easy-to-parse format for scripts. Currently this is identical to --short output, but is guaranteed not to change in the future, making it safe for scripts.
Вывод выглядит так:
> git status --porcelain
M starthudson.sh
?? bla
Or if you do only one file at a time:
> git status --porcelain bla
?? bla
ОРИГИНАЛ
делать:
git status
You will see report stating which files were updated and which ones are untracked.
Ты можешь видеть bla.sh
is tracked and modified and newbla
is not tracked:
# 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-files. Таким образом, вам не нужно выполнять какой-либо синтаксический анализ, вы можете запустить его с помощью другой простой утилиты, такой как grep, чтобы увидеть, есть ли какие-либо выходные данные.
Например,
git-ls-files test_file.c | grep.
выйдет с нулевым кодом, если файл отслеживается, но с кодом выхода, равным единице, если файл не отслеживается.
Я предлагаю свой псевдоним на вас .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 ls-files | grep -x relative/path
где relative/path
можно легко определить, нажав tab
в оболочке автозаполнения. Добавить дополнительный | wc -l
чтобы получить 1 или 0 выход.
С помощью 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#
if git rev-parse -q --verify :path/to/file >&-
then echo it\'s tracked
else echo it\'s not
fi
Я бы предпочел, потому что команда git log не перемещается по каталогу, поэтому вывод будет аналогичным независимо от того, является ли проверяемый путь файлом или каталогом.
Вот пример вывода для
git ls-files
:
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git ls-files untracked-file # Untracked file shows no output
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git ls-files form/data.json # tracked file shows its name again
form/data.json
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git ls-files form # For directory entire directory is traveresed
form/Traffic_Params_2M_IS_cont_GVolte_EATF.xls
form/data.json
Пример вывода для
git log -1 --oneline
:
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git log -1 --oneline untracked-file # Untracked file shows no output
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git log -1 --oneline form/data.json # tracked file shows one-line output
e8e9e0f CONTAINERS-767 MT and release change for 21.8
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git log -1 --oneline form # Only directory info is given no traversal
e8e9e0f CONTAINERS-767 MT and release change for 21.8