# 官方提供@yunTaoScripts GIT 与 GITHUB 快速入门 🔥🔥

# GIT 概述

视频链接 (opens new window) ⚾️

  • Git 是一个免费开源分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。
  • Git 易于学习,占地面积小,性能极快。
  • 它具有廉价的本地库,方便的暂存区域和多个工作 流分支等特性。
  • 其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具。

# 何为版本控制

  • 版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
  • 版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本, 方便版本切换。

# 为什么需要版本控制

个人开发过渡到团队协作。单人开发只需要复制版本就行,保留一个分支就能满足需要。但是多人开发则需要一个统一管理的系统,多人同时协作。

# 版本控制工具→集中式🆚分布式

  • 集中式版本控制工具 CVS、SVN(Subversion)、VSS......

  集中化的版本控制系统诸如 CVS、SVN 等,都有一个单一的集中管理的服务器,保存 所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或 者提交更新。多年以来,这已成为版本控制系统的标准做法。

优点

  1. 每个人都可以在一定程度上看到项目中的其他人正在做些什么。
  2. 管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。

缺点

  1. 中央服务器的单点故障。如果服务器宕 机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
  • 分布式版本控制工具 Git、Mercurial、Bazaar、Darcs......

  像 Git 这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码 仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用 其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次 对整个文件仓库的完整备份。 分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:

优点

  1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
  2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

# Git工作机制

工作区git add暂存区git commit本地库

工作区 暂存区 本地库
代码存放位置 临时添加代码的地方 代码提交的地方

# 代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。🤨

  • 局域网
    • GitLab
  • 互联网
    • Gitee 码云 (国内)
    • GitHub 码云 (国外)

# Git 安装

# 安装方式

Git 官网 (opens new window)🏓
这个没啥好讲的,装就完了,基本都能用。🫠

提示

建议先在电脑上跑下 git --version,mac电脑大概率已经装了,就不用装了。

# 单分支下 Git 常用命令

# 设置用户签名

  • 基本语法
git config --global user.name 用户名
git config --global user.email 邮箱
git config --global init.defaultBranch <name> //设置默认主分支 名称
  • 查看配置
cd
cat .gitconfig 

说明

签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git首次安装必须设置一下用户签名,否则无法提交代码。 ※注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系。

# 初始化本地库

  • 进入项目目录执行命令 git init
  • 这步执行完会生成.git文件夹,所有git相关的配置信息都在该目录下。

# 查看本地库状态

git status

  • 通过该命令可以查看分支状态,提交状态。

# 添加暂存区

git add 文件名

  • 通过该命令实现将工作区文件添加到暂存区。

# 提交本地库

git commit -m "提示信息" 文件名

# 查看历史版本

git reflog 查看版本信息 
git log    查看版本详细信息

# 版本穿梭

git reset --hard 版本号

# Git 分支操作

  • 什么是分支(分支底层其实也是指针的引用)

  在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独 分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时 候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是 一个单独的副本。

  • 分支的好处

  同时并行推进多个功能开发,提高开发效率。各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败 的分支删除重新开始即可。

# 查看分支

git branch -v

# 创建分支

git branch 分支名

# 切换分支

git checkout 分支名

  • 不存在分支 会直接创建 git checkout -b 分支名

# 合并分支

git merge 分支名

  • 我们立足于当前分支,将其他分支合并过来,但是可能存在,两个分支同时修改同一个文件的情况,此时就会导致代码冲突。

冲突产生的原因:

  1. 合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。
  2. Git 无法替我们决定使用哪一个。必须人为决定新代码内容。

# 解决冲突

  • 编辑有冲突的文件,删除特殊符号,决定要使用的内容特殊符号:
<<<<<<< HEAD 
当前分支的代码
======= 
合并过来的代码 
>>>>>>> hot-fix

# Git 团队协作

# 跨团队协助

  • 另一个团队协助开发本团队的场景
  1. 首先协助开发团队fork项目到本地,进行正常开发。
  2. 之后发送pull request 给原项目团队,由项目团队决定是否将代码merge到主分支。

# Github 操作

  • 全球最大的交友学习网站,技术宅男的天堂,新世界的大门,你还在等什么?

# 创建远程仓库

  • 注册登录Github,新建一个仓库,这没啥好说的。🤪

# 克隆远程仓库到本地

git clone 远程地址`

# 查看当前所有远程地址别名

git remote -v 

# 创建远程仓库别名

git remote add 别名 远程地址

# 获取远程仓库信息,但是不merge本地库

git fetch --all
git log origin/main  #查看 远程 仓库信息

# 拉取远程库内容:fetch+merge

  • 将远程仓库分支最新内容拉下来后与当前本地分支直接合并。
git pull 远程库地址别名 远程分支名

# 推送本地分支到远程仓库

git push 别名 分支

# SSH 免密登录

  • 我们可以看到远程仓库中还有一个 SSH 的地址,因此我们也可以使用 SSH 进行访问。
ssh-keygen -t rsa -C yuntao
  • 复制 id_rsa.pub 文件内容,登录 GitHub,点击用户头像→Settings→SSH and GPG keys

好处:

接下来再往远程仓库 push 东西的时候使用 SSH 连接就不需要登录了。

最后修改时间: 12/27/2022, 12:00:04 PM