Answers:
尝试:
git ls-files --error-unmatch <file name>
如果未跟踪文件,将以1退出
--error-unmatch选项放在文件名之前,以获取错误。该选项仅以某种方式仅适用于其后的文件名。
--)时,--error-unmatch它被视为仅另一个文件名(不在索引中),并且无效。
git ls-files | grep <PATTERN>?例如:git ls-files | grep Main.h
如果您不想在控制台上显示错误消息,也可以运行
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
}
file_name需要完全匹配(完整路径+文件名),但可以与通配符一起使用:git ls-files *foo.rb
编辑
如果您需要从bash使用git,则可以--porcelain选择git status:
- 瓷
以稳定,易于解析的格式为脚本输出。当前,这与--short输出相同,但是可以保证将来不会更改,从而使脚本安全。
输出看起来像这样:
> 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")
git status --porcelain是您的朋友,如果您需要按脚本解析输出,请查看链接的文档,它显示了其他有用的选项
git status --porcelain error: unknown option 瓷器版本为1.6.0 :-)
尝试git status在文件上运行。如果它没有被git跟踪,它将打印一个错误
PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
git status trackedfile我会得到退出代码1(预期为0很有用),但在输出中不会出现“错误:”。我宁愿解析退出代码,也不愿解析字符串输出。
.gitignore
$ git status notthere:On branch master nothing to commit, working directory clean
我提出一个自定义的别名你.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 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#
只是我的两分钱:
git ls-files | grep -x relative/path
其中relative/path可通过按下容易地确定tab自动完成外壳内。添加一个附加值| wc -l 以获得1或0输出。
grepoption --fixed-strings。