ios - Git相对路径问题-在路径中找不到可定位文件

标签 ios xcode bash git-diff swiftlint

我在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无法找到文件并产生以下错误,

在路径中找不到可定位文件:”

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

swiftlinting文件项目/a.swift
在路径:'project / a.swift上找不到可定位文件

但是,当我在脚本的开头应用cd home/user/git_root时,它可以正常工作。但是我不知道git的实际根目录,因为其他队友可能会自己重命名它,因此,我无法在脚本中使用硬编码路径。
为什么git diff从脚本中的同一目录生成swiftlint无法识别的文件路径?我怎么解决这个问题?
可选信息:
该脚本的目的是仅在新修改的未暂存的swift文件中运行swiftlint。另请注意,我将.swiftlint.yaml文件用于swiftlint配置而不是。

最佳答案

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

关于ios - Git相对路径问题-在路径中找不到可定位文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56161474/

相关文章:

ios - 将图像或视频添加到 iPhone 模拟器

ios - Realm 缓慢插入数据(主键 UUID().uuidString)

bash - 如何将命令的输出放入 bash 变量中?

linux - Incrond 监控 NFS 挂载?

java - 如何在Java中以sudo权限执行bash命令?

ios - 有没有办法在不运行应用程序的情况下查看 Storyboard场景?

ios - 为什么即使在 Storyboard中嵌入导航 Controller 并使用 push segue 后,我的导航 Controller 仍为零?

ios - 替换 UAPush 方法 appReceivedRemoteNotification?

iphone - 从搜索结果 UITableView 添加 segue

javascript - UIWebView 未找到 .css 和 .js 文件