有没有一种方法可以通过运行一些git命令并检查其退出码来判断一个文件是否正在被跟踪?
换句话说:git在跟踪文件吗?
有没有一种方法可以通过运行一些git命令并检查其退出码来判断一个文件是否正在被跟踪?
换句话说:git在跟踪文件吗?
当前回答
尝试在文件上运行git status。如果git没有跟踪它,它将打印一个错误
PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
其他回答
EDIT
如果你需要从bash使用git,有——瓷器选项git状态:
——瓷 以稳定、易于解析的格式给出输出 脚本。目前这是相同的 -短输出,但保证 不改变的未来,造就的未来 脚本安全。
输出如下所示:
> 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")
try:
git ls-files --error-unmatch <file name>
如果不跟踪文件,将退出1
我更喜欢git log -1——oneline而不是git ls-files,因为git log命令不遍历目录,所以无论检查的路径是文件还是目录,输出都是类似的。
以下是git ls-files的输出示例:
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
如果您不想让错误消息弄乱控制台,也可以运行
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
}
我不知道有哪个git命令给出了一个“糟糕的”退出码,但似乎有一种简单的方法可以做到这一点,那就是使用一个git命令,它不会为没有跟踪的文件提供输出,比如git-log或git-ls-files。这样就不需要进行任何解析,可以通过另一个简单的实用程序(如grep)来运行它,以查看是否有任何输出。
例如,
Git-ls-files test_file.c | grep。
如果文件被跟踪,将以0代码退出,但如果文件未被跟踪,则退出代码为1。