Git 相对路径问题 - 在路径中找不到 lintable 文件

Saz*_*han 1 bash xcode git-diff ios swiftlint

我在 git 版本控制系统下有一个 iOS/Swift 项目。层次结构如下,

home/user/git_root/docs
home/user/git_root/project
home/user/git_root/project/project.xcodeproj
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我的git_root目录包含文件夹中的一些其他文档docs以及实际的项目目录。

我已经使用自制软件安装swiftlint在我的Mac上,

brew install swiftlint
Run Code Online (Sandbox Code Playgroud)

swiftlint 当前安装的位置是,

which swiftlint
/usr/local/bin/swiftlint
Run Code Online (Sandbox Code Playgroud)

当我运行下面添加的脚本时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
Run Code Online (Sandbox Code Playgroud)

问题:

一些 swift 文件通过 echo 打印,但swiftlint找不到文件并产生以下错误,

在路径中找不到 lintable 文件:''

例如,下面是构建日志的输出,

swiftlinting 文件项目/a.swift

在路径中找不到 lintable 文件:'project/a.swift

但是当我cd home/user/git_root在脚本的开头应用时,它运行得很好。但我无法知道 git 的实际根目录,因为其他队友可能会自己重命名它,所以我无法在脚本中使用硬编码路径。

为什么会在脚本中的同一目录中git diff生成无法识别的文件路径?swiftlint我怎么解决这个问题?

可选信息:

该脚本的目的是仅在新修改的未暂存 swift 文件中运行 swiftlint。另请注意,我没有使用任何.swiftlint.yaml文件进行 swiftlint 配置。

mar*_*aie 5

似乎 --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
Run Code Online (Sandbox Code Playgroud)