有关github、git在个人和团队开发中的使用

1,730 阅读9分钟

大家好这里是Eric。今天写一篇文章记录下平时工作中在使用Git和GitHub遇到的问题,以免忘记。

在程序员实际开发过程中绕不过Git、GitHub这两样东西的。本文章是自己实际开发当中遇到的一些问题以及解决思路,在此做一个记录。文章简单介绍Git、GitHub以及在实际开发中如何配合实用,帮助自己管理代码以及团队协作。

GitHub

GitHub是什么?

GitHub是一个代码托管平台,你可以在平台上管理你的代码,保存你的代码。

  • 软件开源,编写软件对所有人开源
  • 方便团队协作:在团队开发过程中,GitHub(国内可以使用Gitee)可以帮助我们管理代码,查看提交人员,修改的模块等

Github的基本使用

注册与登录

1. 首先进入GitHub官网(GitHub

image.png

2. 登录

注册之后通过邮箱(用户名)和密码登录 image.png

3. 注册

输入邮箱注册,并且到邮箱内部验证 image.png

仓库创建与密钥处理

在实际开发当中,一个大型项目往往需要多个版本不断地迭代更新,我们每一个版本都可以通过Git指令将代码推送到GitHub仓库当中管理。

1. 创建仓库 image.png

1688460829916.jpg

注意点:

  • 项目命名:笔者习惯是大驼峰加上中、下划线,例如:Student_System或者Student-System
  • 项目描述:简单描述项目

2. 进入仓库

image.png

注意点

  • 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端口,需要用户名和密码授权(每次都要登录),比较快,属于匿名访问适合开源项目。

3. 配置ssh-key

打开首页——>右上角头像打开设置——>找到SSH and GPS Keys——>打开git bash——>查看当前密钥——>复制到当前页面中添加

如果没有SSH Key,那么就生成一下,相关指令

# 进入ssh目录
cd ~/.ssh/

# 查看文件列表
ls

# 查看密钥
cat id_rsa.pub

# 生成密钥
# 这里可以不断回车,然后再回到第一步查看密钥
ssh-keygen -t rsa -C "邮箱地址"
image.png image.png

个人开发与团队协作

个人开发

当仓库创建完成后,此时远程仓库Remote已经搭建好了,我们就需要将本地的代码推送,这里采用juejin.html文件进行演示。

  1. 先进行初始化,添加git仓库:git init,当前目录会创建.git文件夹
  2. 在文件内修改代码,并且通过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>
  1. 查看当前项目当前状态:git status。到这里会发现git提示“要提交的修改”已经存在当前添加进去的文件了。

  2. 提交代码到本地仓库:git commit -m 'this is local modified-v1.0' image.png

  3. 添加远程仓库:git remote add origin git@github.com:用户名/juejin.git。这里远程仓库名称:origin。

  4. 将代码进行推送:git push -u origin master。origin:远程仓库名(远程主机名) master:当本地分支名和远程分支名一致时,可以简写。这个命令是将本地的分支推送到origin主机的master分支上,与git push -u origin master:master一致 image.png

  5. 到这个时候已经完成了一次代码的推送,可以到GitHub上刷新查看 image.png

团队协作

1. 分支问题

在团队协作中会出现许多情况,由于一个仓库是由多个人进行维护、开发的,那么就需要规定好各种二氧的分支。笔者在团队开发时一般会以当前分支作为默认标准:

  • master主分支。经过测试没有bug可以部署生产环境的分支,只能由releasehtfix分支合并。
  • develop开发的分支。平行于master分支。功能模块开发交给feature分支,测试给release合并。
    • 例如:现在需要开发一个新的功能login,这时候需要从develop分支上创建检出feature分支fb-login,在功能完成之后merge到develop分支上。(这里可以使用git hooks钩子,这里后面补充解释)。
  • feature功能模块开发分支。在团队开发中每个人都需要维护一个自己的feature分支,并进行开发工作,开发完成之后会将此分支merge到develop分支上。一般用于开发新功能和项目维护。创建分支名称一般是:feature/login_module或者feature-login_module
    • 例如:小王小明分别开发login和register功能,那么就需要在主分支上检出,两个功能开发完成之后合并到develop
  • hotfix热修复分支。由master分支检出,进行线上版本的bug修复,修复完成之后需要merge回developmaster分支,之后可以删除,属于临时分支。
  • fix:补丁分支。用于检修develop分支的bug,修复完成后需合并回develop分支。
  • relase发布分支。从develop分支检出,用于发布前的测试,可以进行简单的bug修复。bug复杂的时候需要merge回develop分支进行修改。测试完成之后也需要merge到masterdevelop分支上。
image.png

2. 加入组织或者协作者

打开设置页面——>Access/Collaborators——>Add People

添加协作者之后,协作者可以访问仓库

团队开发协作流程(具体情况就公司规定执行,这里只是大概流程)

从上面的团队协作当中已经说明的非常的清楚了。在团队开发当中我们一般不会在develop和master两个分支上进行开发。

这里我通过画图进行一个简单的示范

git流程.png

流程如下:

  1. 项目master分支中创建一个新的分支叫develop
  2. 当有新功能开发时,从develop分支创建一个新的功能分支,也就是前面提到的feature,例如假设公司中有AB员工:
    • A员工开发一个新的功能叫create-form,那么现在他创建了一个新的功能分支create-form进行开发
    • B员工开发一个新的功能叫create-page,那么现在他创建了一个新的功能分支create-form进行开发
  3. 此时B员工先开发完成,所以他先提交:
    • 先拉取develop分支,获得最新状态,然后以此创建临时分支temp1,然后将自己开发的代码合并到这个临时分支temp1当中去,并且解决冲突
    • 冲突解决完成后将临时分支temp1再合并到develop分支中去(这个过程中还是建议再拉取,因为期间也有可能被提交了新的内容,也可能会面临同时提交的情况
  4. 而后,A员工也开发完成了,由于B员工已经成功的将新功能添加到了develop分支中去,所以此时develop分支已经包含了B员工开发的新代码:
    • A员工也是重复上述工作,先拉取develop分支保证状态最新,然后创建临时分支,之后合并到临时分支
    • 冲突解决完成后将临时分支合并到develop分支中
  5. 合并完成后临时分支可以删除,然后以此重复步骤,合并到master分支

注意事项:

  1. 在实际开发当中不是开发完成后就立马将其合并到develop的这个需要注意,而需要提交到对应的分支或者等待测试人员测试,确认代码无误后再合并
  2. 创建临时分支就是避免之间在develop分支上合并以及解决冲突,避免无法处理的冲突导致deveop分支内的代码混乱
  3. 不要在developmaster上直接进行开发!!!!
  4. 记得git pull!!!记得git pull!!!记得git pull!!!
  5. 如果出现无法解决的冲突,则需要商量看看最后需要保存哪一版本的代码,然后再重新合并
  6. 在合并的时候不要选择变基,而是选择合并merge

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(字面意思)

用图示表示如下:

image.png

Git 工作区、暂存区和版本库 | 菜鸟教程 (runoob.com) image.png

Git的基础指令

git add [filename]:添加指定文件到缓存区

git add .:添加当前目录中所有文件到缓存区

git commit -m '[your 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 [本地分支名称] [远程仓库名称]/[远程仓库分支名称]:从远程仓库中把对应的远程分支下载到本地,并把下载的本地分支进行重命名

推荐工具