作为程序员必会的Git教程

一、版本控制

定义:

版本控制(Revision control)工具,用于在开发工程中管理文件、目录等工程内容,保留修改历史,方便查看历史和提交记录,备份以便回滚以前版本。用途如下:

  • 实现跨区域多人协同开发
  • 追踪、记载文件的历史记录
  • 组织和保护源代码和文档
  • 统计工作量
  • 并行开发、提高开发效率

简单来说就是用于管理多人协同开发项目的技术。

常见的版本控制工具:

  • Git
  • SVN(Subversion)
  • CVS(Concurrent Versions System)

版本控制分类

  1. 本地版本控制

记录文件每次的更新,对每个版本做一个快照(snapshot),适合个人用

  1. 集中版本控制

所有版本数据都保存在服务器上,协同开发者从服务器上同步更新/上传自己的修改。
因为所有数据都保存在单一服务器上,有很大风险服务器会挂掉,丢失所有数据。代表产品:SVN、CVS、VSS

  1. 分布式版本控制

所有的版本信息都同步到本地的每个用户,每个人都拥有全部的代码(安全隐患),可以在本地查看所有版本历史,可以离线在本地提交,只需要在连接网络时push到相应的服务器或其他用户那里。
由于每个用户保存的都是所有版本数据, 因此只要由一个用户的设备就可以恢复所有数据,但增加了本机存储空间的占用。代表产品:Git

二、Git和SVN的区别

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
G北t是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送(push)给对方,就可以互相看到(pull) 对方的修改了。‘
Git是目前世界上最先进的分布式版本控制系统。

三、Git的历史

四、安装Git及配置环境

软件下载

git官网https://git-scm.com/ 下载Git对应操作系统的版本。
若官网下载太慢,可以使用淘宝镜像下载:http://npm.taobao.org/mirros/git-for-windows/

安装

无脑下一步即可,都默认

卸载

  1. 先检查环境变量,是否有Git\cmd,如有,删掉
  2. 控制面板->卸载程序

使用:

安装后有三个程序:Git Bash、Git GUI、Git CMD。在任意文件夹右键也会有选项(Git Bash、Git GUI)

  • Git Bash:Unix与Linux风格的命令行,使用最多,最推荐
  • Git CMD:Windows风格的命令行
  • Git GUI:图形界面的Git

五、常用的Linux命令

基本的Linux命令

  1. cd:改变目录(cd后写目录名)
  2. cd…:回到上一级目录(有两个点)
  3. pwd:显示当前目录的绝对路径
  4. ls:列出当前文件夹的所有文件(不同颜色代表不同文件类型)
  5. touch:创建文件(如touch index.js)
  6. rm:删除文件(remove)
  7. mkdir:创建目录(文件夹)
  8. rm -r:删除目录(文件夹)
  9. mv:移动目录(mv 文件名 目录名)
  10. reset:重新初始化终端/清屏
  11. clear:清屏
  12. history:查看历史输入的命令
  13. help:帮助
  14. exit:退出终端
  15. #:注释

六、Git必要配置

git配置

$ git config -l    # 查看配置
$ git config --system --list	# 查看系统config
$ git config --global --list	# 查看当前用户config(用户名、密码) 

git相关配置文件

  1. git\etc\gitconfig: Git安装目录下的gitconfig --system 系统级
  2. C:\Users"用户名".gitconfig 用于当前登录用户的配置 --global 全局

git设置

git config --global user.name "sjf"
git config --global user.email "sjf@163.com"

首次必须设置,否则提交代码会报错
仅用于区分不同操作者身份。
注:这是git层面的,与github账号无关

七、Git的工作原理

Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。再加上远程的git仓库(Remote),共有四个工作区域。工作流程如下:
image.png
Workspace:工作区,平时存放项目代码的地方(IDEA/Pycharm的项目目录)
Index / Stage:暂存区,是一个文件,保存即将提交到文件列表信息
Repository:仓库区(或本地仓库),安全存放数据的位置,包含所有提交的版本。Head指向最新版本
Remote:远程仓库,托管代码的服务器【Github、Gitee等】

工作流程:

  1. 在工作目录中添加、修改文件;
  2. 将需要进行版本管理的文件放入暂存区域;-> git add.
  3. 将暂存区域的文件提交到git仓库。-> git commit

八、Git项目创建及克隆

创建工作目录与常用指令


图中包含六个常用命令:pull、fetch/clone、checkout、add、commit、push
创建仓库有两种方法,一是创建全新的本地仓库,二是从远程仓库克隆

创建本地仓库

$ git init

在第一次拉代码/本地开发之前,必须先初始化,否则所有git指令都无法执行

克隆远程仓库

$ git clone url

二者的操作都需要在想要的文件夹,右键->git bash here

九、Git的基本操作命令

:::warning
文件有四种状态:
:::

  • Untracked:未跟踪。此文件在工作目录中,但未进入git库,不参与版本控制。可以通过git add将状态变为Staged;
  • Unmodify:未修改。文件已进入git库,且版本库的文件快照与文件夹中完全一致,修改后变为Modified;若使用git rm移出版本库,则成为Untracked文件
  • Modifed:已修改。仅修改,未进行其他操作,可以通过git add进入暂存Staged状态,或是使用git checkout放弃修改,返回Unmodify状态。注意,git checkout操作为从库中取出文件,覆盖当前修改
  • Staged:暂存状态。执行git commit则修改同步到库中,文件为Unmodify状态;若执行git reset HEAD filename,则取消暂存,文件为Modifed状态

:::warning
查看文件状态
:::

# 查看指定文件的状态
git status [filename]

# 查看所有文件状态
git status
可以查看在哪个branch、有哪些已commit、哪些待commit

红色代表该文件是Untracked状态,没有进行git add
绿色代表该文件是Unmodify状态,已add到stage,且未修改

:::warning
添加暂存区
:::

# 添加所有文件到暂存区,add后变为绿色
git add .
git add [filename]

# 删除暂存区stage的缓存(只删stage,工作区还在),删后又变为红色
git rm --cached [filename]

:::warning
提交本地库
:::

# 提交暂存区中内容到本地库
git commit -m	"message" [filename]	# -m 代表提交信息
若没有写message,也会强制让写,所以在指令就写好
执行后,会显示7位版本号(字母加数字)

# 查看日志信息行【粗略】(commit记录)
git reflog

# 查看日志【详细】(能看谁提交的)
git log

:::warning
版本穿梭【回退/前进】
:::

git reflog
# list所有版本,复制版本号

git reset --hard [version.number]
# 可以将版本回退到指定版本【执行时注意分支】。是以【指针】的方式指定版本,而不是复制多个文本

:::warning
Linux命令(git中通用)
:::

ll
# 显示当前目录文件

ll -a
# 显示当前目录所有文件,包括隐藏文件

vim filename.txt
# 可以新建文件并进入,进入之后可以进行编辑,编辑完成后,ESC后,输入“:wq",保存并退出

cat filename.txt
# 显示文件的内容

:::warning
忽略文件
:::
某些文件不需要纳入版本控制中,如数据库文件、临时文件、设计文件等。
在主目录下建立“.gitignore”文件,此文件有如下规则:

  1. 忽略文件夹中空行或以#号开始的行
  2. 可以使用Linux通配符
  3. 若名称前有感叹号(!),则表示例外规则,不被忽略
  4. 若名称最前是路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略
  5. 若名称最后是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件

十、码云的注册和使用

Github/Gitee,设置个人基本信息

十一、配置SSH公钥和创建远程仓库

  1. 设置本机绑定SSH公钥,实现免密登录
# 进入 C:\Users\Administrator\.ssh 目录
# 生成公钥
ssh-keygen -t rsa		# -t为加密算法关键字 rsa为加密算法名
  1. 将公钥信息public key添加到Github/Gitee账户中

将id_rsa.pub文件中的公钥复制过去,新增公钥

  1. 使用GitHub创建一个最近的仓库
  • Github->New Repository,设置各项属性,包括:私有/共有、ignore文件模板、生成readme等

十二、IDEA中集成的Git操作

  1. 新建项目,绑定git
  • 可以在VCS中设置git/svn等版本控制
  • 也可以将clone的代码复制到工作目录,.git文件夹会自动包含git信息,使得IDE识别版本管理
  1. 修改文件,使用IDEA操作git(点击/指令)
  • 添加到暂存区(git add .)
  • commit到本地库(git commit -m “messages”)
  • push到远程库(git push)

蓝色为修改、绿色为新增

  1. 提交测试

十三、Git分支说明

在Git中,branch是指一个代码分支。
一个代码库(repository)可以有多个分支,每个分支上的代码可以独立开发、测试、维护。
分支常用指令:

# 列出所有本地分支
git branch

# 列出所有远程分支
git branch -r

# 新建一个分支,但依然停留在当前分支
git branch [branch-name]

# 新建一个分支,并切换到该分支
git checkout -b [branch]

# 切换分支
git checkout [branch-name]

# 合并指定分支到当前分支
git merge [branch]

# 删除分支
git branch -d [branch-name]

# 删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]

# 将名为[branch-name]的分支推送到远程仓库[remote-name]
git push [remote-name] [branch-name]

# 从远程仓库[remote-name]拉取名为[branch-name]的分支到本地仓库
git pull [remote-name] [branch-name]

多个分支并行执行,可以避免代码冲突,即存在多个版本。

十四、Git后续操作

Git指南大全:https://gitee.com/all-about-git
设置Git Bash命令行的大小和字体:打开git bash here -> 鼠标右键 -> Options
字体大小在Text -> Font -> Select
窗口大小在Window -> Default size -> Columns and rows
或者,直接鼠标拉大命令框,Ctrl + 是放大字体,Ctrl - 是缩小字体
实用性操作

# 拉取远程仓库的代码到本地【首次】
git clone [codes.https]

# 拉取指定仓库的代码到本地,并自定义文件夹名称【拉取dev分支】
git clone -b [branch.name] [code.https] [local.filname]

上述两个分支都拉取完之后,打开IDE -> Open Project即可开始工作
=========================================================
# dev开发完,提交到dev分支
git c

实际使用时(拉取项目):
:::info

  1. 在存放项目的文件夹,右键 -> git bash here
  2. $ git clone [codes.https],拉取代码
  3. 用IDE open project,选中刚刚拉取的项目
  4. 切换到dev分支,进行开发
  5. 测试功能无误后,commit到本地库、push到远程库
    :::
  • 默认是master -> origin:master 开发前要注意切换分支
  • 每日工作前先pull最新的代码,再开始工作、

解决冲突:
两个人各自开发,但都修改了同一个文件demo.java,在向master提交时,需要进行MERGE合并。
:::info

  1. 首先$ git checkout master切换到master分支
  2. 然后$ git merge dev将所做修改合并到master
  3. 合并时Git会尝试合并dev的修改,但demo.java由于被另一个修改过,合并冲突,需要手动合并
  4. 手动选择覆盖的部分,进行合并,冲突解决
  5. 最后使用$ git push将修改推送到远程仓库
    :::

注:两个人冲突,只需要一个人MERGE,执行后:

  • 如果合并成功,Git会创建一个新的提交来表示合并结果,并计入历史;
  • 如果合并失败,需要手动解决冲突,然后合并成功,计入历史记录。

Win11右键菜单设置

  • 设置成win10:

Win+X -> 终端(管理员)->执行下方代码

reg.exe add “HKCU\Software\Classes\CLSID{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32” /f /ve

  • 还原为win11:

同上,执行下方代码:

reg.exe delete “HKCU\Software\Classes\CLSID{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32” /va /f

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值