我在git版本控制系统下有一个iOS / Swift项目。层次结构在下面,
home/user/git_root/docs
home/user/git_root/project
home/user/git_root/project/project.xcodeproj
您看到我的git_root
目录在docs
文件夹中包含一些其他文档以及实际的项目目录。
我已经使用自制软件在Mac中安装了swiftlint
,
brew install swiftlint
swiftlint的当前安装位置是
which swiftlint
/usr/local/bin/swiftlint
运行在Build phase -> Run scripts
中添加的以下脚本时,发生了奇怪的事情,
if which swiftlint >/dev/null; then
echo "swiftlint already installed in machine";
git diff --cached --name-only | grep "\.swift" | while read filename; do
echo "swiftlinting file $filename";
swiftlint lint --path "$filename";
done
fi
某些快速文件通过回显打印,但是swiftlint
找不到文件并产生以下错误,
在路径''''找不到lintable文件
例如,以下是构建日志的输出,
交换文件项目/a.swift
在以下路径中找不到可压缩文件:'project / a.swift
但是当我在脚本的开头应用cd home/user/git_root
时,它可以完美地工作。但是我不知道git的实际根目录,因为其他队友可能会自己重命名它,因此,我无法在脚本中使用硬编码路径。
为什么git diff
从脚本的同一目录中产生swiftlint
无法识别的文件路径?我该如何解决这个问题?
该脚本的目的是仅在新修改的未暂存swift文件中运行swiftlint。还要注意,我不不使用任何.swiftlint.yaml
文件进行swiftlint配置。
答案 0 :(得分:2)
似乎--path参数仅采用绝对路径。我不知道如何使它采用相对路径,但是您可以稍微更改脚本以将路径的其余部分附加到文件名中,如下所示:
git diff --cached --name-only | grep "\.swift" | while read filename; do
echo "swiftlinting file $filename";
swiftlint lint --path "$(git rev-parse --show-toplevel)/${filename}";
done