1 说明

做完 Github Actions -> Release 后,通过以下项目添加到社区插件市场。

2 操作

2.1 fork 项目

https://github.com/obsidianmd/obsidian-releases

2.2 修改

community-plugins.json

2.3 pull request

  • 在 Fork 的项目中提交 Pull Request:
    • 打开 Fork 的项目后,在 Pull Request 选项卡,点击 "Create Pull Request" 以提交请求。
    • 上传皮肤和插件时,请选择相应的模板并在预览中填写必要的内容。
    • 新增插件和更新插件时需使用不同的标题和描述。
  • 错误提示(关注红色反馈):
    • 若提交的格式或编译问题未通过审核,将收到提示信息:“validation failed”。
    • 若代码未通过审核,将显示提示信息:“changes requested”。
  • 常见问题和解决方法:
    • 注意细节,例如插件名称必须与 manifest.json 完全一致,包括大小写和空格。
    • 若不确定如何书写,可参考已通过审核的其他项目。
    • 禁止使用 console.log 和 innerHTML,并要求将样式放在 CSS 文件中。这是硬性要求,代码会经过自动化检查,未遵循者将无法通过审核。
  • 如果同时开发两个插件,向社区提交 Pull Request,建议使用不同分支分别提交
1
2
3
4
5
6
$ git checkout -b 新分支名 # 新建分支
$ git branch # 查看当前是否在新分支上
# 修改代码
$ git add xxx
$ git commit -m 'xxxx'
$ git push origin 新分支名

3 问题与解决

3.1 与主分支冲突

  • 问题
    • 当我提交 obsidian plugin 后,提示:This branch has conflicts that must be resolved Only those with write access to this repository can merge pull requests. Conflicting files community-plugins.json 因为在我提交后有一些代码合入了主分支。
  • 解决
    • 从效果上看,以下两种方法完全一样;需要注意的是不要修改 community-plugins.json 之前的内容,哪怕是一个空格也不要修改,否则可能提示:The newly added entry is not at the end。
    • 方法一
      • 在 Web 界面上,点开 Resolve conflicts 按钮,此时显示的冲突代码是可以编辑的
      • 修改代码冲突,点击 Mark as resolved 按钮,再点 Commit merge
      • 返回到 Pull Request 页面,确保冲突已经解决,此时应该看到合并按钮(这个我没看到)
    • 方法二
      • 在命令行 merge
1
2
3
4
5
6
7
8
9
10
11
12
git clone git@github.com:xieyan0811/obsidian-releases.git
cd obsidian-releases
git remote add upstream https://github.com/obsidianmd/obsidian-releases.git # 此后也可以从upstream拉新代码
git fetch upstream # 从原项目获取最新的提交和更新,但并不修改本地的区作区或分支
git log upstream/master # 看新拉下来的修改
git checkout master
git merge upstream/master
# 此时除了双方都修改的内容,还能看到上游仓库修改而fork后没改的内容在暂存中(未提交的变更)
vi community-plugins.json # 修改
git add community-plugins.json
git commit -m "Merge upstream main and resolve conflicts"
git push origin master
  • 方法三
    • 用命令行 rebase
1
2
3
4
5
6
7
8
9
10
11
12
# 前面步骤同上
git fetch upstream
git checkout master # 也可以切到其它支分
git rebase upstream/master # 则将本地的修改,基于 `upstream/master` 进行重新应用
# 此时除了双方都修改的内容,还能看到上游仓库修改而fork后没改的内容在暂存中(未提交的变更)
vi xxx # 修改冲突
git add xxx
git rebase --continue # 继续执行 rebase
# 此时可能还有新冲突,再改,再add,再rebase --continue,直到不报错为止
# 如果想中止变基过程,git rebase --abort
git commit -m "Merge upstream main and resolve conflicts"
git push origin master --force # 注意这里要用 --force参数
  • 方法四
    • 忽略本地所有修改,变基到上游分支后,重新修改,并且变基(变基用于去除本地所有提交)
1
2
3
4
5
6
7
8
9
# 前面步骤同上
git fetch upstream
git checkout tools
git reset --hard upstream/master # 丢弃本地的修改
git rebase upstream/master # 变基
vi xxx # 修改代码
git add xxx
git commit -m 'xxx'
git push origin tools --force-with-lease # 重写历史,强制推送

3.2 Sync fork

  • 问题
    • 在 GitHub 上,我 fork 了一个代码仓库,后来主项目有了更新,我想把这些更新拉下来并与我的项目合并。这时候我是不是应该使用 sync fork 功能?那么出现 discard 和 update 选项时,它们有什么区别,我应该选择哪个?
  • 解决方案
    • Update(更新):此选项会将主项目的新提交合并到你的 fork 仓库中。
    • Discard(放弃):选择这个选项会忽略主项目的更新,不对你的 fork 仓库实施任何更改。

3.3 审核时间

obsidian plugin 人工审核很慢,我的两个工具排队都排了二周以上;审核的也确实很细。