如何判断一个文件是否被git跟踪(通过shell退出代码)?
有没有办法通过运行一些git
命令并检查其退出代码来判断文件是否被跟踪?
换句话说:是git跟踪文件?
尝试:
git ls-files --error-unmatch <file name>
如果文件没有被跟踪,将会以1退出
如果您不想用错误信息弄乱控制台,也可以运行
git ls-files file_name
然后检查结果。 如果git没有返回,那么文件不被跟踪。 如果跟踪,git将返回文件path。
如果要将其合并到脚本中,这非常方便,例如PowerShell:
$gitResult = (git ls-files $_) | out-string if ($gitResult.length -ne 0) { ## do stuff with the tracked file }
编辑
如果你需要从bash中使用git,可以使用--porcelain
选项来指定git status
:
– 瓷
为脚本提供稳定的,易于parsing的格式输出。 目前这与–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
。 如果没有被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。 这样你不需要做任何parsing,你可以通过另外一个简单的工具来运行它,比如grep来查看是否有输出。
例如,
git-ls-files test_file.c | grep。
如果文件被跟踪,将以零代码退出,但如果文件未被跟踪则退出代码为1。
我build议您在.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),在您的工作空间,您可以testing它:
$ 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
可以通过按下自动完成shell中的tab
轻松确定。 添加一个额外的| wc -l
| wc -l
得到1或0的输出。
使用git log
会给这个信息。 如果在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#