【问题标题】:Git relative path issue - no lintable files found at pathsGit 相对路径问题 - 在路径中找不到 lintable 文件
【发布时间】:2019-10-03 07:32:05
【问题描述】:

我在 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

问题:

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

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

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

swiftlinting 文件 project/a.swift

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

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

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

可选信息:

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

【问题讨论】:

    标签: ios xcode bash git-diff swiftlint


    【解决方案1】:

    似乎 --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
    

    【讨论】:

      猜你喜欢
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 2015-08-14
      • 1970-01-01
      相关资源
      最近更新 更多