公司动态

推本地项目到 GitHub 私有仓库 · 完整流程(自动化测试相关包含登录态文件)

📅 2026/8/27 9:33:46
推本地项目到 GitHub 私有仓库 · 完整流程(自动化测试相关包含登录态文件)
文章目录基础介绍仓库(Repository) —— “带历史记录的本地文件夹”远程仓库 (Remote Repository) —— “云端的备份副本”仓库分支(Branch) —— “平行的版本线”三者联系Git 命令介绍实战前置检查Step1 GitHub 网页上创建新仓库Step2 本地初始化 git 安全检查Step3 首次 commitStep4 关联远程 推送Step5 生成 Personal Access Token(没 token 的话)Step6 常见 push 失败处理错误 A: rejected (fetch first)/ non-fast-forward错误 B: CONFLICT in .gitignore错误 C: Could not open a connection to your authentication agent错误 D: remote: Repository not foundStep7 验证 push 成功 完整命令清单(复制即用) 关键安全红线 翻车应急 相关知识:rebase 是什么 后续基础介绍仓库(Repository) —— “带历史记录的本地文件夹”含义你可以把它理解为你电脑上的一个普通项目文件夹但这个文件夹被 Git“施了魔法”执行了 git init 后。它里面除了你的代码文件还多了一个隐藏的 .git 子文件夹作用存储代码存放你所有的源文件记录历史.git 文件夹就像一个“时光机日志”记录了每一次 git commit 的快照谁、什么时候、改了什么、为什么改它在你本地电脑的硬盘上远程仓库 (Remote Repository) —— “云端的备份副本”含义你可以把它看作你本地仓库在 GitHub/GitLab 服务器上的一个“完整备份”。它不是普通文件夹而是一个托管在云端的 Git 仓库作用代码备份防止你本地硬盘坏了导致代码丢失多人协作你和同事都把自己的本地仓库推送到同一个远程仓库再从远程拉取别人的代码实现团队协作自动化触发这就是你之前问的 CI持续集成的入口。当代码被推送到远程仓库的某个分支时GitHub Actions 就会被触发它在你 GitHub 网页上仓库分支(Branch) —— “平行的版本线”含义分支就像是一棵大树的不同枝杈它是一条独立的、可并行开发的代码线。main或 master分支通常是默认的主干代表“稳定可发布”的版本作用隔离开发你可以在 feature/login 分支上开发新功能完全不影响 main 分支上的稳定代码实验性修改想试试新方案但怕搞砸开个新分支随便折腾不满意就直接删掉多人并行张三在 feature/A 分支写接口李四在 feature/B 分支写页面互不干扰关键词理解为一个代码历史流的指针可以随意切换、创建、合并三者联系本地仓库你的电脑你写完 Playwright 代码执行 git commit -m “init”相当于在你本地仓库的 main 分支上拍了一张“代码快照”。连接远程仓库执行 git remote add origin …相当于在你的本地仓库和 GitHub 上的空仓库之间牵了一根“网线”推送Push执行 git push -u origin main相当于把本地 main 分支上的所有历史快照完整复制到云端远程仓库的 main 分支上。从此GitHub 上也有一条 main 分支记录了你的代码协作与同步同事想获得你的代码他执行 git clone就把远程仓库的 main 分支完整下载到他的本地仓库。同事想提交他的修改他执行 git push 推送他的本地分支到远程。你想获取同事的最新代码你执行 git pull就把远程仓库的最新变化拉取并合并到你的本地仓库。远程仓库是云盘里的“项目文件夹”本地仓库是你电脑桌面的“同步文件夹”分支则像是文件夹里不同版本的“设计稿初稿/定稿/修改稿”你可以随时切换编辑最终把定稿同步回云盘Git 命令介绍1. git init含义在当前目录下创建一个新的 Git 仓库即 .git 隐藏文件夹作用让进入的当前文件夹开始被 Git 版本管理可以记录文件的修改历史2. git add .含义添加当前目录所有变更到暂存区含新增和修改不含删除暂存区相当于一个待提交的清单作用告诉 Git 哪些文件的变化需要被记录进下一次提交git add 文件 将文件添加到暂存区git add -A 添加所有变更含删除3. git commit -m “信息”提交暂存区并附上提交信息例如 git commit -m “init: Playwright E2E 框架”含义将暂存区里的所有变化正式提交成一个版本记录。-m 后面的 “init: Playwright E2E 框架” 是本次提交的说明信息。作用将项目当前的完整状态保存为一个快照并附上说明方便以后回溯4. git remote add origin https://github.com/你的用户名/playwright-edu-activity.git含义关联远程仓库给本地仓库添加一个远程仓库地址并命名为 origin这是默认的习惯名称作用告诉本地的 Git将来你要和哪个远程 GitHub 仓库进行交互push 推送或 pull 拉取注意执行这一步之前你需要在 GitHub 网页上手动创建一个空的仓库这里填的 URL 就是那个仓库的地址末尾加上.git就拼接成了git 用的 URLgit remote add origin 地址 添加远程仓库命名 origingit remote -v 查看远程仓库地址5. git branch -M main含义将当前分支重命名为 main-M 是强制重命名的意思作用早期 Git 默认分支叫 master现在主流 GitHub 仓库默认分支是 main这一步确保本地分支名和远程默认分支名保持一致避免冲突git branch 查看本地分支列表git branch -a 查看所有分支git branch 分支名 创建新分支git branch -d 分支名 删除分支已合并git branch -D 分支名 强制删除分支未合并git switch 分支名 切换到指定分支6. git push -u origin main含义将本地的 main 分支推送到远程仓库 origin-u即 --set-upstream的作用是将本地的 main 分支和远程的 main 分支关联起来这样以后你只需输入 git push 即可无需每次都写全作用将你本地提交的所有代码同步上传到 GitHub 上的远程仓库这是代码托管的关键步骤git push origin 分支名 推送到远程分支git push -u origin 分支名 首次推送并关联上游以后直接 git push7. git status --ignoredgit status 查看已暂存/未暂存/未跟踪的文件git status --ignored 除了查看相关文件外额外显示被忽略的文件8. Get-Content .gitignore含义读取并显示 .gitignore 这个文件里的全部文本9. git log查看提交历史git log --oneline 简洁一行显示提交历史git log --graph --oneline --all 图形化显示分支历史10. git diff查看未暂存的修改差异git diff --staged 查看已暂存与上次提交的差异11. git clone 仓库地址克隆远程仓库到本地12. git restore 文件含义将工作区中指定文件恢复到上次提交或暂存时的状态用于撤销未提交的修改作用丢弃工作区的修改恢复上次提交状态常用于“改坏了代码想撤销”“误删了文件想找回”注意该操作会永久丢弃未提交的修改无法找回执行前请确认git restore --staged 文件 将文件从暂存区移出取消暂存git reset 文件 取消暂存旧方式与 git restore --staged 功能相同git rm 文件 删除文件并暂存删除操作git mv 旧名 新名 重命名文件并暂存丢弃工作区的修改恢复上次提交状态git restore --staged 文件 将文件从暂存区移出取消暂存git reset 文件 取消暂存旧方式同上git rm 文件 删除文件并暂存删除操作git mv 旧名 新名 重命名文件并暂存实战将本地的自动化脚本文件上传到GitHub 仓库前置检查项目要求GitHub 账号已注册本地项目已搭载好Step1 GitHub 网页上创建新仓库网址登录https://github.com/new复制仓库地址(HTTPS):https://github.com/你的用户名/123.gitStep2 本地初始化 git 安全检查#进入你要上传的文件目录中cd D:\# 确认 .gitignore 包含敏感文件Get-Content.gitignore|Select-Stringstorage-state# 期望看到一行:auth/storage-state.json# 看不到就别继续,先补关键文件必须在.gitignore里:#若有登录态文件(里面是真 token,绝对不能传) auth/storage-state.json auth/storage-state.*.json # 依赖 node_modules/ # Playwright 产物 playwright-report/ test-results/ # 环境变量 .env .env.localStep3 首次 commit# 初始化(只在第一次)git init git branch-M main# 配用户信息(全局只配一次)git config--global user.name你的用户名git config--global user.email你的邮箱example.com# 暂存所有文件git add.# ⬅️ 关键安全检查:# storage-state.json 必须出现在 Untracked files(说明被 .gitignore 忽略)# 但 NOT 出现在 Changes to be committedgit status# 提交git commit-m信息Step4 关联远程 推送# 关联远程仓库git remote add origin https://github.com/你的用户名/123.git# 第一次推送git push-u origin main第一次会弹认证框(Git Credential Manager):方式操作Sign in with your browser(推荐)点这个 → 浏览器跳到 GitHub → 授权 → 自动回来Token切到 Token tab → 贴 Personal Access TokenStep5 生成 Personal Access Token(没 token 的话)打开 https://github.com/settings/tokensGenerate new token → Generate new token (classic)Note 写playwright-pc(或任意标识)Expiration 选No expiration或90 days勾repo那一栏(全勾)Generate token立刻复制那串ghp_xxxxxxxxxxxx(离开页面就再也看不到了)贴回 PowerShell 的密码框Step6 常见 push 失败处理错误 A: rejected (fetch first)/ non-fast-forward原因:GitHub 上已经有 commit(创建仓库时勾了 .gitignore 模板,GitHub 会自动 commit 一个)。解决:# 拉取并 rebasegit pull origin main--rebase错误 B: CONFLICT in .gitignore原因:本地和 GitHub 的 .gitignore 模板不同,rebase 时冲突。解决:手动合并 .gitignore,保留两边的关键内容:✅ GitHub 模板的常规 Node 忽略项✅ 本地的auth/storage-state.json(绝对不能丢)# 编辑 .gitignore,把冲突标记 合并好# 然后告诉 git 冲突解决:git add.gitignore git rebase--continue# 这时会弹编辑器(Vim),按 Esc - :wq - Entergit push-u origin main放弃重来的方案:git rebase--abort错误 C: Could not open a connection to your authentication agent原因:SSH agent 没启动。解决:改用 HTTPS 方式(本文档走的就是 HTTPS)或者启动 ssh-agent:Start-Service ssh-agent错误 D: remote: Repository not found原因:仓库 URL 拼错,或者没权限访问。解决:检查git remote -v看 URL 对不对确认 GitHub 上你是这个仓库的成员—Step7 验证 push 成功# 查看远端git remote-v# 期望:# origin https://github.com/你的用户名/123.git (fetch)# origin https://github.com/你的用户名/123.git (push)# 查看推送历史git log--oneline-3打开 https://github.com/你的用户名/123,核对:检查项期望文件数量\个auth/文件夹只有login.ts,没有storage-state.json.gitignore包含auth/storage-state.json行Commit 历史有你的init: ...commit— 完整命令清单(复制即用)# 一次性初始化 cd D:\\ git init git branch-M main git config--global user.name你的用户名git config--global user.email你的邮箱example.com# 安全检查 Get-Content.gitignore|Select-Stringstorage-stategit add.git status# ⬅️ 确认 storage-state.json 不在 Changes to be committed 里git commit-minit: Playwright E2E 框架 活动管理用例# 关联 推送 git remote add origin https://github.com/123.git git pull origin main--rebase# (如有冲突,改 .gitignore,再 git add .gitignore \\ git rebase --continue)git push-u origin main# 验证 git log--oneline-3 git remote-v— 关键安全红线auth/storage-state.json绝不能 push 上去里面是真 token一旦泄露,任何人都能登录你的 QA 环境不要在 commit message 里写敏感信息(密码、token、内部域名)PAT token 不要存到任何文件里(用环境变量或 Git Credential Manager)不要把别人的代码 / 内部文档直接 commit(注意 LICENSE 兼容性)— 翻车应急症状处理误推了 storage-state.json立刻①去 GitHub 仓库 Settings → Danger Zone → Delete this repository(重建) ②让后端把那个 token 吊销PAT 泄露去 https://github.com/settings/tokens 立即 Revoke想撤回最近一次 commit(没 push)git reset --soft HEAD\~1想完全重置rm -rf .git重新来rebase 卡死git rebase --abort回退— 相关知识:rebase 是什么git rebase“重新设置基底”,把当前分支的提交移植到另一个分支的最新提交之上。git pull(merge)git pull --rebase合并方式产生一个 merge commit没有 merge commit历史长这样多一条分叉线一条直线适合团队多人协作个人分支,保持线性历史为什么刚才弹了编辑器:git rebase --continue在 rebase 走完一个 commit 后,会问你要不要保留原来的 commit message。这是 git 的标准流程,不是出错。直接Esc→:wq→Enter 用原来的 message改成自己的 message 也行— 后续[ ] 配置 GitHub Actions CI(.github/workflows/e2e.yml)[ ] 接入测试数据管理(API helper)[ ] 补全 用例类型(缺:重复数据 / 异常 / 权限)[ ] 配置 PR 触发自动跑[ ] 配 GitHub Self-hosted Runner(让 CI 能访问内网 QA 环境)