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



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



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

688   8  
git

8 ответов:

попробуй:

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
}

EDIT

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

--фарфор

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

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

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

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

> git status --porcelain bla
?? bla

оригинал

do:

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-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 ); 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 <[email protected]>
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#

Comments

    Ничего не найдено.