【Github】将项目托管到Github并进行合作开发
一、引言
Github是程序员必不可缺的代码托管平台和全球技术交流社区,如何优雅且熟练地使用它应该是我们的自我要求。
在开始之前,需要确保进行了以下的简单操作,这些步骤我一笔带过,详细教程自行搜索。
1. 安装Git
不论是windows还是linux下安装git都是非常简单的操作,不再赘述。
2. 新建github仓库
仓库取名最好与本地的项目保持一致。公开仓库选public
;私有仓库private
。
3. 密钥设置
首先在本地生成 ssh key
1
ssh-keygen -t rsa -C "your_email@youremail.com"
这里的邮箱是你在github注册的邮箱
之后会要求确认密钥存放路径和输入密码(输的时候看不到密码),这里使用默认的路径,(当然也可以自定义路径)。成功的话会在 ~/ 下生成
.ssh
文件夹,打开id_rsa.pub
,所有内容都属于key,复制里面的 key,。github添加秘钥
在github个人设置中,点击SSH and GPG key
,new SSH key
。将上述生成的key粘贴到这里。放心,不会覆盖原有的ssh key。验证密钥是否配置成功
1
ssh -T git@github.com
二、关联仓库
1. 设置用户名和邮箱
本地仓库传到github上去,在此之前还需要设置username和email,因为github每次commit都会记录他们。
先查看一下当前git的用户名和邮箱:
1 | git config user.name |
如果正常返回说明曾经配置过,如果没有返回,可通过下方代码进行全局配置:
1 | git config --global user.name "your name" |
命令中的
--global
参数表示全局
,不加这个参数只会修改当前单个仓库的git配置
2. 创建本地仓库
在电脑适当地方创建一个文件夹作为项目目录,进入项目目录,右键选择 Git Bash Here
打开git bash终端,执行 git init
命令以初始化 git 版本库。会自动生成一个 .git
文件夹
3. 添加远程仓库
1 | git remote add origin git@github.com:yourName/yourRepo.git |
后面的 yourName
和 yourRepo
表示你在 GitHub 的用户名
和刚才新建的远程仓库名
。
加完之后进入 .git
文件夹,打开 config
,这里会多出一个 [remote "origin"]
内容,这就是刚才添加的远程地址,也可以直接修改 config 来配置远程地址。也可以通过 git remote -v
命令快速查看当前远程库地址。
4. 修改主分支
git 默认主分支叫 master
,为了与 GitHub 保持一致,需要将主分支修改为 main
1 | git branch -M main |
三、提交代码
以下命令均在项目根目录中打开的git bash终端执行
1. 首次提交
把项目提交到缓冲区(注意命令有个点)
1 | git add . |
查看状态
1 | git status |
提交commit,其中-m
后面引号里面是本次提交你想添加的注释内容。
1 | git commit -m "first commit" |
把本地仓库内容推送到远程仓库:
1 | git push -u origin main |
但是这时候可能会如下报错(如果在前面修改了主分支,此报错就不会出现,请直接跳过本内容):
1 | $ git push -u origin main |
为什么会这样?你可能已经注意到了,在我们每次使用git指令时,git都在一直用蓝色的字提示我们当前处在一个叫master
的分支。这是git为我们创建的默认分支,你可能完全无视了这一点,只关心github上的那个main分支。至于为什么它们的默认分支不同,github给出的解释是:
GitHub is working on replacing the term “master” on its service with a neutral term like “main” to avoid any unnecessary references to slavery.
由于受到了“Black Lives Matter(黑命贵)”运动的影响,GitHub觉得 master
有点奴隶主那味儿,于是在2020年10月1日后修改默认分支的名称为 main
。
我们需要先将本地的master
分支重命名为main
:
1 | git branch -m master main |
然后重新把本地仓库内容推送到远程仓库,可能会跳出github登录git,登录即可。
1 | git push -u origin main |
首次提交加上
-u
参数,今后提交时git push origin main
可以直接简写成git push
2. 非首次提交
1 | git add . |
3. 分支的创建与推送
1 | # 查看分支 |
1 | # 查看分支(当前处于dev分支) |
1 | # 切换到main分支 |
4. 本地分支关联远程分支
1 | # 克隆远程仓库 |
1 | # 推送修改后的demo分支到远程仓库 |
四、团队协作开发
- 在 GitHub 上 fork 要参与的项目
- 从 origin 拉取正在开发的分支代码,一般是 main(master) 分支
- 本地完成开发需求
- commit 变更的文件
- 将修改的代码 push 到 fork 库
- 新建合并请求,将修改的代码合并到 origin。这一过程可能需要制定 commiter
- commiter 审核代码,没有问题,可以合并到 origin 仓库
五、放弃本地更改
本地代码有修改,但是想放弃这些修改,得到与主干一样的代码,怎么办呢?有以下几种方法:
- 方法1:删除本地代码,重新pull最新代码
- 方法2:在Idea(JAVA IDE编程工具)中右键被修改的文件夹或文件,选择rollback
- 方法3:使用如下git命令
1
2
3
4
5# 重置索引和工作目录
git reset --hard
# 更新代码
git pull
七、编辑项目信息
进入GitHub项目仓库,查看右侧边栏【About】
选项,点击 右上角小齿轮
编辑项目仓库详情。
- Description(仓库描述)
- Website(项目站点)
- Topics(项目标签,使用空格分隔)
- Include in the home page(在此仓库主页中包含的内容)
- Releases(版本)
- Packages(包)
- Environments(环境)
八、发布项目版本
进入GitHub项目仓库,查看右侧边栏【Releases】
选项,点击 Create a new release
创建第一个版本。
- 【Choose a tag】选择Tag版本标记,第一次可以输入并创建
v1.0.0
。标记建议:通常的做法是在您的版本名称前加上字母
v
。一些好的标签名称可能是v1.0.0
或v2.3.4
。如果标签不用于生产,请在版本名称后添加预发布版本。一些好的预发布版本可能是v0.2.0-alpha
或v5.9-beta.3
。 - 【Target: main】选择分支
- 【Release title】输入版本标题,此处内容随意。如果想简单点,直接输入版本号
v1.0.0
作为标题即可。 - 【Describe this release】填写版本说明。一般是说明一下新增了什么功能(Added),移除了什么代码,修复了什么漏洞(Fixed)等等。(增删改)
- 【Attach binaries…】拖拽上传发布二进制文件,文件或文件夹(可同时拖拽多个文件)。如果没有其他补充文件,不用上传任何东西,因为上面刚刚选择的仓库分支就是此次将要打包的文件。
- 【This is a pre-release】是否为预发布程序(正规发版的程序在上线正式版本前一般有预发布版本),若勾选则将被指出此版本被确定为非生产就绪。正常版本无需勾选。
- 【Publish release】发布版本
- 【Save draft】保存草稿
- 发布成功,可以返回项目仓库主页,查看右侧边栏
【Releases】
部分。
【报错记录】
1. 报错①
1 | warning: LF will be replaced by CRLF in README.md. |
2. 报错②
1 | $ git push -u origin main |
【参考内容】:
学习更多Git操作可浏览廖雪峰的官方网站-史上最浅显易懂的Git教程
- 如何把项目托管到github及合作开发
- git push -u 简单理解
- git提示“warning: LF will be replaced by CRLF”的解决办法
- Git 常见错误 之 error:error: src refspec main does not match any/ error: failed to push some refs to 简单解决
- Github默认分支由master变更为main
- We recommend every repository include a README, LICENSE, and .gitignore.
- 怎么使用github的js文件,css文件
- github release 功能基础使用(2021)
- git本地分支关联远程分支
- 一个Git仓库,使用分支branch管理多个不同项目product