从零开始,学会上传,更新,维护github仓库
以下是一份从头到尾、覆盖安装、配置、创建仓库、上传项目到 GitHub 的完整教程。全程使用通用示例,不包含任何具体的仓库链接,仅供参考。
一、准备工作
1. 注册 GitHub 账号
-
打开浏览器,访问 GitHub 官网(输入 “GitHub” 即可找到)。
-
点击“Sign up”或“注册”按钮,按提示输入邮箱、用户名、密码,并完成邮箱验证。
-
登陆后,进入个人主页,即可进行后续操作。
二、安装并配置 Git
1. 在不同操作系统上安装 Git
-
Windows:
-
打开浏览器,搜索“Git Windows安装”并找到官网的下载页面。
-
下载最新版本的安装包(通常是以
.exe
结尾的文件),双击运行后一路“Next”完成安装。 -
安装过程中保持默认设置即可(除非你有特殊需求)。
-
-
macOS:
-
可以通过包管理器安装(推荐 Homebrew)。在终端中执行:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew install git
如果不想使用 Homebrew,也可以直接下载 macOS 安装包,按照提示安装。
-
-
Linux(以 Ubuntu 为例):
打开终端,执行:sudo apt update sudo apt install git -y
安装完成后,在任意终端(Windows 下可打开 Git Bash)里输入:
git --version
如果输出类似 git version 2.x.x
,说明安装成功。
2. 全局配置 Git 用户信息
安装完成后,需要告诉 Git 是谁在提交代码。打开终端,依次执行:
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱@example.com"
-
user.name
:填写你在 GitHub 上注册的用户名或昵称。 -
user.email
:填写与你 GitHub 帐号绑定的邮箱地址。
配置完毕后,可以用下面命令检查:
git config --global --list
会看到类似:
user.name=你的用户名
user.email=你的邮箱@example.com
三、为安全验证配置 SSH(可选,但推荐)
使用 SSH 方式推送/拉取代码,可以避免每次输入用户名和密码(Token)。下面介绍 SSH 公钥的生成与添加。
1. 生成 SSH 密钥对
-
打开终端(或 Git Bash),执行:
ssh-keygen -t ed25519 -C "你的邮箱@example.com"
-
按提示一路回车即可,默认会在用户主目录下生成
.ssh/id_ed25519
(私钥)和.ssh/id_ed25519.pub
(公钥)两个文件。 -
如果提示 “文件已存在”,可选择覆盖或另存为其他文件名,也可以按提示输入一个新的名称。
-
-
生成完成后,执行以下命令查看公钥内容:
cat ~/.ssh/id_ed25519.pub
终端会输出一串以
ssh-ed25519
开头的字符串,这就是公钥。
2. 将 SSH 公钥添加到 GitHub
-
在浏览器中,登陆 GitHub,点击右上角头像,选择“Settings”(设置)。
-
在左侧栏中找到 SSH and GPG keys,点击进入。
-
点击 New SSH key(新增 SSH 密钥),在“Title”框里可以填写一个有意义的名字(例如 “My Laptop”),然后把刚才复制的公钥粘贴到下面的文本框中,最后点击 Add SSH key。
-
如果 GitHub 要求你输入账号密码或两步验证码,按提示输入即可。
添加成功后,SSH 验证就设置完毕。可以测试连接:
ssh -T git@github.com
如果提示类似 “Hi <用户名>! You've successfully authenticated...” 则说明 SSH 验证配置正确。
四、在 GitHub 上创建一个空仓库
-
登陆 GitHub 后,点击右上角的 “+” 按钮,选择 New repository(新建仓库)。
-
在 “Create a new repository” 页面填写:
-
Repository name:为你的项目起个名字,例如
my-project
。 -
Description(可选):添加简短描述。
-
Public 或 Private:根据需要选择公开或私有。
-
Initialize this repository with a README:通常不勾选,否则会自动生成一个 README 文件,后续需要先拉取再推送。
-
-
点击下方的 Create repository(创建仓库),稍等片刻后就会进入新仓库页面。页面上会提供 HTTPS 和 SSH 两种地址,如:
-
HTTPS:
https://github.com/你的用户名/my-project.git
-
SSH:
git@github.com:你的用户名/my-project.git
记住这两个地址中的一种,后续用来关联本地仓库。
-
五、将本地项目与远程仓库关联并上传
下面以一个已存在本地项目的目录为例,演示如何上传到 GitHub。假设本地项目文件夹路径为 ~/projects/my-project
,且目录下已有若干源代码或资源文件。
1. 在本地初始化 Git 仓库
-
打开终端,切换到项目根目录:
cd ~/projects/my-project
-
在该目录下执行:
git init
这会创建一个隐藏的
.git/
文件夹,使该目录成为一个 Git 仓库。 -
你可以运行
ls -A
或git status
来确认目录下已有普通文件,但 Git 还没追踪它们。
2. 将文件添加到暂存区并提交
-
查看当前状态(可选):
git status
这时 Git 会告诉你哪些文件是 “Untracked files”(未跟踪文件)。
-
把所有文件添加到暂存区:
git add .
这样做会把当前目录(及子目录)下所有未被忽略的文件都纳入暂存区。
-
创建第一次提交:
git commit -m "首次提交:项目初始化"
以上操作会在本地生成一个提交记录(commit),大多数情况下会默认在
master
分支上。如果想直接把主分支命名为main
,可以执行:git branch -M main
这样以后本地仓库的主分支就是
main
(与 GitHub 通用约定保持一致)。
3. 将本地仓库与远程仓库关联
-
在本地执行下面命令,将远程仓库地址添加为名为
origin
的远程源:-
使用 HTTPS(需要每次输入用户名/密码或 Token):
git remote add origin https://github.com/你的用户名/my-project.git
-
使用 SSH(已配置 SSH 密钥则无需输入密码):
git remote add origin git@github.com:你的用户名/my-project.git
注意:命令开头务必是小写的
git
,不要带任何隐藏字符或破折号。 -
-
添加成功后,可用下面命令确认:
git remote -v
你会看到类似:
origin https://github.com/你的用户名/my-project.git (fetch) origin https://github.com/你的用户名/my-project.git (push)
或者如果用的是 SSH,则显示:
origin git@github.com:你的用户名/my-project.git (fetch) origin git@github.com:你的用户名/my-project.git (push)
4. 推送本地提交到远程仓库
-
如果当前分支是
main
:git push -u origin main
如果当前分支是
master
(没有重命名为main
),则:git push -u origin master
-
-u origin main
的含义是:把本地main
分支推送到远程origin
,并建立跟踪关系。以后只需直接执行git push
即可。
-
-
在推送过程中,如果使用 HTTPS,需要输入 GitHub 用户名和密码(如果启用了两步验证,则输入 Personal Access Token);如果使用 SSH,且 SSH key 已配置好,则不会再提示输入密码。
-
推送成功后,终端会显示类似:
Enumerating objects: 10, done. Counting objects: 100% (10/10), done. Compressing objects: 100% (7/7), done. Writing objects: 100% (10/10), 1.23 KiB | 1.23 MiB/s, done. Total 10 (delta 0), reused 0 (delta 0) To https://github.com/你的用户名/my-project.git* [new branch] main -> main branch 'main' set up to track 'origin/main'.
-
刷新浏览器,打开 GitHub 上该仓库页面,就能看到你刚才上传的所有文件。
六、后续开发与同步
项目上传成功后,后续只需按照下面步骤更新远程仓库即可。
1. 修改/新增文件后上传
-
在本地对文件进行修改或新增文件。
-
查看项目状态:
git status
可以看到哪些文件被修改、哪些是新文件。
-
添加改动到暂存区:
-
如要一次添加所有改动:
git add .
-
如果只想添加某个文件:
git add path/to/yourfile.ext
-
-
提交改动:
git commit -m "本次更新:简要说明修改内容"
-
推送到远程:
git push
由于第一次已经用
-u origin main
或-u origin master
与远程分支建立了跟踪关系,后续直接git push
即可。
2. 如果远程仓库有了新的提交(多人协作时常见)
-
在推送之前,可以先拉取远程更新:
git pull --rebase origin main
或者:
git pull origin main
-
带
--rebase
可以保持提交历史线性;不带则会自动创建一个合并提交(Merge commit)。
-
-
如果出现冲突(Conflict),按提示打开冲突文件,手动保留、删除冲突标记(
<<<<<<<
、=======
、>>>>>>>
),然后执行:git add 冲突已解决的文件 git rebase --continue # 如果使用了 --rebase
或者如果是普通
git pull
:git add 冲突已解决的文件 git commit
冲突解决完成后再执行
git push
,即可把本地改动与远程最新内容同步。
七、常见问题与注意事项
-
命令前不要出现隐藏字符
-
如果复制粘贴时前面多了不可见破折号(如 “”)或空格,Git 会识别为非法命令,从而提示 “command not found”。遇到这种情况,请按几次退格键把前导的隐藏字符清除,然后再手动输入
git init
、git add
等命令。
-
-
.gitignore 文件
-
在项目根目录创建一个名为
.gitignore
的文件,写入你不想跟踪(即不想上传到远程)的文件或文件夹规则。常见示例:node_modules/ *.log .env .DS_Store build/ *.pyc
-
这样做可以避免把编译生成的临时文件、IDE 配置、依赖包等无关文件上传到仓库。
-
-
分支管理
-
默认情况下,你会在
main
(或master
)分支上工作。如果想开发新功能、修复 Bug,通常会新建分支:git checkout -b feature/新功能名称
-
完成开发并测试通过后,切回
main
分支并合并:git checkout main git merge feature/新功能名称 git branch -d feature/新功能名称
-
合并完成后,再执行
git push
即可把合并后的结果推到远程。
-
-
SSH 与 HTTPS
-
如果长时间需要频繁推送,推荐使用 SSH 方式,只需在本地生成过一次 SSH 密钥,并把公钥添加到 GitHub,就不需要每次输入用户名/密码或 Token。
-
如果安全要求较高或不方便配置 SSH,也可以继续使用 HTTPS,但每次推送时都可能需要输入 Token。
-
-
Token 和安全
-
GitHub 已逐步弃用直接使用密码进行 HTTPS 验证,强制使用个人访问令牌(Personal Access Token)。
-
在终端推送时,如果提示要求用户名和密码,你可以把用户名填为 GitHub 用户名,然后把个人访问令牌粘贴到密码处。访问令牌可以在 GitHub 个人设置里新建。
-
-
远程仓库已初始化 README 情况
-
如果你在新建仓库时勾选了“初始化 README”,远程仓库就会自带一个提交记录。这时本地一开始是空的,如果你直接执行
git push
会被拒绝(提示需要先拉取远程更改)。解决方法是先执行:git pull --rebase origin main
把远程的那次提交拉下来并合并到本地,然后再
git push
。
-
八、小结
-
安装 Git 并配置
user.name
、user.email
。 -
(可选)配置 SSH 密钥,将公钥添加到 GitHub。
-
在 GitHub 上创建一个空仓库(不勾选初始化 README)。
-
在本地项目目录执行
git init
,将项目转为 Git 仓库。 -
执行
git add .
、git commit -m "描述"
,完成首次提交。 -
使用
git remote add origin <远程仓库地址>
关联远程。 -
执行
git push -u origin main
(或master
)将本地提交推送到 GitHub。 -
后续开发:用
git add
→git commit
→git push
完成更新。若需合并远程改动,先git pull --rebase
再git push
。
以上步骤涵盖了从安装软件到首次上传,再到后续代码同步的完整流程。只要每一步都按照说明并自己手动输入命令,就能顺利把项目上传并保持与 GitHub 的同步。
相关文章:
从零开始,学会上传,更新,维护github仓库
以下是一份从头到尾、覆盖安装、配置、创建仓库、上传项目到 GitHub 的完整教程。全程使用通用示例,不包含任何具体的仓库链接,仅供参考。 一、准备工作 1. 注册 GitHub 账号 打开浏览器,访问 GitHub 官网(输入 “GitHub” 即可找…...
#STM32 HAL库实现的STM32F407时钟配置程序以及和STM32F103配置对比
以下是使用STM32 HAL库实现的STM32F407时钟配置完整代码(基于8MHz外部晶振,配置为168MHz系统时钟),包含详细注释和关键点说明: 完整HAL库实现(system_stm32f4xx.c main.c) 1. 首先在stm32f4xx…...

竞争加剧,美团的战略升维:反内卷、科技与全球化
5月26日,美团发布2025年第一季度业绩报告,交出了一份兼具韧性与创新性的成绩单。 报告显示,公司一季度总营收866亿元,同比增长18%;核心本地商业收入643亿元,同比增长18%;季度研发投入58亿元&a…...

(17)课36:窗口函数的例题:例三登录时间与连续三天登录,例四球员的进球时刻连续进球。
(89)例三登录时间 : 保留代码版本 : CREATE TABLE sql_8( user_id varchar(2), login_date date ); insert into sql_8(user_id,login_date) values(A,2024-09-02),(A,2024-09-03),(A,2024-09-04),(B,2023-11-25),(B,2023-12- 3…...

高性能分布式消息队列系统(二)
上一篇博客将C进行实现消息队列的用到的核心技术以及环境配置进行了详细的说明,这一篇博客进行记录消息队列进行实现的核心模块的设计 五、项目的需求分析 5.1、项目框架的概念性理解 5.1.1、消息队列的设计和生产消费者模型的关系 在现代系统架构中,…...
Spring 官方推荐构造函数注入
1. 依赖关系明确 构造函数注入可以清晰地声明类的依赖关系,所有必需的依赖项都通过构造函数参数传递,使得代码的可读性更高。这种方式让类的使用者能够直观地了解类的依赖,而不需要通过注解或反射来猜测。 2. 增强代码健壮性 构造函数注入…...

华为OD机试真题——天然蓄水库(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《天然蓄水库》: 目录 题目…...

【Harmony OS】数据存储
目录 数据存储概述 首选项数据存储 关系型数据库 数据存储概述 • 数据存储 是为了解决应用数据持久化问题,使得数据能够存储在外存中,达到保存或共享目的。 • 鸿蒙应用数据存储包括 本地数据存储 和 分布式数据存储 。 • 本地数据存储 为应用…...

MybatisPlus--核心功能--service接口
Service接口 基本用法 MyBatisPlus同时也提供了service接口,继承后一些基础的增删改查的service代码,也不需要去书写。 接口名为Iservice,而Iservice也继承了IRepository,这里提供的方法跟BaseMapper相比只多不少,整…...

uniapp调试,设置默认展示的toolbar内容
uniapp调试,设置默认展示的toolbar内容 设置pages.json中 pages数组中 json的顺序就可以只需要调整顺序,不会影响该bar在页面中的显示默认展示第一条page...

笔记本电脑开机无线网卡自动禁用问题
1.问题环境 电脑品牌:华硕笔记本天选4 电脑型号:FX507VV 电脑系统:windows 11_x64_24h2 文档编写时间:2025年6月 2.问题现象 1. 笔记本电脑开机之后自动禁用无线网卡 使用USB转RJ45转接头同样无效,这个网卡也给禁…...

推荐一款使用html开发桌面应用的工具——mixone
简介 mixone是开发桌面应用(Win、Mac、Linux)的一款工具、其基于electron实现。其拥有简单的工程结构。以为熟悉前端开发的程序员可以很轻松的开发出桌面应用,它比electron的其他框架更简单,因为那些框架基本上还需要了解electro…...
支持TypeScript并打包为ESM/CommonJS/UMD三种格式的脚手架项目
支持TypeScript并打包为ESM、CommonJS和UMD三种格式的脚手架项目 码云地址 NODE 版本要求 node v16.17.1 npm 8.15.0 设置淘宝镜像 npm set registry https://registry.npmjs.org/ cnpm set registry https://registry.npmjs.org/安装依赖 npm install打包 npm run build…...

【云原生开发】如何通过client-go来操作K8S集群
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...

八.MySQL复合查询
一.基本查询回顾 分组统计 group by 函数作用示例语句说明count(*)统计记录条数select deptno, count(*) from emp group by deptno;每个部门有多少人?sum(sal)某字段求和select deptno, sum(sal) from emp group by deptno;每个部门总工资avg(sal)求平均值select…...
cacti导出的1分钟监控数据csv文件读取并按5分钟求平均值,然后计算95计费值,假设31天的月份
cacti导出的1分钟监控数据csv文件读取并按5分钟求平均值,然后计算95计费值,假设31天的月份 import pandas as pd import openpyxl from openpyxl.styles import Font from openpyxl.utils.dataframe import dataframe_to_rows import os import chardet…...

FastMCP vs MCP:协议标准与实现框架的协同
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...

AI视频“入驻”手机,多模态成智能终端的新战场
文|乐乐 今天,无线蓝牙耳机(TWS)已经成为人人都用得起的产品。 但退回到9年前,苹果AirPods是全球第一款真正意义上的无线蓝牙耳机。靠着自研并申请专利的Snoop监听技术,苹果解决了蓝牙耳机左右延时和能耗…...

nginx+tomcat负载均衡群集
一 案例部署Tomcat 目录 一 案例部署Tomcat 1.案例概述 1.1案例前置知识点 (1)Tomcat简介 (2)应用场景 2.实施准备 (1)关闭Linux防火墙 (2)安装Java 2.1 安装配置TOMACT …...
DEEPSEEK帮写的STM32消息流函数,直接可用.已经测试
#include "main.h" #include "MessageBuffer.h"static RingBuffer msgQueue {0};// 初始化队列 void InitQueue(void) {msgQueue.head 0;msgQueue.tail 0;msgQueue.count 0; }// 检查队列状态 type_usart_queue_status GetQueueStatus(void) {if (msgQ…...
day45 python预训练模型
目录 知识点回顾 1. 预训练的概念 2. 常见的分类预训练模型 3. 图像预训练模型的发展史 4. 预训练的策略 5. 预训练代码实战:ResNet18 作业:在 CIFAR-10 上对比 AlexNet 预训练模型 实验结果对比 在深度学习领域,预训练模型已经成为了…...
二维 根据矩阵变换计算缩放比例
在二维空间中,根据矩阵变换计算缩放比例是一个常见的图形学问题。通常,我们通过分析变换矩阵的结构来提取出缩放(Scale)信息。以下是详细的分析和计算方法。 🧮 一、基础:二维变换矩阵结构 在二维仿射变换…...
Vue-Cropper:全面掌握图片裁剪组件
Vue-Cropper 完全学习指南:Vue图片裁剪组件 🎯 什么是 Vue-Cropper? Vue-Cropper 是一个简单易用的Vue图片裁剪组件,支持Vue2和Vue3。它提供了丰富的配置选项和回调方法,可以满足各种图片裁剪需求。 🌟 …...

建造者模式:优雅构建复杂对象
引言 在软件开发中,有时我们需要创建一个由多个部分组成的复杂对象,这些部分可能有不同的变体或配置。如果直接在一个构造函数中设置所有参数,代码会变得难以阅读和维护。当对象构建过程复杂,且需要多个步骤时,我们可…...

现场总线结构在楼宇自控系统中的技术要求与实施要点分析
在建筑智能化程度不断提升的当下,楼宇自控系统承担着协调建筑内各类设备高效运行的重任。传统的集中式控制系统在面对复杂建筑环境时,逐渐暴露出布线繁琐、扩展性差、可靠性低等问题。而现场总线结构凭借其分散控制、通信高效等特性,成为楼宇…...
Axure组件即拖即用:垂直折叠菜单(动态展开/收回交互)
亲爱的小伙伴,在您浏览之前,请关注一下,在此深表感谢!如有帮助请订阅专栏!免费哦! 你是不是也这样崩溃过? 明明设置了点击交互,菜单却像死机一样纹丝不动,F5按烂了都没反…...

学习路之PHP--easyswoole使用视图和模板
学习路之PHP--easyswoole使用视图和模板 一、安装依赖插件二、 实现渲染引擎三、注册渲染引擎四、测试调用写的模板五、优化六、最后补充 一、安装依赖插件 composer require easyswoole/template:1.1.* composer require topthink/think-template相关版本: "…...

《云原生安全攻防》-- K8s网络策略:通过NetworkPolicy实现微隔离
默认情况下,K8s集群的网络是没有任何限制的,所有的Pod之间都可以相互访问。这就意味着,一旦攻击者入侵了某个Pod,就能够访问到集群中任意Pod,存在比较大的安全风险。 在本节课程中,我们将详细介绍如何通过N…...

06 APP 自动化- H5 元素定位
文章目录 H5 元素定位1、APP 分类2、H5 元素3、H5 元素定位环境的搭建4、代码实现: H5 元素定位 1、APP 分类 1、Android 原生 APP2、混合 APP(Android 原生控件H5页面)3、纯 H5 App 2、H5 元素 H5 元素容器 WebViewWebView 控件实现展示网页 3、H5 元素定位环…...
Axure疑难杂症:中继器新增数据时如何上传并存储图片(玩转中继器)
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 案例视频: 中继器新增数据时如何上传并存储图片 课程主题:中继器新增数据时如何上传并存储图片 主…...