跳转到内容
首页
Docs/项目

项目与 IDE 工作区

项目是 PocketCode 的第二个页面。它列出你的所有项目,并提供四种添加新项目的方式:新建(15 个模板)、导入(一个 ZIP)、打开文件夹(复制设备上的一个文件夹)和克隆(来自 GitHub、GitLab 或 Bitbucket 的仓库)。每张卡片还提供重命名、导出、发布、删除以及该项目的 Git。再向右两页是 IDE 页面,它保留你打开的标签页,并以只读方式预览当前文件。免费版可拥有一个自己的项目。

它是什么,如何打开

PocketCode 由五个可以左右滑动的页面组成:首页、项目、文件、IDE(页眉写的是编辑器)和 AI 聊天。底部栏的页面圆点(横屏时是侧边栏)显示你所在的位置。本页介绍“项目”和 IDE;“文件”另有专页。

从列表到编辑器

  1. 1在项目中,点按某张项目卡片。它成为当前打开的项目,应用随即带你前往文件。
  2. 2在“文件”中,点按一个文件。应用带你前往 IDE 页面,并把该文件作为标签页打开。
  3. 3在 IDE 页面中,点按预览(或在编辑器中打开),即可在全屏代码编辑器中编辑该文件。
PocketCode 启动时会重新打开你上次使用的项目,且不会切换页面,因此“文件”和 IDE 页面已经显示它。如果该项目已被删除或重命名,应用会忘掉它。

你的项目存放在哪里

  • 每个项目都是 PocketCode 私有存储中的一个文件夹(files/projects/<name>)。文件夹名就是项目的名称,也是它的 id。
  • 这一切都不需要存储权限:导入、打开文件夹和导出使用的是 Android 自带的文件选择器。
  • 其他应用和文件管理器看不到这些文件夹,PocketCode 已关闭 Android 的备份,卸载应用时这些文件夹会被一并删除。请用导出在应用之外保留一份副本。
  • 项目不会同步到云端。Cloud Sync 涵盖设置和工作数据;除非你自己推送或导出,项目代码不会离开设备。

界面地图

这两个页面的每个界面和面板,以及进入方式:

界面如何进入你可以做什么
项目(列表)应用的第二个页面查看所有项目,下拉刷新,点按卡片打开它,点按其箭头查看它的操作。
新建项目新建入口为项目命名,并从 15 个模板中选择一个。
导入 ZIP导入入口选择一个 .zip 文件,并把它解压为新项目。
打开设备上的文件夹打开文件夹入口把设备上的一个文件夹复制成新项目。
克隆克隆入口选择 GitHub、GitLab 或 Bitbucket,然后克隆你的某个仓库。
无限项目在免费版中添加第二个项目打开套餐页面,或用暂不关闭它。
展开的卡片卡片上的箭头时间、大小、分支和语言条;Pull、Push、Fetch、Commit;以及 Git、重命名、导出、发布和删除按钮。
Git 设置Git 按钮开始跟踪、关联或创建远程仓库、上传和下载、分支、历史、标签,以及提交中显示的名字。
提交更改Commit 按钮暂存和取消暂存文件、放弃更改、写提交信息、修订、提交、提交并推送。
提交历史Git 设置 → 历史最近 100 次提交;revert、soft 或 hard reset、cherry-pick。
标签Git 设置 → 标签列出、创建、删除和推送标签。
发布到远程发布按钮在 GitHub、GitLab 或 Bitbucket 上创建仓库,并把它关联为远程仓库。
重命名、删除、导出展开卡片上的按钮重命名(带重名检查)、永久删除、把 ZIP 导出到你选择的位置。
IDE 页面第四个页面,或在“文件”中点按一个文件标签页栏、当前文件的只读预览和在编辑器中打开。
打开的标签标签页数量上限提示中的查看标签筛选并在已打开的标签页之间跳转、关闭已保存的标签页、打开另一个文件。
示例项目首次运行时添加WebPortfolio 和 TaskCLI,两个可以用来练手的项目。

项目列表

页面以单列显示,每个项目一张卡片,平板上两侧的边距更宽。列表没有排序,也没有搜索:卡片按设备文件系统返回的顺序排列。

PocketCode Projects page on a tablet with the New, Import, Open Folder and Clone tiles and two project cards, WebPortfolio and TaskCLI
平板上的“项目”页面:四个入口和两张项目卡片,每张卡片显示文件数、语言,以及框架或距上次更改的时间。

项目卡片

卡片显示主要语言的图标(或一个文件夹图标)、名称、有内容可报告时显示的 Git 标记、文件数、主要语言,以及再多一项信息:检测到框架时显示框架,否则显示分支,再否则显示距上次更改的时间(19d、5h、12m,超过 30 天则显示 dd/MM 日期;不到一分钟时显示 Ahora,任何语言下都是如此)。

你可以

  • 点按卡片即可打开项目。应用会带你前往文件。
  • 点按箭头展开卡片,进入它的操作(见下一节)。
  • 在列表上下拉刷新:文件数、分析结果和 Git 标记都会重新计算。
  • 查看正在进行的克隆:顶部会出现一张带进度条和正在从 GitHub 下载…的卡片(GitLab 和 Bitbucket 显示同样的文字)。
  • 没有项目时,页面显示开始编程吧!,以及创建项目和导入项目。加载失败时会显示糟糕,出了点问题和重试。

你不能,以及原因

  • 搜索、排序或筛选列表。应用代码里有搜索框和“全部 / 最近 / 已同步”筛选,但没有接到界面上。尚未提供
  • 复制(duplicate)项目。请先导出 ZIP,再导入。有意为之
  • 找回已删除的项目。没有回收站,也没有恢复界面。有意为之

Git 标记

名称旁边的标记告诉你 Git 项目与其远程仓库相比处于什么状态。只有四种:

标记含义
更改项目有远程仓库,且有未提交的更改。它显示在其他标记之前。
Push你有远程仓库没有的提交,或者这个分支从未推送过。
Pull远程仓库有你没有的提交。
冲突两边都有新提交:你的分支和远程分支已经分叉。这并不表示已经有文件处于冲突状态。
(无标记)与远程仓库保持一致、只在本机上,或不是 Git 仓库。
标记会在列表加载时、下拉刷新时、卡片上的 Git 操作之后,以及你在编辑器中保存文件时重新计算。Commit 上的 ● 表示项目有未提交的更改,无论有没有远程仓库。

自动分析

PocketCode 会扫描每个项目来填充卡片:

  • 文件:统计时不计以点开头的名称(.git、.gradle 等)。
  • 语言:按文件数量取主要语言,共 20 种:Kotlin、Java、JavaScript、TypeScript、Python、Go、Swift、C、C++、C#、Ruby、Rust、Dart、PHP、R、Scala、Shell、HTML、CSS 和 SQL。展开的卡片会显示一条语言条,列出前五种及其占比。
  • 框架:根据找到的配置文件判断:Android/Gradle、Next.js、Angular、Vue、Node.js、Flutter、Go Module、Python、Maven 和 Docker(仅限 docker-compose.yml)。
  • 大小:整个项目的大小,显示在展开的卡片中。
  • Rust(Cargo)、Ruby(Gemfile)、C 和 C++(CMake、Make)项目以及 Dockerfile 项目不显示框架:目前的检测从不匹配它们。尚未提供

卡片上的操作

点按卡片上的箭头即可展开。你会看到距上次更改的时间、大小、分支,以及(如果项目有可识别的语言)一条列出前五种语言及其百分比的语言条。如果项目有远程仓库,会出现三个按钮:Pull、Push 和 Fetch。如果它是 Git 仓库,会出现一个 Commit 按钮(有未提交的更改时带 ●)。最后一行有五个按钮:Git、重命名、导出、发布和删除。它们都不受套餐限制。

重命名

重命名会打开重命名项目,并带着当前名称。重命名的是文件夹,因此项目的 id 也随之改变。

你可以

  • 输入新名称。当输入框为空、没有变化或已被其他项目使用时,重命名保持禁用;在最后一种情况下,输入框会提示“已存在同名项目”。
  • 重命名示例项目:它仍然是示例项目,仍然不计入免费版的上限。

你不能,以及原因

  • 在名称中使用 / \ : * ? " < > |:应用会回复“El nombre contiene caracteres no válidos”,无论界面语言是什么,都是西班牙语。有意为之

删除

删除会打开删除项目:“确定要删除 "<name>" 吗?此操作无法撤销。”,带有删除和取消。

你可以

  • 从设备上删除项目文件夹。它只作用于本地:不会碰远程仓库或任何在线内容。
  • 删除示例项目。它不会再回来。

你不能,以及原因

  • 撤销删除。没有回收站,也没有恢复界面。有意为之

导出

导出是把项目带出应用的方式。

  1. 1点按导出。一条消息提示“正在导出 '<name>'…”。
  2. 2Android 的保存对话框打开,并建议使用 <name>.zip。选择保存位置:选择器列出的任何位置都可以,包括云盘。
  3. 3复制结束后你会看到“项目已保存”。取消对话框不会有任何提示,并会丢弃临时文件。

你可以

  • 得到一个包含项目所有文件的 ZIP,其中包括 .git 和 .pocketcode 文件夹。空文件夹不会被加入。
  • 把它用作备份或迁移项目:导入可以把它读回来。

你不能,以及原因

  • 排除某些文件(node_modules、.git 等),或只导出项目的一部分。有意为之
  • 使用分享面板,或跳过保存对话框。应用有意让你选择保存位置,这样备份最终放在你决定的地方。有意为之

发布

发布会打开发布到远程,用于把项目放到 GitHub、GitLab 或 Bitbucket 上。

  1. 1在选择一个服务下,点按你已连接的服务之一。只列出有仓库的服务。
  2. 2输入仓库名称(默认是项目名称),并选择公开或私有。面板默认选中公开。
  3. 3点按创建并关联。

你可以

  • 通过服务的 API 创建一个空仓库,并把它关联为 origin。如果项目原本不是 Git 仓库,会先运行 git init。
  • 完成后,你会看到“'<name>' 已关联到 <service>”,并附带仓库地址。

你不能,以及原因

  • 通过“发布”把你的文件放到线上:它不会 commit,也不会 push。文件要等你提交(Commit)并上传改动(或使用 Commit & Push)后才会到达远程仓库。有意为之
  • 在没有已连接账户时发布。没有账户时,面板会提示“请先在“服务”中连接 GitHub、GitLab 或 Bitbucket”,你需要在“平台服务”中连接;无法在这个面板里完成。需要网络
  • 发布到 GitHub Enterprise、自托管的 GitLab 或任何其他主机:只支持 github.com、gitlab.com 和 bitbucket.org。有意为之

Git 设置

Git 按钮会打开 Git 设置。顶部的状态卡片告诉你项目处于什么状态,可用的操作也随之变化:

状态卡片你可以做什么
尚未纳入版本控制项目还不是 Git 仓库。开始跟踪此项目会运行 git init,并确保 .gitignore 排除 .pocketcode/。关联我已有的仓库会运行 git init,并把 origin 设为你输入的 URL。
仅保存在本机没有远程仓库的仓库。输入仓库名称,选择私有(此处的默认值)或公开,然后点按在 GitHub 上创建并连接(它使用你第一个已连接的 Git 服务,服务名显示在按钮上)。没有账户时会提示“请先在设置中连接 GitHub 账户”。关联我已有的仓库会为一个已存在的仓库添加 origin。
已连接已有 origin。上传改动执行 push,下载改动执行 pull,检查远端执行 fetch。

你可以

  • 有远程仓库时,打开分支查看你的本地分支。点按某个分支(切换到此分支)即可切换,或点按创建新分支:会出现新分支对话框,其中有一个切换到新分支的复选框。
  • 历史显示提交数量(最多统计到 1,000 个),并打开历史记录。标签打开标签列表。
  • 提交中显示的名字保存 Git 写在你提交上的姓名和邮箱。它会从仓库、已连接的服务或你的 PocketCode 账户预先填好;保存更改会把它存入仓库。

你不能,以及原因

  • 在有远程仓库之前看到分支、历史或标签:只有仓库有远程仓库时才会出现这几行。有意为之
  • 列出、切换或创建远程分支:只显示本地分支。尚未提供
  • 删除或重命名分支:代码存在,但没有任何界面提供该功能。尚未提供
  • 使用 SSH 远程仓库(git@…、ssh://…)或 github.com、gitlab.com、bitbucket.org 之外的主机:上传、下载和检查会在尝试之前就拒绝。有意为之
merge、stash、blame、分支对比、rebase、拉取请求(pull request)和 issue 在代码编辑器的“源代码管理”中:见 Git & GitHub。

Commit

Commit 会打开提交更改,标题下方显示当前分支。

你可以

  • 在两个列表中查看已更改的文件:已暂存 (n) 和未暂存 & 未跟踪 (n)。勾选文件的复选框即可移动它;全部暂存和全部取消暂存会移动所有文件。
  • 点按尚未暂存的已更改文件上的放弃更改图标,丢弃它的更改。未跟踪的文件没有这个图标。
  • 写一条提交信息,然后点按 Commit;如果项目有远程仓库,也可以点按 Commit & Push。
  • 勾选修订上一次提交,用已暂存的更改和新的提交信息改写上一次提交。按钮变为修订提交。

你不能,以及原因

  • 没有提交信息、或没有至少一个已暂存文件就提交(修订只需要提交信息)。没有已暂存文件时,列表会显示“没有已暂存的文件。使用 '全部暂存' 来添加更改。”有意为之
  • 让应用替你暂存文件:Commit 只会提交已暂存下的内容。有意为之
放弃更改在你点按图标的瞬间就会执行,不会询问。

提交历史

Git 设置 → 历史会打开提交历史:最多 100 次提交,每次显示提交信息的第一行(截断到 60 个字符)、7 位哈希、作者和日期。

你可以

  • 点按一次提交,会显示四个按钮:Revert(创建一个撤销它的提交)、Reset Soft(把分支移到该提交,并保留你的文件和已暂存的更改)、Reset Hard(把分支移到该提交,并改写你的文件使之一致;以红色显示)和 Cherry-pick(把该提交应用到当前分支之上)。

你不能,以及原因

  • 执行“mixed” reset,或从某次提交中恢复单个文件:没有提供。恢复功能的代码存在,但没有任何按钮使用它。尚未提供
Reset Hard 在你点按的瞬间就会执行,没有确认,并会丢弃未提交的工作。

标签

Git 设置 → 标签会列出仓库的标签(或显示“未找到标签”)。

你可以

  • 创建标签(+ 图标):必须输入名称,例如 v1.0.0;信息可选,填写后会创建附注标签(annotated tag)。标签指向当前提交。
  • 用每个标签上的图标删除标签。
  • 推送标签(顶部的上传图标)会把标签发送到远程仓库。只有仓库有远程仓库时才会出现。

你不能,以及原因

—

添加项目

页面顶部的四个入口用于添加项目。没有单独的 + 按钮:新建入口带有加号图标。在免费版中,新建、导入和打开文件夹在你点按的那一刻就会检查项目上限,而克隆在你点按 GitHub、GitLab 或 Bitbucket 仓库上的克隆时进行检查(见“免费版的上限”)。

PocketCode New project sheet in landscape over the Projects page, with a name field, the category chips All, General, Frontend, Backend and Fullstack, and template cards for Empty, HTML / CSS / JS, React and Vue.js
横屏下的“新建项目”面板:名称输入框、分类筛选按钮和分在两栏的模板卡片。

新建:从模板开始

新建会打开新建项目面板(“选择名称和入门模板”)。

  1. 1输入名称(占位文字是 My App)。
  2. 2可选:用筛选按钮全部、通用、前端、后端、全栈或语言缩小列表范围。
  3. 3点按一张模板卡片。默认已选中空白。
  4. 4点按创建。执行期间按钮显示正在创建…;取消会关闭面板。
模板分类它创建的文件
空白通用无:一个空文件夹。
HTML / CSS / JS前端index.html、style.css、script.js
React前端index.html、App.jsx(React 18 和 Babel 来自 CDN)
Vue.js前端index.html、app.js、style.css(Vue 3 来自 CDN)
TypeScript前端index.ts、tsconfig.json、package.json
Python后端main.py、requirements.txt
Node.js后端server.js(Express)、package.json
FastAPI后端main.py、requirements.txt、README.md
Django后端manage.py、requirements.txt、README.md。manage.py 指向 config.settings,而模板并不包含它:运行之前请先添加这个包。
React + Node.js全栈frontend/index.html、frontend/App.jsx、backend/server.js、backend/package.json、README.md
React + FastAPI全栈frontend/index.html、frontend/App.jsx、backend/main.py、backend/requirements.txt、README.md
Next.js全栈app/page.jsx、app/layout.jsx、app/api/hello/route.js、package.json
Kotlin语言Main.kt
Go语言main.go、go.mod
Rust语言src/main.rs、Cargo.toml

你可以

  • 从 15 个模板中任选一个开始:免费版全部可用。
  • 输入任意名称:/ \ : * ? " < > | 会变成 -,控制字符以及两端的点、空格或短横线会被去掉,结果为空时会变成 Project。如果文件夹已存在,名称会加上 (2)、 (3)……
  • 横屏时,面板会分成两栏,名称和按钮在左边,筛选按钮和模板在右边。

你不能,以及原因

  • 创建你自己的模板或 Android 项目脚手架:只提供 15 个内置模板。有意为之
  • 离线使用 React、Vue、React + Node.js 或 React + FastAPI 模板:它们的 index.html 从 unpkg.com 加载 React、Vue 和 Babel。需要网络
无论应用使用什么语言,模板文件里的文字都是西班牙语(“¡Hola Mundo!”、“Mi App”)。

导入:一个 ZIP

导入会打开 Android 的文件选择器。ZIP 解压期间会出现一个覆盖层,显示“正在导入项目…”,然后是“已导入项目 '<name>'”。

你可以

  • 选择一个 ZIP。如果它只有一个顶层文件夹,项目就是该文件夹的内容:外层文件夹会被去掉。
  • 保留 ZIP 里带的 .git 文件夹:PocketCode 会先移除其中可能执行命令的配置项,并清空它的 hooks。
  • 项目以文件名命名:每个不是字母、数字、- 或 _ 的字符都会变成 -,所以 my app.zip 会变成 my-app-zip。之后可用重命名修改。如果名称已存在,会变成 -2、-3……

你不能,以及原因

  • 导入解压后超过 512 MB、包含超过 20,000 个条目,或膨胀到自身大小 200 倍以上的 ZIP:导入会中止,未完成的项目会被移除,并有消息说明原因(防 zip 炸弹保护)。有意为之
  • 导入 .tar.gz、.rar 或 .7z:只读取 ZIP。有意为之
  • 在内存不足的手机上导入非常大的 ZIP:应用会先把整个文件读入内存,再解压。设备

打开文件夹:复制设备上的文件夹

打开文件夹会打开 Android 的文件夹选择器。应用会把你选择的文件夹里的所有内容复制到一个以该文件夹命名的新项目中,然后提示“已打开项目 '<name>'”。原文件夹不会被关联:从此两者互相独立。

你可以

  • 带入内部存储、SD 卡或 Android 选择器列出的任何提供方上的文件夹。
  • 保留其中的 .git 文件夹,处理方式与 ZIP 中的相同。

你不能,以及原因

  • 原地编辑原文件夹,或让两份副本保持同步:这只是一次性复制,因为 Android 的文件夹选择结果不是文件路径,而 Git 和文件工具需要真实路径。请用导出把结果带出来。设备
如果已经存在与该文件夹同名的项目,它会被直接删除并替换,不会询问。复制过程也没有大小检查:带有 node_modules 的文件夹会被完整复制。

克隆:从你的 GitHub、GitLab 或 Bitbucket 账户

克隆会打开一个有三行的面板:从 GitHub 克隆、从 GitLab 克隆和从 Bitbucket 克隆。账户已连接的行会显示绿色标记,并打开你的仓库列表。账户未连接的行显示未连接 — 点击以连接,并带有连接按钮:它会在该服务处打开平台服务,你要在那里连接,而不是在克隆面板里。GitHub 和 GitLab 通过一个你在浏览器中批准的代码连接(也可以使用个人访问令牌);Bitbucket 则要求输入你的 Atlassian 邮箱和一个 API 令牌。

你可以

  • 一眼看出哪些账户已连接。
  • 在不丢失当前位置的情况下连接账户:点按该行,在“平台服务”中连接,然后回到克隆。

你不能,以及原因

  • 从粘贴的 URL 克隆,或从 github.com、gitlab.com、bitbucket.org 之外的主机(GitHub Enterprise、自托管的 GitLab、Gitea、Azure DevOps 等)克隆:每次克隆都从已连接账户的仓库列表开始。有意为之
  • 在没有已连接账户时克隆,即使是公开仓库也不行。需要网络
  • 通过 SSH 克隆:PocketCode 只使用 HTTPS 地址。有意为之
  • 获取子模块(submodule)或 Git LFS 内容:克隆包含完整历史,但不含子模块,LFS 文件也不会下载。有意为之

从 GitHub 克隆

从 GitHub 克隆会打开全屏的 GitHub 仓库列表,显示你的仓库,按最近更新排序(最多 1,000 个)。

你可以

  • 按名称、描述或语言搜索,并用全部、公开、私有或 Fork 筛选(只有你有 fork 时才出现 Fork)。每张卡片显示可见性、描述、语言、星标数、fork 数和最近更新时间。
  • 点按卡片上的克隆:只需点按一次,无需选择文件夹,克隆会存入应用自己的项目文件夹。随后出现正在克隆仓库对话框,带有取消:取消会删除未完成的克隆。
  • 在免费版中,点按克隆会先检查项目上限,早于克隆开始:没有空位时列表关闭,并弹出无限项目卡片(见“免费版的上限”)。
  • 如果已存在与仓库同名的项目,克隆结果会变成 repo (2)、repo (3)……
  • 还没有仓库?在 GitHub 上创建会在浏览器中打开 github.com/new。

你不能,以及原因

  • 看到真实的进度:百分比是分段跳动的(0、10、50 和 100 %)。尚未提供
  • 在网络无响应时继续克隆:克隆在 60 秒没有响应后放弃。需要网络

从 GitLab 或 Bitbucket 克隆

从 GitLab 克隆和从 Bitbucket 克隆会打开你的仓库列表,带有一个同时匹配标题和描述的搜索框。点按卡片上的克隆即可开始。执行期间,项目列表顶部会出现一张显示进度的卡片。

你可以

  • GitLab 列出你是成员的项目,按最近更新排序(最多 1,000 个)。
  • 在免费版中,点按克隆时会先执行项目上限检查(见“免费版的上限”)。

你不能,以及原因

  • 筛选列表:只有搜索框。Bitbucket 显示一个工作区(你的个人工作区,或你所属的第一个工作区)的仓库,即最近更新的 30 个。有意为之

免费版的上限

免费版可拥有一个自己的项目。Pro 没有项目数量上限。

  • 计入什么:列表中除两个示例项目(WebPortfolio 和 TaskCLI,重命名后也一样)之外的所有项目。删除一个项目,它的名额就空出来了。
  • 谁来检查:新建、导入和打开文件夹在你点按入口的那一刻就会检查,早于任何对话框或选择器的打开。从 GitHub、GitLab 或 Bitbucket 克隆会在你点按仓库上的克隆时检查。AI Office、设计器,以及从 Marketplace 应用项目模板,使用的是同一个上限。
  • 你会看到什么:无限项目卡片,带有按钮解锁无限项目(它会打开套餐页面)和暂不。
  • 不受限制的内容:重命名、导出、删除、发布、卡片上的所有 Git 操作、15 个模板、IDE 页面及其标签页。
这张卡片列出三项权益:“无限项目”、“创建、导入、打开和克隆不设上限”和“示例项目不计入”。它们说的正是这个上限所解锁的内容:15 个模板全部免费,而 Cloud Sync 同步的是设置和工作数据,不是项目。

示例项目

首次运行时,PocketCode 会在列表中添加两个示例项目:

  • WebPortfolio(7 个文件):一个用纯 HTML、CSS 和 JavaScript 写成的单页作品集。index.html、css/styles.css、js/script.js、js/projects.js、data/projects.json、README.md、TASKS.md。
  • TaskCLI(9 个文件):一个用 Node.js 写成、没有任何依赖的终端任务管理器。main.js、src/args.js、src/colors.js、src/commands.js、src/store.js、data/tasks.json、package.json、README.md、TASKS.md。
  • 每个项目都带有一个含练习题的 TASKS.md。无论应用使用什么语言,这些文件都是英文的。
  • 它们不计入免费版的上限。你可以像对待任何项目一样重命名、导出和删除它们;一旦删除,它们不会再回来。

IDE 页面

IDE 页面是应用的第四个页面。它是你已打开文件的工作台:代码编辑器的标签页栏,加上当前文件的只读预览。你在文件中打开文件,并在点按预览后打开的全屏代码编辑器中进行编辑。标签页栏和编辑器共用同一批已打开的文件,所以在这里打开的标签页,在那里也是打开的。

标签页

只要至少打开了一个标签页,页眉(编辑器,带项目名称和“N 个已打开 · M 个未保存”)和标签页栏就会出现。

你可以

  • 点按标签页即可激活它。长按它打开菜单:关闭、关闭其他、关闭右侧、关闭已保存、全部关闭、固定 / 取消固定、保持打开、复制路径、复制相对路径、左移和右移。批量关闭不会关闭已固定的标签页。
  • 长按标签页并向两侧拖动即可重新排序;双击当前的预览标签页可让它保持打开。
  • 在预览上用两根手指左右滑动,即可前往下一个或上一个标签页。
  • 离开再回来:每个项目的标签页都是分别保存的,并会连同顺序、当前标签页、已固定的标签页,以及光标和滚动位置一起恢复。期间被删除的文件会被直接丢弃,不会报错。

你不能,以及原因

  • 在这个页面中以分屏方式打开标签页:这里不提供在分屏中打开。有意为之
  • 恢复你没有保存的文本:保存的会话包含标签页列表和位置,不包含未保存的编辑。有意为之
  • 让应用不介入就保持超过 20 个标签页。当你再打开一个时,它会关闭最久没有使用、没有未保存更改、且未被固定也不是当前的标签页,并提示“已关闭 <file>(上限 20 个标签)”,带有撤销。如果一个都关不掉,新标签页仍会打开,同时你会看到“已打开 <n> 个标签,且都无法在不丢失更改的情况下关闭。请保存或关闭一些标签。”免费版和 Pro 的上限相同。设备

标签页切换器

打开的标签 · N / 20 是一个面板,在标签页栏太拥挤时用来在标签页之间移动。

你可以

  • 在最近和顺序之间切换排序,在筛选标签…中输入,点按某个标签页跳转到它,并用每一行上的按钮关闭它。
  • 点按关闭已保存会关闭所有没有未保存更改的标签页,点按打开文件…则前往“文件”。

你不能,以及原因

  • 从标签页栏打开它:在这个页面中,标签页栏没有 ▾ 按钮。这个面板通过查看标签打开,它是标签页数量上限提示中的操作。有意为之

预览与页眉按钮

预览显示当前文件屏幕上放得下的前几行,行号和语法颜色在编辑器设置中开启时也会显示,并使用编辑器的主题、字体和字号。它显示的是编辑器里持有的文本,包括未保存的编辑。

你可以

  • 点按预览,或预览下方的在编辑器中打开,即可在全屏代码编辑器中打开该文件。
  • 在浏览器中打开(页眉中的地球图标)会为 HTML、CSS、JavaScript 和 TypeScript 文件显示。它会在你项目的本地服务器上打开 Dev Browser,且在这个项目的服务器运行之前一直处于禁用状态。
  • 运行(页眉中的 ▶,标有 EXPERIMENTAL)会为 Kotlin、Java、Python、JavaScript、TypeScript、Go、Rust、C++、Ruby、PHP、Dart、Swift 和 Shell 文件显示。

你不能,以及原因

  • 在这里编辑或滚动文件:预览是静态的,过长的行会被截断,而不是换行。有意为之
  • 在这个页面中运行文件:▶ 只会在全屏编辑器中打开该文件,运行发生在那里。尚未提供

用于网页预览的本地服务器

IDE 页面打开项目时,PocketCode 会为它启动一个小型 Web 服务器:使用 8765 到 8774 中第一个空闲的端口,按原样提供项目文件(默认页面是 index.html)。

你可以

  • 用在浏览器中打开打开网页文件:CSS、脚本和图片可以通过相对链接加载,因为服务器提供整个项目文件夹。
  • 放心它是私有的:它只监听 127.0.0.1(手机本身,而不是你的 Wi-Fi),并对任何没有应用内 Dev Browser 所带的会话凭据的请求回复“401 Unauthorized”。

你不能,以及原因

  • 在你保存时自动重新加载:只有 AI 智能体所做的更改才会重新加载 Dev Browser。你自己编辑之后,请重新加载页面。尚未提供
  • 运行服务器端代码:服务器只提供静态文件。有意为之

空状态

没有打开任何标签页时,页面会显示欢迎使用 PocketCode IDE、项目名称和前往文件浏览器页面的提示;开始编程会带你前往“文件”。没有选中项目时,它会显示未选择项目和前往仪表盘,后者会带你前往“项目”。

你可以

  • 从“文件”中挑选下一个文件:如果项目有标签页,你上次会话的标签页会自动恢复。

你不能,以及原因

—

免费版与 Pro

这两个页面上的所有内容都在免费版中。套餐唯一限制的是你可以拥有多少个自己的项目:

功能免费版Pro
自己的项目1无上限
两个示例项目(WebPortfolio、TaskCLI)不计入不计入
新建、导入、打开文件夹、从 GitHub、GitLab 或 Bitbucket 克隆直到你有 1 个项目套餐不设上限
15 个模板全部全部
重命名、导出、删除、发布已包含已包含
卡片上的 Git:Commit、历史、标签、Pull / Push / Fetch已包含已包含
IDE 页面及其标签页已包含,20 个标签页已包含,20 个标签页
上限针对的是你自己的项目:免费版 1 个,Pro 不设上限。套餐包含的其他一切,请见 套餐与价格

隐私与安全

  • 你的项目留在设备上。它们是 PocketCode 私有存储中的文件夹,这些页面本身不会上传任何东西:文件只有在你 push、先发布再 push,或保存一个导出 ZIP 时才会离开设备。AI 功能在你使用时会读取项目文件;这部分内容见 AI 聊天。
  • Git 令牌保存在 Android 的加密存储中,按 PocketCode 账户区分。PocketCode 只会把令牌发送给 github.com、gitlab.com 和 bitbucket.org;对于任何其他主机,它什么也不发送,操作会失败。
  • Git 在应用内部运行,不调用外部程序。Hooks 和过滤器永远不会执行。当你导入包含 .git 的 ZIP 或打开包含 .git 的文件夹时,PocketCode 会保留该仓库,但会移除可能执行命令的配置项,并清空它的 hooks。
  • 本地预览服务器只在 127.0.0.1 上响应,并且需要会话凭据。
  • 导出会在临时文件中构建 ZIP,并在复制到你选择的位置之后(或你取消时)删除该临时文件。
  • 备份:PocketCode 已关闭 Android 自带的备份。设置里有创建自动备份:开启后,会每 30 分钟在应用的私有存储中写入一份所有项目的 ZIP 副本(每个项目保留最近 5 份)。没有恢复这些副本的界面,卸载应用时它们也会被删除,所以请把导出当作真正的备份。

限制

这些页面目前做不到的事情,免得你措手不及:

  • 免费版可拥有 1 个自己的项目。新建、导入、打开文件夹以及从 GitHub、GitLab 或 Bitbucket 克隆都会停在无限项目卡片上。Pro
  • 项目只存放在应用的私有存储中:其他应用和文件管理器看不到它们,卸载 PocketCode 会把它们删除。设备
  • 打开文件夹是复制文件夹而不是关联它,而 ZIP 导入会把整个文件读入内存。设备
  • 克隆从不询问文件夹:无论来自 GitHub、GitLab 还是 Bitbucket,所有克隆都放进应用的项目文件夹。设备
  • 项目列表没有搜索、排序或筛选,也不能复制(duplicate)项目。尚未提供
  • Rust、Ruby、C 和 C++ 项目以及 Dockerfile 在卡片上不显示框架。尚未提供
  • ZIP 导入在解压后超过 512 MB、20,000 个条目或 200:1 的比例时中止,而且只读取 ZIP。有意为之
  • Git 只支持 HTTPS,并且只支持 github.com、gitlab.com 和 bitbucket.org,还需要已连接的账户。没有 SSH,没有 GitHub Enterprise 或自托管的 GitLab,也不能从粘贴的 URL 克隆。有意为之
  • 没有子模块,没有 Git LFS,也没有 hooks:Git 引擎不运行任何外部程序。有意为之
  • 发布会创建并关联仓库,但不会 push。有意为之
  • 在卡片上,你不能删除或重命名分支、列出远程分支、执行“mixed” reset,也不能从某次提交中恢复文件。尚未提供
  • 克隆百分比是分段跳动的(0、10、50、100 %),而 Bitbucket 只列出一个工作区、最近的 30 个仓库。尚未提供
  • React、Vue、React + Node.js 和 React + FastAPI 模板需要联网:它们从 unpkg.com 加载库。需要网络
  • IDE 页面不能编辑、滚动或运行:它的 ▶ 只会打开编辑器,而且你保存时预览不会自动重新加载。尚未提供
  • 应用自己最多保持 20 个标签页处于打开状态(免费版和 Pro 相同):超过之后,它会关闭最久没有使用的已保存标签页,或者在没有可关闭的标签页时提醒你。设备
  • 有少数消息和文字无论应用使用什么语言,都是用西班牙语写的:Ahora、重命名和 ZIP 上限的错误、一些克隆和 pull 的错误,以及模板文件里的文字。尚未提供

故障排查

下面的消息都是 PocketCode 显示的原文。其中一些在所有语言下都是西班牙语;它们按显示的样子引用。

“已存在同名项目”

在重命名项目中:另一个项目的文件夹已经使用了这个名称。请换一个名称。

“El nombre contiene caracteres no válidos”

新名称含有 / \ : * ? " < > | 之一。把它去掉,再重新重命名。

无限项目

你使用的是免费版,并且已经有一个自己的项目。请删除它,或先导出再删除,以腾出名额,也可以解锁 Pro。示例项目不计入。

“El archivo trae más de 20000 entradas: se corta la extracción.”

这个 ZIP 包含超过 20,000 个条目。什么都不会被导入,未完成的项目会被移除。把不需要的内容去掉,再重新打包。

“El contenido descomprimido pasa de 512 MB: se corta la extracción.”

这个 ZIP 解压后会超过 512 MB。结果相同:什么都不会被导入。请排除 node_modules 这类大文件夹。

“El archivo se expande más de 200:1 (… B → … B): se corta la extracción.”

内容膨胀到 ZIP 大小的 200 倍以上,这正是 zip 炸弹的特征。导入会中止。

“Invalid entry path: …”

ZIP 里的某个条目试图离开项目文件夹(.. 或绝对路径)。PocketCode 会拒绝该文件,并移除未完成的项目。

“所选文件无效”或“无法读取所选文件”

Android 无法打开或读取你选择的文件。请重新选择,或先把它复制到设备存储中。

“所选文件夹无效”或“打开文件夹出错”

打开文件夹没有得到可读取的文件夹。请选择文件夹而不是文件,然后重试。

“未连接 — 点击以连接”

该服务商没有已连接的账户。点按该行(或连接)打开“平台服务”,连接账户,再回到克隆。

“未连接 GitLab 账户”(或 Bitbucket)

列表是在没有账户的情况下打开的:“请在“服务”中连接您的 GitLab 账户以克隆仓库。”请在“平台服务”中连接,然后重新打开列表。

“无法加载仓库”或“出了点问题”

仓库列表无法加载,通常是因为没有网络。点按重试。

“克隆失败:…”

原因以西班牙语给出。“Error de autenticación. Verifica tu token de GitHub.” 表示令牌被拒绝:请重新连接账户。“Repositorio no encontrado. Verifica la URL.”、“Error de red. Verifica tu conexión a internet.” 和 “Error de permisos. Verifica que tienes acceso al repositorio.” 说的就是字面意思;“Error al clonar: …” 涵盖其他所有情况。未完成的克隆会被删除。

“此项目尚未配置远程仓库,请先在 Git 设置中关联。”

Pull、Push 和 Fetch 需要一个 origin。打开 Git,使用关联我已有的仓库或在 GitHub 上创建并连接,也可以使用发布。

“此远程仓库使用 SSH,暫不支持。请改用仓库的 HTTPS 地址。”

项目的 origin 是 SSH 地址(git@… 或 ssh://…)。PocketCode 只使用 HTTPS,所以会在尝试之前就拒绝。请用使用 HTTPS 的克隆重新克隆该仓库。

“尚未连接 <host> 的账户。请在设置中连接后再上传或下载。”

该主机没有已连接的账户,或者该主机不是 github.com、gitlab.com 或 bitbucket.org:PocketCode 只会把令牌发送给这三个主机。请在“平台服务”中连接账户(设置 → 集成 → 已连接的服务)。

“<host> 拒绝了凭据。请在设置中重新连接账户。”

令牌已经失效。请在“平台服务”中断开账户并重新连接。

“无法连接 <host>。请检查网络后重试。”

没有网络,或者主机没有及时响应。请检查网络连接后重试。

“远端拒绝了本次上传。请先下载远端改动,然后重新上传。”

远程仓库有你没有的提交。请使用下载改动(或 Pull),然后再次上传。“你的分支和远程分支都有改动。”表示同样的意思。

“该项目与远程仓库没有共同的提交历史。”

“通常是因为关联远程仓库前文件夹里已有提交。请克隆到空文件夹,或关联其他远程仓库。”

“两边修改了相同的行。”

“打开受影响的文件,保留你想要的版本,然后重试。”处理冲突标记要在代码编辑器中进行。

“没有已暂存的文件。使用 '全部暂存' 来添加更改。”

在提交更改中,Commit 需要在已暂存下至少有一个文件,并且需要一条提交信息。请勾选文件,或点按全部暂存。

“项目已创建,但模板文件写入失败:…”

文件夹已经存在,但模板没有写进去,通常是因为空间不足。请释放一些空间,删除该项目,再重新创建。

“请先在“服务”中连接 GitHub、GitLab 或 Bitbucket”

发布到远程面板没有找到已连接的服务。请在“平台服务”中连接一个,然后重新打开发布。

“Ya tienes un repositorio llamado «<name>». Elige otro nombre.”

你的 GitHub 账户下已经有同名仓库。请在发布到远程中修改仓库名称,然后再次点按创建并关联。

“已打开 <n> 个标签,且都无法在不丢失更改的情况下关闭。请保存或关闭一些标签。”

你达到了 20 个标签页的上限,而其他所有标签页要么有未保存的更改,要么已被固定。点按查看标签,然后保存或关闭一些标签页。

“未选择项目”

IDE 页面是在没有打开项目的情况下打开的。点按前往仪表盘,然后点按一张项目卡片。

“无法导出项目”

ZIP 无法构建,或无法写入你选择的位置。请换一个位置再试。