大家好这里是Eric。今天写一篇文章记录下平时工作中在使用Git和GitHub遇到的问题,以免忘记。
在程序员实际开发过程中绕不过Git、GitHub这两样东西的。本文章是自己实际开发当中遇到的一些问题以及解决思路,在此做一个记录。文章简单介绍Git、GitHub以及在实际开发中如何配合实用,帮助自己管理代码以及团队协作。
GitHub
GitHub是什么?
GitHub是一个代码托管平台,你可以在平台上管理你的代码,保存你的代码。
- 软件开源,编写软件对所有人开源
- 方便团队协作:在团队开发过程中,GitHub(国内可以使用Gitee)可以帮助我们管理代码,查看提交人员,修改的模块等
Github的基本使用
注册与登录
1. 首先进入GitHub官网(GitHub)
2. 登录
注册之后通过邮箱(用户名)和密码登录
3. 注册
输入邮箱注册,并且到邮箱内部验证
创建仓库与密钥处理
由于GitHub拥有许多功能,这里只介绍以及说明本人实际开发中经常用到的功能。
在实际开发当中,一个大型项目往往需要多个版本不断地迭代更新,这个时候就需要用到GitHub帮助管理代码。我们每一个版本,都可以通过Git指令(下边会介绍到)将代码推送到GitHub仓库当中管理当前项目地代码,这时候GitHub仓库也就相当于远程仓库(Remote)
1. 创建仓库
注意点:
- 项目命名:笔者习惯是大驼峰加上中、下划线,例如:Student_System或者Student-System
- 项目描述:简单描述项目
2. 进入仓库
注意点
- GitHub默认地分支是main,而Git的默认分支是master
- 修改GitHub中的默认分支为master(在Settings中修改)
- 创建一个新的本地分支main进行管理
- SSH与HTTPS
- SSH(
git@github.com:用户名/juejin.git
):22端口,需要本地生成SSH密钥对,再把公钥上传到服务器,速度慢,适合内部访问。 - 如果需要在此电脑提交到其他账号仓库,那么就需要当前帐号的账户已经配置了本地的ssh-key才能有权限访问。
- HTTPS(
https://github.com/用户名/juejin.git
):443端口,需要用户名和密码授权(每次都要登录),比较快,属于匿名访问适合开源项目。
- SSH(
3. 配置ssh-key
打开首页——>右上角头像打开设置——>找到SSH and GPS Keys
——>打开git bash——>查看当前密钥——>复制到当前页面中添加
如果没有SSH Key,那么就生成一下,相关指令
# 进入ssh目录
cd ~/.ssh/
# 查看文件列表
ls
# 查看密钥
cat id_rsa.pub
# 生成密钥
ssh-keygen -t rsa -C "邮箱地址"
#这里可以不断回车,然后再回到第一步查看密钥
个人开发与团队协作
个人开发
当仓库创建完成后,此时远程仓库Remote已经搭建好了,我们就需要将本地的代码推送,这里采用juejin.html文件进行演示。
- 先进行初始化,添加git仓库:
git init
,当前目录会创建.git
文件夹 - 在文件内修改代码,并且通过
git add .
将所有文件添加到暂存区
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div>这里是本地代码v1.0</div>
</body>
</html>
-
查看当前项目当前状态:
git status
。到这里会发现git提示“要提交的修改”已经存在当前添加进去的文件了。 -
提交代码到本地仓库:
git commit -m 'this is local modified-v1.0'
-
添加远程仓库:
git remote add origin git@github.com:用户名/juejin.git
。这里远程仓库名称:origin。 -
将代码进行推送:
git push -u origin master
。origin:远程仓库名(远程主机名) master:当本地分支名和远程分支名一致时,可以简写。这个命令是将本地的分支推送到origin主机的master分支上,与git push -u origin master:master
一致 -
到这个时候已经完成了一次代码的推送,可以到GitHub上刷新查看
团队协作
1. 分支问题
在团队协作中会出现许多情况,由于一个仓库是由多个人进行维护、开发的,那么就需要规定好各种二氧的分支。笔者在团队开发时一般会以当前分支作为默认标准:
master
:主分支。经过测试没有bug可以部署生产环境的分支,只能由release
和htfix
分支合并。develop
:开发的分支。平行于master分支。功能模块开发交给feature
分支,测试给release
合并。- 例如:现在需要开发一个新的功能login,这时候需要从
develop
分支上创建检出feature分支fb-login
,在功能完成之后merge到develop
分支上。(这里可以使用git hooks钩子,这里后面补充解释)。
- 例如:现在需要开发一个新的功能login,这时候需要从
feature
:功能模块开发分支。在团队开发中每个人都需要维护一个自己的feature分支,并进行开发工作,开发完成之后会将此分支merge到develop
分支上。一般用于开发新功能和项目维护。创建分支名称一般是:feature/login_module或者feature-login_module- 例如:小王小明分别开发login和register功能,那么就需要在主分支上检出,两个功能开发完成之后合并到
develop
。
- 例如:小王小明分别开发login和register功能,那么就需要在主分支上检出,两个功能开发完成之后合并到
hotfix
:热修复分支。由master分支检出,进行线上版本的bug修复,修复完成之后需要merge回develop
和master
分支,之后可以删除,属于临时分支。fix
:补丁分支。用于检修develop
分支的bug,修复完成后需合并回develop
分支。relase
:发布分支。从develop
分支检出,用于发布前的测试,可以进行简单的bug修复。bug复杂的时候需要merge回develop
分支进行修改。测试完成之后也需要merge到master
和develop
分支上。
2. 加入组织或者协作者
打开设置页面——>Access/Collaborators——>Add People
添加协作者之后,协作者可以访问仓库
Git
Git是什么?
官方解释是这样的:
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. Git (git-scm.com)
翻译过来就是:他是一个分布式版本控制系统,作用是快速的管理大小型项目代码。他可以通过指令直接对代码进行上传、拉取等操作
Git的作用以及状态
状态:
- 已修改:modified(修改了文件但是没有将其提交到缓存区)
- 已暂存:staged(对当前版本做标记,存在下次提交列表中)
- 已提交:committed(字面意思)
用图示表示如下:
Git 工作区、暂存区和版本库 | 菜鸟教程 (runoob.com)
Git的实际运用
git的基础指令
git add [filename]:添加指定文件到缓存区
git add .:添加当前目录中所有文件到缓存区
git commit -m '[our message]:提交代码到本地仓库
git commit -a:直接跳过暂存区,从工作区–>Git仓库。此时文件处于未修改的状态(最终状态)
git remote add [远程仓库名称] [远程仓库地址]:添加并绑定远程仓库
git push -u [远程仓库名称] [当前提交的分支]:[远程仓库分支]:将代码提交到远程仓库。
-u:表示默认指定主机,后面可以不需要添加任何参数使用git push
-all将本地所有分支推送到远程主机
git push [远程仓库名称] --delete [远程分支名称]
git merge [当前分支]:将当前选中的分支合并到当前分支。
--no-ff:保留信息的合并
例如:当前分支是master,存在分支dev,那么git merge dev:将dev分支合并到master分支
git status -s:精简方式展现文件状态
git status –short:精简方式
git checkout -b [本地分支名称] [远程仓库名称]/[远程仓库分支名称]:从远程仓库中把对应的远程分支下载到本地,并把下载的本地分支进行重命名
实际问题
这里存在:
- 本地分支:
master
,dev
- 远程分支:
master
- 远程仓库名称:
origin
场景一:没有更新远程仓库代码将代码保持最新,导致本地代码与远程代码不同步,推送失败
假如当前存在用户B修改了代码并且提交到了这个仓库当中
此时用户A也在本地更新了代码版本2.0,但是没有拉取远程仓库最新代码的时候,推送会出现错误
解决方法:本地拉取最新的代码,再次推送
情况1:两者修改内容相同
如果两者情况相同,那么选择删除一方的代码,再重新合并
情况2:当前两者修改的内容不同
可以保留一方的代码,或者两者代码同时保留,保留后再次提交更新远程仓库
方案一:直接采用git pull命令解决
# 拉取origin/master,并合并到本地的master中
git pull origin master
# 提交
git commit -m '[提示信息]'
# 推送至远程仓库
git push origin
===============================
方案二:采用git fetch + git merge
# 先获取远程分支代码到本地
git fetch orgin master
# 选中分支合并到当前分支master
# git merge origin/master
# 保留双方更改或者选择一方保留
# 提交推送
git commit -m 'message'
git push origin master
关于pull和fetch之间的区别,大家可以看看这篇文章
场景二:
遇到后再补充
笔者第一次写技术类型的文章,若有错误,请指点,谢谢!