has*_*sen 408
尝试:
git ls-files --error-unmatch <file name>
Run Code Online (Sandbox Code Playgroud)
如果未跟踪文件,将以1退出
che*_*ica 56
如果您不想使用错误消息使控制台变得杂乱,您也可以运行
git ls-files file_name
Run Code Online (Sandbox Code Playgroud)
然后检查结果.如果git没有返回任何内容,则不会跟踪该文件.如果它被跟踪,git将返回文件路径.
如果要将其组合在脚本中(例如PowerShell),这会派上用场:
$gitResult = (git ls-files $_) | out-string
if ($gitResult.length -ne 0)
{
## do stuff with the tracked file
}
Run Code Online (Sandbox Code Playgroud)
ste*_*anB 15
编辑
如果你需要使用bash中的git,可以--porcelain
选择git status
:
- 瓷
为脚本提供稳定,易于解析的输出格式.目前这与--short输出相同,但保证将来不会改变,使脚本安全.
输出如下:
> git status --porcelain
M starthudson.sh
?? bla
Run Code Online (Sandbox Code Playgroud)
或者,如果您一次只执行一个文件:
> git status --porcelain bla
?? bla
Run Code Online (Sandbox Code Playgroud)
原版的
做:
git status
Run Code Online (Sandbox Code Playgroud)
您将看到报告,说明哪些文件已更新以及哪些文件未被跟踪.
您可以看到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")
Run Code Online (Sandbox Code Playgroud)
Jar*_*Par 11
尝试git status
在文件上运行.如果它没有被git跟踪,它将打印错误
PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
Run Code Online (Sandbox Code Playgroud)
我建议在您的.gitconfig
.
您有两种方法可以做到这一点:
git config --global alias.check-file <command below>
Run Code Online (Sandbox Code Playgroud)
~/.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"
Run Code Online (Sandbox Code Playgroud)
启动命令 (1) 或保存文件 (2) 后,您可以像这样测试它:
$ git check-file
$ Filename missing
$ git check-file README.md
$ File tracked
$ git check-file foo
$ File not tracked
Run Code Online (Sandbox Code Playgroud)
我不知道任何给出"坏"退出代码的git命令,但似乎一种简单的方法就是使用git命令,不为没有跟踪的文件提供输出,例如git-log或git-ls-files.这样你就不必进行任何解析,你可以通过另一个简单的实用程序如grep运行它来查看是否有任何输出.
例如,
git-ls-files test_file.c | grep.
如果跟踪文件,则将以零代码退出;如果未跟踪文件,则退出代码为1.