结论|适合: GitHub 官方说明,GitHub Desktop 可用于 Windows 和 macOS。按“Windows 提交并推送 → 远程 Mac 拉取并用 Xcode 打开 → Mac 提交并推送 → Windows 拉取”的顺序交接;它管理项目版本,不会把两台电脑变成自动同步文件夹。(GitHub Desktop 支持平台说明)
这篇适合谁:只有 Windows,正在学 SwiftUI、需要在 Mac 上运行 Xcode 的学生。
已经有课程仓库,想在不同电脑上接着写,并保留每次改动记录的人也适用。
如果学校仓库不允许写入,先找课程助教确认提交方式,再开始操作。
00先确认 GitHub Desktop Windows 远程 Mac 作业接续的仓库条件
GitHub 仓库像一本共享的作业本:每次提交是一次有记录的修改,推送才是把本地记录交到线上。远程 Mac 和 Windows 要接续同一份项目,必须能访问同一个仓库,并使用课程指定的分支。
开始前先核对访问权限。对个人仓库来说,协作者需要写入权限才能推送;学校或组织仓库的具体权限由管理员设置。没有写入权限时,可能可以查看或克隆项目,却无法把自己的修改推上去。(个人仓库权限说明)
还要区分几个容易混淆的动作:
- 提交(Commit):在当前电脑的本地仓库保存一条改动记录,不等于已经上传。
- 推送(Push):把已提交的记录发送到远程仓库,另一台电脑才能取得。
- 拉取(Pull):把远程仓库已有的提交取到当前电脑,并更新本地分支。
- 获取(Fetch):先检查远程有没有新提交;它本身不一定会把这些改动合并到当前文件中。
提交后还要推送,别把“已经 Commit”当成“远程 Mac 已经收到”。(GitHub Desktop 推送改动说明)
01在 Windows 检查改动,再提交并推送
先在 Windows 打开 GitHub Desktop,登录有权访问课程仓库的账号。已有本地项目时,用“Add an Existing Repository”添加;还没有本地副本时,按仓库地址克隆,并选一个容易找到的保存位置。GitHub Desktop 可以通过图形界面管理仓库;开始操作前,确认选中的是课程要求的仓库,而不是同名的其他副本。
接着按下面顺序完成一次交接:
- 在 GitHub Desktop 中选中课程仓库,确认显示的是课程要求的分支;不要因为分支名看起来陌生,就自行切到另一个分支。
- 用已有编辑器修改课程文件,保存后回到 GitHub Desktop 的变更列表。
- 逐个查看新增、修改和删除的文件。点选文件时检查差异内容,确认没有误删源码、遗漏资源,或把不该公开的内容加进来。
- 在提交说明中写清本次作业改了什么,例如“完成课程首页布局”;说明要能帮助未来的自己辨认这条记录。
- 点击提交按钮后,再点击“Push origin”推送。确认界面显示本地提交已发送,必要时可打开线上仓库核对变更记录。
提交与推送的作用不同:本地提交只是先写进当前电脑的版本历史;推送后,远程仓库才有这条记录。若课程仓库采用拉取请求、保护分支或教师审核流程,应遵循课程要求,不要直接尝试绕过限制。
02在远程 Mac 拉取项目,并交给 Xcode 检查
在远程 Mac 上打开 GitHub Desktop,登录有权限访问该仓库的账号。如果这台 Mac 还没有项目副本,就克隆课程仓库;如果已有本地副本,先选对仓库和分支,再点击“Fetch origin”检查线上是否有新提交,随后用“Pull origin”取得改动。GitHub Desktop 的同步流程会区分获取、拉取和推送:拉取更新的是当前电脑的本地副本,推送才会更新远程分支。(GitHub Desktop 分支同步说明)
项目下载后,不要只双击文件夹里第一个看起来像工程的文件。先看课程说明,再从仓库中打开正确的 .xcodeproj 或 .xcworkspace;项目若包含工作区和项目文件,应该以课程或项目文档指定的入口为准。
Xcode 支持用 Git 管理项目,也能处理源代码仓库中的项目改动;Git 记录的是项目文件及其改动历史,Xcode 则负责打开、编辑和构建工程。(Apple 的 Xcode 源代码管理说明)
这一段交接的验收点是:远程 Mac 上的 Xcode 能打开课程工程,并能定位到本次作业涉及的 Swift 源文件和所需资源。如果课程要求构建,再按课程的目标和设置执行构建;单纯看到项目文件夹,并不能证明工程已经完整交接。
03Mac 改完后先推送,再回 Windows 拉取
远程 Mac 上的改动不会因为窗口关闭或连接结束就自动回到 Windows。保存文件后,在 GitHub Desktop 或 Xcode 的源代码管理界面查看变更,确认无误再提交并推送到远程仓库。Xcode 支持通过 Git 跟踪项目改动,并管理源代码仓库中的版本。(Apple 的源代码管理功能说明)
回到 Windows 后,先在 GitHub Desktop 选择同一个仓库和分支,点击“Fetch origin”检查远程记录,再点击“Pull origin”取得 Mac 推送的提交。拉取完成后,检查提交历史和变更列表,再继续写下一部分。
如果 Windows 和远程 Mac 都在对同一文件、同一段内容分别修改,Git 可能无法自动判断该保留哪一种写法,于是产生合并冲突。不要用覆盖整个文件的方式“快速解决”:先查看冲突两边的内容,明确课程要求后手动合并,再检查代码和项目文件。(Apple 的 Xcode 冲突处理说明)
04用可勾选清单检查文件与账号安全
提交前检查哪些是项目本身、哪些只是本机生成物。源码、课程要求的资源和工程配置通常需要版本管理;构建输出、个人用户设置、缓存等是否忽略,要结合项目依赖、团队约定和课程要求判断。不要因为文件名出现在忽略模板里,就一律删除或忽略项目必需内容。
GitHub 官方说明,仓库根目录中的 .gitignore 可配置 Git 忽略的文件和目录;GitHub 维护的 Swift 模板也列有部分 Xcode 与 Swift 相关规则,可供核对,但模板并不替代课程项目的提交要求。(GitHub 忽略文件说明) (Swift 忽略规则模板)
- [ ] 源码、课程要求的图片和资源已出现在变更列表中,没有因忽略规则而漏掉。
- [ ]
.xcodeproj、.xcworkspace及相关配置是否提交,已按课程要求和项目结构核实。 - [ ] 构建产物、缓存和个人设置没有误混进提交;若课程要求保留某项生成文件,以课程说明为准。
- [ ] 变更列表中没有密码、访问令牌、私钥或其他账号凭证。
- [ ] 提交完成后已经推送;另一台电脑也已拉取,而不是只停留在本地记录。
账号凭证不应放进仓库。即使之后删除了包含凭证的文件,已提交的历史仍可能保留相关内容;若凭证已经误推送,应立即撤销或轮换,再按官方指引处理仓库历史。(GitHub 关于从仓库移除敏感信息的说明)
05按交接状态判断下一步
下表可用来判断卡在本地操作、仓库权限还是另一端接收环节。只要一项状态不对,就先修复对应步骤,再继续,而不是重复改代码或强行覆盖。
| 当前看到的状态 | 这代表什么 | 下一步 |
|---|---|---|
| 有改动,但尚未提交 | 修改仍只在当前电脑 | 检查变更列表,写明提交说明后提交 |
| 已提交,但尚未推送 | 记录只在当前电脑的本地仓库 | 确认仓库与分支后推送 |
| Windows 已推送,Mac 尚未拉取 | 线上有改动,Mac 本地可能仍是旧版本 | 在 Mac 先 Fetch,再 Pull |
| Mac 已推送,Windows 尚未拉取 | 远程仓库已有 Mac 的提交 | 回 Windows 检查分支,再 Fetch 和 Pull |
| 拉取时出现冲突 | 两端改动需要人工判断 | 阅读差异、合并并检查,不要覆盖后跳过验证 |
下面这张表区分工具各自负责的事,避免把版本交接、项目编辑和构建混为一谈。
| 工具或位置 | 负责什么 | 不负责什么 |
|---|---|---|
| Windows 上的 GitHub Desktop | 查看变更、提交、推送和拉取仓库记录 | 不会在 Windows 上运行 Xcode |
| 远程 Mac 上的 GitHub Desktop | 克隆仓库、取得更新、提交并推送 Mac 端改动 | 不会替你判断课程要求或自动解决所有冲突 |
| 远程 Mac 上的 Xcode | 打开 Xcode 工程、编辑项目、执行课程要求的检查或构建 | 不会让尚未推送的改动自动出现在 Windows |
| 远程仓库 | 保存已推送的提交,作为两端交接点 | 不是实时自动同步的文件夹 |
如果只是编辑普通 Swift 文件、课程又不要求构建,Windows 编辑器可以承担部分编码工作;但需要 Xcode 检查或构建时,Windows 本身不能代替 Xcode 所在的 Mac 环境。
采用“Windows 本地编辑 + GitHub 仓库 + 远程 Mac”的方案,需要记住推送和拉取、管理账号权限,并在两端改到同一处时处理冲突;直接复制项目文件也容易带错版本,还少了清楚的提交记录。若课程确实要求 Xcode,而手边没有可用 Mac,可先查看 NUKCLOUD 的远程 Mac 环境入口,判断远程开发是否适合课程的连接与文件交接方式;确认需要按需使用后,再了解 NUKCLOUD 的方案页面。若要长期、高频使用或需要本地物理接口,也应先比较自购设备和学校设备是否更合适。