# 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")
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git ls-files untracked-file # Untracked file shows no output
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git ls-files form/data.json # tracked file shows its name again
form/data.json
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git ls-files form # For directory entire directory is traveresed
form/Traffic_Params_2M_IS_cont_GVolte_EATF.xls
form/data.json
git log -1 --oneline的输出示例:
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git log -1 --oneline untracked-file # Untracked file shows no output
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git log -1 --oneline form/data.json # tracked file shows one-line output
e8e9e0f CONTAINERS-767 MT and release change for 21.8
vinegupt@bhoscl88-04(/imsgit_local/work/vinegupt/ims_21.8/ims_oam/MT)$ git log -1 --oneline form # Only directory info is given no traversal
e8e9e0f CONTAINERS-767 MT and release change for 21.8
9条答案
按热度按时间gev0vcfq1#
尝试:
如果未跟踪文件,将退出并返回1
q8l4jmvw2#
如果您不想让控制台充斥着错误消息,还可以运行
然后检查结果。如果git什么都没返回,那么文件就没有被跟踪。如果文件被跟踪,git会返回文件路径。
如果您想将其合并到脚本中,这会很方便,例如PowerShell:
b5lpy0ml3#
如果你需要使用bash中的git,
git status
有--porcelain
选项:以稳定、易于解析的格式输出脚本。目前这与--short output相同,但保证将来不会更改,使脚本安全。
输出如下所示:
或者,如果一次只处理一个文件:
执行:
您将看到报告,说明哪些文件已更新,哪些是untracked。
您可以看到
bla.sh
已被跟踪和修改,而newbla
未被跟踪:mrwjdhj34#
尝试在文件上运行
git status
,如果git没有跟踪,它会输出一个错误mkshixfv5#
我不知道有哪个git命令会给出一个"坏"的退出代码,但看起来一个简单的方法是使用一个git命令,对一个没有被跟踪的文件不给出任何输出,比如git-log或git-ls-files,这样你就不需要做任何解析,你可以通过另一个简单的实用程序比如grep来运行它,看看是否有任何输出。
例如,
git-ls-文件测试文件. c|格雷普
如果文件被跟踪,将退出,代码为0;如果文件未被跟踪,退出代码为1。
ecfsfe2w6#
我建议在
.gitconfig
中使用自定义别名。你有两种方法可以做到这一点:
1.使用git命令:
git config --全局别名。check-file〈下面的命令〉
1.编辑
~/.gitconfig
并在alias部分添加以下行:[别名]检查文件=“!f(){ if [ $# -eq 0 ];然后回显“缺少文件名!”;否则跟踪=$(git ls文件${1});如果 -z ${跟踪} ;则回显“未跟踪文件”;else echo '文件已跟踪';fi; fi; }; f”
启动命令(1)或保存文件(2)后,可以如下所示进行测试:
pnwntuvh7#
使用
git log
会给予相关信息。如果文件在git中被跟踪,命令会显示一些结果(日志)。否则它是空的。例如,如果文件被git跟踪,
如果文件没有被git跟踪,
esyap4oy8#
就我的两点意见:
git ls-files | grep -x relative/path
其中
relative/path
可以通过在自动完成shell中按tab
轻松确定。添加额外的| wc -l
可获得1或0输出。vbopmzt19#
我更喜欢
git log -1 --oneline
而不是git ls-files
,因为git log命令不会遍历目录,所以不管检查的路径是文件还是目录,输出都是相似的。以下是
git ls-files
的示例输出:git log -1 --oneline
的输出示例: