Как определить, отслеживается ли файл git (по коду выхода из оболочки)? - PullRequest
306 голосов
/ 09 марта 2010

Есть ли способ узнать, отслеживается ли файл, выполнив какую-то команду git и проверив код ее выхода?

Другими словами: отслеживает ли git файл?

Ответы [ 8 ]

386 голосов
/ 09 марта 2010

попробовать:

git ls-files --error-unmatch <file name>

выйдет с 1, если файл не отслежен

52 голосов
/ 17 декабря 2015

Если вы не хотите загромождать консоль сообщениями об ошибках, вы также можете запустить

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
}
15 голосов
/ 09 марта 2010

EDIT

Если вам нужно использовать git из bash, есть опция --porcelain для git status:

- фарфоровый

Дайте вывод в стабильном, простом для анализа формате для скрипты. В настоящее время это идентично выводить --short, но гарантировано не меняться в будущем, делая это Сейф для скриптов.

Вывод выглядит так:

> git status --porcelain
 M starthudson.sh
?? bla

Или, если вы делаете только один файл за раз:

> git status --porcelain bla
?? bla

ORIGINAL

сделать:

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")
12 голосов
/ 09 марта 2010

Попробуйте запустить git status для файла. Он напечатает ошибку, если он не отслеживается git

PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
6 голосов
/ 09 марта 2010

Я не знаю ни одной команды git, которая выдает «плохой» код завершения, но кажется, что простой способ сделать это - использовать команду git, которая не выводит файл, который не отслеживаетсятакие как git-log или git-ls-files.Таким образом, вам не нужно выполнять какой-либо синтаксический анализ, вы можете запустить его с помощью другой простой утилиты, такой как grep, чтобы увидеть, есть ли какие-либо выходные данные.

Например,

git-ls-файлы test_file.c |grep.

завершится с нулевым кодом, если файл отслеживается, но с кодом выхода, равным единице, если файл не отслежен.

3 голосов
/ 16 мая 2017

Я предлагаю пользовательский псевдоним для вас .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
1 голос
/ 08 февраля 2017

Только мои два цента:

git ls-files | grep -x relative/path

, где relative/path можно легко определить, нажав tab в оболочке автозаполнения. Добавьте дополнительный | wc -l, чтобы получить 1 или 0 вывод.

0 голосов
/ 22 февраля 2017

с помощью 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
....
....

Если файл не отслеживается в git,

root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
root@user-ubuntu:~/project-repo-directory#
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...