Git 相对路径问题 - 在路径中找不到 lintable 文件
Git relative path issue - no lintable files found at paths
我在 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
问题:
一些 swift 文件被 echo 打印出来,但是 swiftlint
找不到文件并产生以下错误,
No lintable files found at paths : ''
例如,下面是构建日志的输出,
swiftlinting file project/a.swift
No lintable files found at paths : 'project/a.swift
但是当我在脚本开头应用 cd home/user/git_root
时,它运行得很好。但是我不知道 git 的实际根目录,因为其他队友可能会自己重命名它,所以我不能在脚本中使用硬编码路径。
为什么 git diff
从脚本中的同一目录生成 swiftlint
无法识别的文件路径?我该如何解决这个问题?
可选信息:
脚本的目的是 运行 swiftlint 仅在新修改的未暂存的 swift 文件中。另请注意,我 没有 使用任何 .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
我在 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
问题:
一些 swift 文件被 echo 打印出来,但是 swiftlint
找不到文件并产生以下错误,
No lintable files found at paths : ''
例如,下面是构建日志的输出,
swiftlinting file project/a.swift
No lintable files found at paths : 'project/a.swift
但是当我在脚本开头应用 cd home/user/git_root
时,它运行得很好。但是我不知道 git 的实际根目录,因为其他队友可能会自己重命名它,所以我不能在脚本中使用硬编码路径。
为什么 git diff
从脚本中的同一目录生成 swiftlint
无法识别的文件路径?我该如何解决这个问题?
可选信息:
脚本的目的是 运行 swiftlint 仅在新修改的未暂存的 swift 文件中。另请注意,我 没有 使用任何 .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