Как узнать, отслеживается ли файл git (кодом выхода оболочки)?

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

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

Ответ 1

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

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

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

Ответ 2

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

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
}

Ответ 3

ИЗМЕНИТЬ

Если вам нужно использовать 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")

Ответ 4

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

PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.

Ответ 5

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

Например,

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

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

Ответ 6

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

git ls-files | grep -x relative/path

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

Ответ 7

Я предлагаю вам псевдоним. .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

Ответ 8

используя 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#