什么是Git
- Git是免费的
- 开源的分布式版本控制工具
什么是版本控制
版本控制是一种记录一个或若干个文件内容变化,以便来查阅特定版本修订情况的系统。
版本控制系统的分类
1.集中化版本控制系统
集中化版本控制系统诸如:CVS,SVN,Perforce等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器上,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法,这种做法带来了很多好处,例如,每个人都可以在一定程度上看到项目中其他人正在做什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统;要远比在各个客户端上维护本地数据库来得轻松容易。
事分两面,有好有坏,这么做最显而易见的缺点就是单点故障。如果装了版本控制系统的服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
2.分布式版本控制系统
由于上面集中化版本控制系统的那些缺点,于是分布式版本控制系统面世了。
在这类系统中,像Git,BitKeeper等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。
Git的安装
1.Git官网
Git官网——https://git-scm.com/
2.安装过程
没有列举出来的步骤默认即可
Git本地结构
工作区
写代码的地方
暂存区
打算提交还没有提交的代码
本地库
最终提交到本地库,存储了历史版本信息
代码托管平台
代码托管平台的任务就是帮助我们维护远程库,所谓的远程库就是保存在远端的仓库,常见的代码托管平台有的GitHub(国外的),Gitee(国内的),这些是外网的局域网的是GitLab
,GitLab需要自己搭建,GitHub与Gitee是现成的代码托管中心。
GitHub官网——https://github.com/
Gitee官网——https://github.com/
本地库与远程库的交互方式
团队内部协作
跨团队协作
常用命令
#设置全局用户名
git config --global user.name "shanguoyu"
#设置全局邮箱
git config --global user.email "1259591265@qq.com"
#将当前目录初始化为本地库
git init
#将文件或目录添加到暂存区
git add [目录/文件名]
#将文件或目录提交到本地库
git commit -m "此次提交信息" "提交文件名"
#查看工作区和暂存区的状态
git status
#查看commit记录,数据过多有分页效果,下一页:空格,上一页:b,--pretty=oneline的作用是在一行显示不加也可以
git [--pretty=oneline/--oneline] log
#查看commit记录,效果与git --oneline log类似,只不过显示了回退需要几步
git reflog
#回退或前进commit,--hard 参数可以让本地库指针移动的同时,重置暂存区,重置工作区,--mixed是本地库移动,暂存区移动但是工作区不移动,一般使用hard不适用mixed,soft是本地库动但是暂存区与工作区都不动用的也少一般参数都是hard
git reset --hard --mixed --soft [索引,可以用git reflog命令查看前面那段黄色的就是]
#查看工作区与暂存区的差异
git diff [文件名,直接不写就是比对所有文件]
#比较暂存区与本地库的差异
git diff [历史版本索引] [文件名]
#查看分支
git branch -v
#新建一个分支,但依然停留在当前分支
git branch [branch-name]
#切换分支
git checkout [branch-name]
#新建一个分支,并切换到该分支
git checkout -b [branch-name]
#克隆远程仓库
git clone [url]
#删除分支
git branch -d [branch-name]
#合并指定分支到当前分支
git merge [branch-name]
#列出所有远程分支
git branch -r
#拉取远程库代码,等于 fetch+merge
#--allow-unrelated-histories参数是可选的在没写本地分支名字的时候会自动合并到当前分支,并告诉git允许不想管历史合并
git pull [远程库地址] [分支名字]:[本地分支名] --allow-unrelated-histories
#推送代码到远程库
git push [远程库地址] [分支名字]
#因为远程库的HTTPS地址较长所以可以使用别名的方式访问,这个命令是查看别名
git remote -v
#添加别名
git remote add [别名] [远程库HTTPS地址]
#拉取代码到本地新分支中,配合合并分支使用
git fetch [url] [远程分支名称]:[本地分支名称,不需要存在会自动创建]
#远程仓库强制覆盖本地仓库命令
git fetch --all && git reset --hard origin/master && git pull
#强制推送到远程仓库,且覆盖远程代码库
git push -f --set-upstream origin master:master
#本地关联远程分支,其中origin/remote_branch是你本地分支对应的远程分支;your_branch是你当前的本地分支。
git branch --set-upstream-to=origin/remote_branch your_branch
分支
什么是分支
在版本控制过程中,使用多条线同时推进多个任务。这里面说的多条线,就是多个分支。
通过一张图展示分支
分支的好处
同时多个分支可以并行开发,互相不耽误,互相不影响,提高开发效率
如果有一个分支功能开发失败,直接删除分支即可,不会对其他分支产生影响。
SSH免密登录(Win10)
为什么需要SSH免密登录
因为在push的时候每次都需要输入账号和密码很麻烦!
参考链接
https://gitee.com/help/categories/38
码云设置流程
- 进入git bash here
- 执行命令——cd ~
- 执行命令后三次回车确认——ssh-keygen -t rsa -C “xxx@xxx.com”
- 执行命令——cd ~/.ssh
- 执行命令——cat id_rsa.pub
- 复制上个命令展现出来的内容
- 进入自己的码云
- 进入设置
- 进入安全设置下面的SSH公钥
10.粘贴内容到公钥里面点击确定 - 在push的时候使用ssh地址即可
IDEA整合Gitee
参考地址
https://gitee.com/help/articles/4117#article-header2
- 设置git.exe地址
- 初始化当前项目(跟git init一样)
- 添加文件到暂存区(当有文件没被追踪的时候会提示你是否add,勾选了选项就是不问你只要没被追踪的文件自动add)
- commit
- 设置远程仓库
- pull与push
解决github过慢
1.hosts域名映射增加
52.216.207.203 github-cloud.s3.amazonaws.com
2.刷新DNS缓存
ipconfig/flushdns
3.下载时域名修改(例子)
git clone https://github.com/mybatis/mybatis-3.git
修改为
git clone https://github.com.cnpmjs.org/mybatis/mybatis-3.git
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
.idea/
.vscode
.gradle
mvnw
mvnw.cmd
*.iml
*.class
*.gitignore
*.mvn
LICENSE
target