关于实际开发当中Git、GitHub的基本使用以及常见问题

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

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

GitHub

GitHub是什么?

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

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

Github的基本使用

注册与登录

1. 首先进入GitHub官网(GitHub

image.png

2. 登录

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

3. 注册

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

创建仓库与密钥处理

由于GitHub拥有许多功能,这里只介绍以及说明本人实际开发中经常用到的功能。

在实际开发当中,一个大型项目往往需要多个版本不断地迭代更新,这个时候就需要用到GitHub帮助管理代码。我们每一个版本,都可以通过Git指令(下边会介绍到)将代码推送到GitHub仓库当中管理当前项目地代码,这时候GitHub仓库也就相当于远程仓库(Remote)

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.pngimage.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

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

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的基础指令

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

实际问题

这里存在:

  • 本地分支:masterdev
  • 远程分支:master
  • 远程仓库名称:origin

场景一:没有更新远程仓库代码将代码保持最新,导致本地代码与远程代码不同步,推送失败

image.png

假如当前存在用户B修改了代码并且提交到了这个仓库当中
image.png

此时用户A也在本地更新了代码版本2.0,但是没有拉取远程仓库最新代码的时候,推送会出现错误

image.png

image.png

解决方法:本地拉取最新的代码,再次推送

情况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

image.pngimage.png

关于pull和fetch之间的区别,大家可以看看这篇文章

详解git pull和git fetch的区别 – 知乎 (zhihu.com)

场景二:

遇到后再补充

笔者第一次写技术类型的文章,若有错误,请指点,谢谢!

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYXH15Wh' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片