文章目录
Git概述
介绍:
- git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目
- git易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存区域,和多个工作流分支等特性。其性能优于Subversion\CVS\Perforce和ClearCase等版本控制工具。
什么是版本控制?
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。
个人开发过渡到团体协作
集中
分布
Git和代码托管中心
代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。
- 局域网
- GitLab
- 互联网
- GitHub(外网)
- Gitee码云(国内网站)
Git安装
不能单独删除某个版本
Git常用命令
命令名称 | 作用 |
---|---|
git config --global user.name 用户名 | 设置用户签名 |
git config --global user.email 邮箱 | 设置用户签名 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git commit -m “日志信息” 文件名 | 提交到本地库 |
git reflog | 查看历史记录 |
git reset --hard 版本号 | 版本穿梭 |
说明:
签名的作用是区分不同操作者身份,用户的签名信息在每个版本的提交信息中能够看的,以此来确认本次提交是谁做的。
Git首次安装必须设置一下用户签名,否则无法提交代码!
注意:
这里设置用户签名和将来登录GitHub(或其它代码托管平台)的账号没有任何关系。
初始化本地库
git init
目录下会出现隐藏目录.git
查看本地库状态
git status
查看状态
Untracked files:未监控文件
nothing added to commit but untracked files present (use “git add” to track)
文件显示为红色
添加暂存区
git add xxx文件名
warning:提示自动转换了换行符
文件显示为绿色,表示git已经追踪到该文件
git rm --cached hello.txt
删除暂存区的文件
工作区的未被删除。
提交本地库
将暂存区的文件提交到本地库
git commit -m "日志信息" 文件名
示例:
git commit -m "first commit" hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory
[master (root-commit) 172c198] first commit
1 file changed, 10 insertions(+)
create mode 100644 hello.txt
172c198
表示版本号
git reflog
172c198 (HEAD -> master) HEAD@{0}: commit (initial): first commit
查看引用日志信息
git log
commit 172c198f5670fa0c508212560e4867c203adc6f4 (HEAD -> master)
Author: ccode <858144715@qq.com>
Date: Mon Sep 6 15:02:09 2021 +0800
first commit
modified: hello.txt
说明文件被修改了
再次修改并提交
可以看到两个修改信息
$ git reflog
8bd7edf (HEAD -> master) HEAD@{0}: commit: second commit
172c198 HEAD@{1}: commit (initial): first commit
历史版本
查看历史版本
基本语法:
git reflog 查看版本信息
git log
查看版本详细信息
版本穿梭
git reset --hard 172c198
会多生成一个指向我们穿梭的版本。
.git\refs\heads内的master文件指针改变
Git切换版本,底层其实是移动的HEAD指针
Git分支操作
什么是分支?
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。
使用分支意味着程序员可以把自己的工作从主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。
对初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)
分支的好处
同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某个分支开发失败,不会对其它分支有任何影响。失败的分支删除重新开始即可。
分支的操作
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
查看分支
git branch -v
创建分支
示例:
git branch hot-fix
修改完文件记得git add 和 git commit
合并分支
git merge 分支名
同一行两个版本内容不一致,会发生冲突。
(master | MERGING)表示还未合并成功,正在合并
手动合并
<<<<<<< HEAD
表示当前分支
当前分支的代码
=======
要合并的代码
>>>>>>> hot-fix
手动修改代码完成
人为修改之后
添加到暂存区
git add hello.txt
执行提交(注意:此时使用git commit命令时不能带文件名)
git commit -m "merge test"
master、hot-fix其实都是指向具体版本记录的指针。当前所在分支,其实是由HEAD决定的,所以创建分支的本质就是多创建一个指针。
HEAD如果指向master,那么我们现在就在master分支上。
HEAD如果指向hotfix,那么我们现在就在hotfix分支上。
所以切换分支的本质就是移动HEAD指针。
Git团队协作机制
团队内协作与跨团队协作fork
GitHub操作
Repository name一般与本地库名称相同
创建远程库即可
可以看到两种不同协议的链接
创建远程仓库别名
git remote -v
查看当前所有远程地址别名
git remote add
别名 远程地址
别名一般与库名相同
推送本地库到远程库
git push 别名 分支
别名直接写远程地址也可
示例:
git push git-demo master
拉取远程库到本地库
git pull 别名 分支
别名直接写远程地址也可
克隆远程仓库到本地
git clone 链接地址
克隆代码不需要登录!
小结:
clone会做以下操作:
- 拉取代码
- 初始化本地仓库
- 创建别名,默认
origin
团队内协作
github打开库
点击Settings–>
Manage access
–>Invite a collaborator
复制Pending Invite发送给要协作的团队成员
成员获得后,直接复制浏览器打开,选择Accept invitation
此时即可推送
跨团队协作
复制链接,打开项目,点击右上角Fork可以叉到自己项目上
forked from xxxx/xxx
可以克隆本地库等等操作
也可以在线编辑!
编辑完,选择Pull requests
New pull request—>
Create pull request
—>
填写commit信息,可以留言
原作者可以看到请求。
也可以给提交者留言。
原作者可以选择Merge pull request
还需要再次确定: Confirm merge
SSH协议免密登录
选择C盘–>用户–>你的账户:C:\Users\Administrator
在这里选择Git Bash here
命令
ssh-keygen -t rsa -C 1506833696@qq.com
后面是github邮箱
连续3次默认enter即可
此时目录下生成了.ssh文件夹
我们命令进入
cd .ssh
ll命令可查看当前目录里的文件
我们命令
cat id_rsa.pub
即可看的公钥,复制公钥
打开github
头像—>Setting
选择SSH and GPG keys
–>New SSH keys
Title都可
Key将公钥粘贴在此,并添加!
复制网站上SSH链接
git pull SSH链接 分支名
输入yes保存
即可拉取
git push SSH链接 分支名
IDEA集成Git
配置Git忽略文件
为什么忽略?
与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽IDE工具之间的差异
怎么忽略?
创建忽略规则文件xxx.ignore(前缀名随便起,建议是git.ignore)
理论上放在哪里都可以,建议放在用户家目录下
git.ignore
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
hs_err_pid*
.classpath
.project
.settings
target
.idea
*.iml
在.gitconfig文件中引用忽略配置文件(此文件在Windows的家目录中)
.gitconfig
[user]
name = ccode
email = 858144715@qq.com
[core]
excludesfile = C:/Users/xxx/git.ignore
注意目录要使用"正斜线(/)",不用使用"反斜线(\)"
定位Git程序
IDEA—>Settings—>Version Control
—>Git—>配置安装目录—>Test出现版本信息即可使用!!
初始化&添加&提交
VSC–>Import into Version Control—>Create Git Repository
创建git的本地库—>OK
此时右键文件发现Git选项—>Add
此时就已经加入暂存区!
此时新建包,文件提示是否Add到暂存区
也可以右击项目,添加到暂存区。
提示是否强制提交,选择取消,被忽略的文件就不会被提交到暂存区。
提交到本地库
右击项目—>Commit Directory
填写提交信息。
点击commit
切换版本
也可以直接提交本地库
在IDEA的左下角,点击Version Control
Log选项里我们可以查看历史版本。
选择要切换的版本,右击Checkout Revision ‘xxx’
黄色HEAD指针就会指向切换的版本
master分支指向最新版本
指向master分支
创建分支&切换分支
右键项目名称,
选择Git–>Repository–>Branches
—>New Branch
或者
IDEA右下角–>点击显示当前分支的内容—>Git Branches也可以
勾选Checkout branch就会创建并切换过去。
切换分支—>
直接IDEA右下角,选择要切换的分支Checkout
合并分支
正常合并
IDEA右下角选择要合并的分支,选择Merge into Current
冲突合并
同上操作,此时弹窗Conflicts
冲突
选择右侧Merge选项
手动合并。中间是没有冲突的代码,左右分别是两个不同分支冲突的代码
X
表示不要这个代码
>>
表示合并到正常代码
此时改掉了冲突
合并成功!
IDEA集成GitHub
设置GitHub账号
Settings–>Version Cotrol
—>GitHub
没有的话安装插件即可
点击加号—>
输入账号密码(不建议)
或者
登录框右上角 Use Token口令
GitHub网页,头像—>Settings
—>Developer settings
—>Personal access tokens
—>
设置权限!
一刷新就会消失!!!
分享项目到GitHub
VCS—>
Import into Version Control
—> Share Project on GitHub
选择Repository name
Remote: 别名
直接Share
推送代码到远程库
提交本地库
1、
右击项目—>
选择Git—>
Repository—>
选择Push
2、
VCS–>
Git—>
Push
默认选中了别名:
建议SSH协议
复制SSH链接
点击别名:
选择Define Remote
Name:别名
URL:链接
—>Push
注意:
push是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致。push的操作是会被拒绝的。
也就是说,要想push成功,一定要保证本地库的版本要比远程库的版本高!
因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地代码的区别!如果本地的代码版本已经落后,切记要先pull拉取一下远程库的代码,将本地代码更新到最新以后,然后再修改,提交,推送!
拉取远程库代码合并本地库
VCS–>
Git—>
Pull
选择Remote。
勾选如果需要合并,合并的分支。
选择Pull
注意:
pull是拉取远端仓库代码到本地,如果远程库代码和本地库代码不一致,会自动合并,如果自动合并失败,还会涉及到手动解决冲突的问题。
clone克隆远程库到本地
打开IDEA欢迎页面,有一个Get from Version Control
点击,可以选择Git
URL
目录
就会下载
国内代码托管中心-码云
注册登录等等
与GitHub类似!
码云建议使用HTTPS协议
IDEA集成码云
IDEA默认不带码云插件,安装码云插件!
与GitHub操作相似
码云复制GitHub项目
新建仓库—>
选择导入已有仓库!
直接把HTTPS协议的链接复制粘贴直接创建!
可以点击项目名称后的刷新图标!
就可以强制刷新同步GitHub项目
GitLab
GitLab是由GitLabInc.开发,使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
GitLab由乌克兰程序员DmitriyZaporozhets和ValerySizov开发,它使用Ruby语言写成。后来,一些部分用Go语言重写。截止2018年5月,该公司约有290名团队成员,以及2000多名开源贡献者。GitLab被IBM,Sony,JülichResearchCenter,NASA,Alibaba,Invincea,O’ReillyMedia,Leibniz-Rechenzentrum(LRZ),CERN,SpaceX等组织使用。
官网:
https://about.gitlab.com/