1、Git快速入门
Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。 Git易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion、CVS、Perforce和ClearCase等版本控制工具。
svn在本地只能保留一个版本,服务器如果损坏了,那么以往版本就不可修复,而分布式版本控制是在本地的,包含历史记录,更加安全
2.分布式版本控制工具
Git、Mercurial、Bazaar、Darcs……
像 Git这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。
分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:
1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
3.Git工作机制
4.Git和代码托管中心
5.Git安装
官网地址: https://git-scm.com/
查看GNU协议,可以直接点击下一步。
选择Git安装位置,要求是非中文并且没有空格的目录,然后下一步。
Git选项配置,推荐默认设置,然后下一步。
Git安装目录名,不用修改,直接点击下一步。
Git的默认编辑器,建议使用默认的Vim编辑器,然后点击下一步。
默认分支名设置,选择让Git决定,分支名默认为master,下一步。
修改Git的环境变量,选第一个,不修改环境变量,只在Git Bash里使用Git。
选择后台客户端连接协议,选默认值OpenSSL,然后下一步。
配置Git文件的行末换行符,Windows使用CRLF,Linux使用LF,选择第一个自动转换,然后继续下一步。
选择Git终端类型,选择默认的Git Bash终端,然后继续下一步。
选择Git pull合并的模式,选择默认,然后下一步。
选择Git的凭据管理器,选择默认的跨平台的凭据管理器,然后下一步。
其他配置,选择默认设置,然后下一步。
实验室功能,技术还不成熟,有已知的bug,不要勾选,然后点击右下角的Install按钮,开始安装Git。
点击Finsh按钮,Git安装成功!
右键任意位置,在右键菜单里选择Git Bash Here即可打开Git Bash命令行终端。
在Git Bash终端里输入git --version查看git版本,如图所示,说明Git安装成功。
6.设置用户签名
1)基本语法
git config --global user.name 用户名
git config --global user.email 邮箱
说明:
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git首次安装必须设置一下用户签名,否则无法提交代码。
※注意:这里设置用户签名和将来登录GitHub(或其他代码托管中心)的账号没有任何关系。
7.初始化本地库
1)基本语法
git init
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 $ git init Initialized empty Git repository in D:/Git-Space/SH0720/.git/ Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master) $ ll -a 查看隐藏文件 total 4 drwxr-xr-x 1 Layne 197609 0 11月 25 14:07 ./ drwxr-xr-x 1 Layne 197609 0 11月 25 14:07 ../ drwxr-xr-x 1 Layne 197609 0 11月 25 14:07 .git/ (.git 初始化的效果,生成git)
cd .git/ 进入.git里面
8.查看本地库状态
首次查看(工作区没有任何文件)
新增文件(ss.txt)
git status
yy复制之前需要按下esc p粘贴 tail -n 1 sun.txt 查看末尾第一行信息
再次查看(检测到未追踪的文件)
9.添加暂存区
将工作区的文件添加到暂存区
1)基本语法
git add 文件名
查看状态(检测到暂存区有新文件)
10.提交本地库
将暂存区的文件提交到本地库
1)基本语法
git commit -m "日志信息" 文件名
查看状态(没有文件需要提交)
查看引用信息
git reflog git log
11.修改文件(ss.txt)
查看状态(检测到工作区有文件被修改)
将修改的文件再次添加暂存区
提交本地库
查看状态(工作区的修改添加到了暂存区)
12.历史版本
查看历史版本
1)基本语法
git reflog 查看版本信息 git log 查看版本详细信息
版本穿梭
1)基本语法
git reset --hard 版本号
发现文件已经回到第一个版本
Git切换版本,底层其实是移动的HEAD指针,具体原理如下图所示。
Git分支操作
什么是分支
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)
分支的好处
同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
分支的操作
查看当前分支
git branch -v 查看当前分支
创建分支
1)基本语法
git branch 分支名
修改分支
切换分支
1)基本语法
git checkout 分支名
合并分支
1)基本语法
git merge 分支名
产生冲突
冲突产生的原因:
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git无法替我们决定使用哪一个。必须人为决定新代码内容。
查看状态(检测到有文件有两处修改)
解决冲突
1)编辑有冲突的文件,删除特殊符号,决定要使用的内容
特殊符号:<<<<<<< HEAD 当前分支的代码 ======= 合并过来的代码 >>>>>>> hot-fix
2)添加到暂存区
master、hot-fix其实都是指向具体版本记录的指针。当前所在的分支,其实是由HEAD决定的。所以创建分支的本质就是多创建一个指针。
HEAD如果指向master,那么我们现在就在master分支上。
HEAD如果执行hotfix,那么我们现在就在hotfix分支上。
所以切换分支的本质就是移动HEAD指针。
13. Git团队协作机制
团队内协作
push 推送
fork叉子
跨团队协作
远程仓库操作
创建远程仓库别名
1)基本语法
git remote -v 查看当前所有远程地址别名 git remote add 别名 远程地址
推送本地分支到远程仓库
拉取远程库到本地
修改代码
git pull git-demo master
克隆远程仓库到本地
1)基本语法
git clone 远程地址
邀请加入团队
1)选择邀请合作者
填入想要合作的人
复制地址并通过微信钉钉等方式发送给该用户,复制内容如下:https://github.com/atguiguyueyue/git-shTest/invitations
4)在atguigulinghuchong这个账号中的地址栏复制收到邀请的链接,点击接受邀请。
5)成功之后可以在atguigulinghuchong这个账号上看到git-Test的远程仓库。
6)令狐冲可以修改内容并push到远程仓库。
跨团队协作
1)将远程仓库的地址复制发给邀请跨团队协作的人,比如东方不败。
2)在东方不败的GitHub账号里的地址栏复制收到的链接,然后点击Fork将项目叉到自己的本地仓库。
叉入中…
叉成功后可以看到当前仓库信息。
3)东方不败就可以在线编辑叉取过来的文件。
4)编辑完毕后,填写描述信息并点击左下角绿色按钮提交。
5)接下来点击上方的Pull请求,并创建一个新的请求。
6)回到岳岳GitHub账号可以看到有一个Pull request请求。
进入到聊天室,可以讨论代码相关内容。
SH免密登录
我们可以看到远程仓库中还有一个SSH的地址,因此我们也可以使用SSH进行访问。
具体操作如下:
--进入当前用户的家目录 Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master) $ cd --删除.ssh目录 Layne@LAPTOP-Layne MINGW64 ~ $ rm -rvf .ssh removed '.ssh/known_hosts' removed directory '.ssh' --运行命令生成.ssh秘钥目录[注意:这里-C这个参数是大写的C] Layne@LAPTOP-Layne MINGW64 ~ $ ssh-keygen -t rsa -C atguiguyueyue@aliyun.com Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/Layne/.ssh/id_rsa): Created directory '/c/Users/Layne/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /c/Users/Layne/.ssh/id_rsa. Your public key has been saved in /c/Users/Layne/.ssh/id_rsa.pub. The key fingerprint is: SHA256:7CPfRLITKcYDhaqpEDeok7Atvwh2reRmpxxOC6dkY44 atguiguyueyue@aliyun.com The key's randomart image is: +---[RSA 2048]----+ | .. | | .. | | . .. | |+ + o . . | |oO . = S . | |X . .. + = | |+@ * .. = . | |X.&o+. o = | |Eo+Oo . . | +----[SHA256]-----+ --进入.ssh目录查看文件列表 Layne@LAPTOP-Layne MINGW64 ~ $ cd .ssh Layne@LAPTOP-Layne MINGW64 ~/.ssh $ ll -a total 21 drwxr-xr-x 1 Layne 197609 0 11月 25 19:27 ./ drwxr-xr-x 1 Layne 197609 0 11月 25 19:27 ../ -rw-r--r-- 1 Layne 197609 1679 11月 25 19:27 id_rsa -rw-r--r-- 1 Layne 197609 406 11月 25 19:27 id_rsa.pub --查看id_rsa.pub文件内容 Layne@LAPTOP-Layne MINGW64 ~/.ssh $ cat id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDRXRsk9Ohtg1AXLltsuNRAGBsx3ypE1O1Rkdzpml1woa6y6G62lZri3XtCH0F7GQvnMvQtPISJFXXWo+jFHZmqYQa/6kOIMv2sszcoj2QtwllGXTPn/4T2h/cHjSHfc+ks8OYP7OWOOefpOCbYY/7DWYrl89k7nQlfd+A1FV/vQmcsa1LP5ihqjpjms2CoUUen8kZHbjwHBAHQHWRE+Vc371MG/dwINvCi8n7ibI86o2k0dW0+8SL+svPV/Y0G9m+RAqgec8b9U6DcSSAMH5uq4UWfnAcUNagb/aJQLytrH0pLa8nMv3XdSGNNoAGBFeW2+K81XrmkP27FrLI6lDef atguiguyueyue@aliyun.com
复制id_rsa.pub文件内容,登录GitHub,点击用户头像→Settings→SSH and GPG keys