我在 git 版本控制系统下有一个 iOS/Swift 项目。层次结构如下,
home/user/git_root/docs
home/user/git_root/project
home/user/git_root/project/project.xcodeproj
如您所见,我的git_root
目录包含文件夹中的一些其他文档docs
以及实际的项目目录。
swiftlint
我已经使用自制软件安装在我的 Mac 中,
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
问题:
一些 swift 文件由 echo 打印,但swiftlint
找不到文件并产生以下错误,
在路径中找不到 lintable 文件:''
例如,下面是构建日志的输出,
swiftlinting 文件 project/a.swift
在路径中找不到 lintable 文件:'project/a.swift
但是当我cd home/user/git_root
在脚本的开头申请时,它可以完美运行。但是我不知道 git 的实际根目录,因为其他队友可能会自己重命名它,所以我不能在脚本中使用硬编码路径。
为什么会在脚本的同一目录中git diff
生成无法识别的文件路径?swiftlint
我怎么解决这个问题?
可选信息:
该脚本的目的是仅在新修改的未暂存的 swift 文件中运行 swiftlint。另请注意,我没有使用任何.swiftlint.yaml
文件进行 swiftlint 配置。