1、简介
git是当前最流行的版本控制器。
版本控制:是一种在开发过程中用于管理我们文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。就是版本迭代,旧项目版本不能删除,新的版本继续开发。
-
实现跨区域多人协同开发 -
追踪一个或多个文件的历史记录 -
组织和保护你的源代码和文档 -
统计工作 -
并行开发,提高开发效率
版本控制的分类:
- 本地版本控制:记录文件每次更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人使用。
- 集中版本控制:所有版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。(
SVN 等) - 分布式版本控制:每个人都拥有全部的代码,所有版本信息仓库全部同步到本地的每一个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交。只需在连网后提交到相应的服务器上。由于每个用户那里都保存的都是所有版本数据,只要一个用户的设备没有问题就可以恢复到所有的数据。(
Git )
Git 和SVN 的区别:
SVN :是集中版本控制,版本库是放在中央服务器上的,而工作的时候用的都是自己的电脑,所以必须首先从服务器上得到最新的版本,工作完后将自己的代码提交到服务器上。必须连网。
Git :是分布式版本控制,没有中央服务器,每一个人的电脑都是一个完整的版本库,工作的时候不需要连网。协同的方法就是,当A修改了test文件,B也修改了test文件,这时,他们只需把自己修改后的文件推送给对方就可以了,这样对方就可以看见对方修改的内容。
2、Git的安装和环境搭配
安装:
方式一: Git官网:https://git-scm.com/下载对应的版本,但是官网下载非常慢
方式二:淘宝镜像下载:https://npm.taobao.org/mirrors/git-for-windows/
?
下载 后然后进行无脑安装。安装成功后,在开始菜单栏中就会存在。鼠标右键桌面也会有Git Bash和Git GUI这两个选项。
Git Bash:Unix和Linux风格的命令行,使用最多,推荐使用
Git CMD:windows风格的命令行
Git GUI:图形界面的Git。
拓展:Linux常用命令
cd :进入到某个目录中cd .. :返回到上一级目录pwd :显示当前目录路径ls :列出当前目录下的文件ll :列出当前目录下的文件,比ls更加详细touch :新建一个文件,后面跟一个文件名,例如touch index.html rm :删除一个文件,后面跟文件文件名,例如rm index.html mkdir :新建一个文件夹,后面跟文件夹的名称,例如mkdir test rm -r:强制删除一个文件夹,后面跟文件夹名,例如 rm -r test`rm -rf / :删除在Linux根目录下的所有文件,相当于清空系统。mv 移动文件 目标文件夹 :将移动文件,移动到指定的目标文件夹下。reset :重启终端clear :清除终端屏幕history :查看历史使用的命令exit :退出终端- ‘#’ 表示注释
3、Git的配置
- 查看全局配置命令:
git config -l
- 查看系统配置命令:
git config --system --list
- 查看用户配置命令:
git config --global --list
-
设置用户name命令:git config --global user.name 用户名 -
设置用户邮箱email命令,建议使用真实邮箱:git config --global user.email LHJ160414@163.com
Git的配置中第4、5是必须都要配置的,否则导致后面无法上传代码。
Git相关配置文件:
gitconfig :在安装目录下的 /etc/gitconfig ,这是系统的配置文件。
.gitconfig :在C:\Users\LHJ16\.gitconfig ,这是用户配置文件,配置的name和email也可以在这里面配置。
4、Git基础理论
工作区:Git一共有4个工作区,3个本地的工作区(工作目录、暂存区、资源库),1个远程的工作区(远程仓库)。
- 工作目录(Working Directory):本地存放代码的文件,编写代码的目录文件。
- 暂存区(Stage):可以临时存在你修改的文件,本质就是一个文件,在工作区通过
git add . 将所有修改的文件加入的暂存区中。 - 资源库(History/Repository):本地仓库,安全存放数据的位置,如果在暂存区中添加了新的文件,可以通过
git commit 将暂存区的文件提交到资源库中。 - 远程仓库(Remote Directory):远程仓库,托管代码的服务器,可以通过
git push 将本地仓库的文件提交到远程仓库中。
常用命令:
git add . :将文件放入到暂存区git commit :将暂存区的文件提交的本地仓库git push :将本地仓库的文件上传到远程仓库git pull :将远程仓库的文件下载到本地git reset :如果将文件从暂存区提交到本地仓库后想回滚,就可以使用这个命令git checkout :将暂存去还未提交到本地仓库的文件放入到本地工作区。
5、Git项目搭建和克隆
搭建: 使用 git init 命令来初始化一个git项目,需要进入创建git项目的目录下。
克隆:使用 git clone url 命令从远程仓库中克隆项目到本地,url 是远程仓库的地址,一般是gitee 和github 。
6、Git基本操作
Git的文件4中状态:版本控制就是文件的控制,对文件的修改、添加、提交就是版本的控制。
Untracked :未跟踪状态,在工作目录中存在,但是没有加入到其他工作区。Unmodify :文件已经在本地仓库中,但是未修改与版本的快照一样,这类文件可以进行修改,也可以使用git rm 移除版本控制。Modify :文件已经修改,但是没有进行其他操作,这类文件可以git add 到暂存区中,也可以使用git checkout 恢复到之前未修改的状态及Unmodify 状态。Staged :暂存状态,可以使用git commit 提交到本地仓库中,这样文件就变成了UnModify 状态,也可以使用git reset HEAD filename 把文件取消暂存,修改为Modify 状态。
Git常见命令:
git status [filename]
git add .
git commit -m [message]
文件忽略:在项目中一些文件不需要提交到仓库中,需要手动去配置忽略这些文件。需要在主目录中创建.gitignore 文件,在这个文件中进行配置,下面是一些配置文件忽略的规则。
- 忽略文件中的空行或以#开头的行。
- 可以使用Linux通配符:
* 表示匹配所有,? 表示一个字符,[abc] 表示可选字符的范围,{str1,str2,....} 表示可选字符串的范围。 - 如果名称前存在 !表示这个文件将不会被忽略。
- 如果名称前面添加 / 表示忽略的文件在此目录下,但子目录下的文件不忽略。
- 如果名臣后面添加 / 表示忽略这个目录下子目录的文件。
*.txt
!test.txt
/temp
test/
test/*.txt
# 常见忽略文件
*.class
*.log
*.lock
*.jar
*.war
*.war
target/
.idea/
*.imi
*velocity.log*
.apt_generated
.factorypath
.springBeans
*ipr
*iws
.idea
.classpath
.project
.settings/
bin/
*.log
tmp/
*rebel.xml*
7、Gitee
Gitee : 基于Git的代码托管和研发协作平台。
- 注册
Gitee 账号:Gitee官网:https://gitee.com/ - 配置本地SSH公钥
- 生成SSH公钥:进入
C:\Users\LHJ16\.ssh 目录下,默认这个目录是空文件夹,使用ssh-keygen 命令生成公钥。
- 连接
Gitee 远程仓库:在上面步骤的基础下,并配置了user.name 和user.email 。
克隆方式:通过克隆一个远程仓库,然后将生成的.git 文件夹放入到自己的工作目录下就可以使用命令进行版本控制。
初始化方式:通过git init 初始化一个本地仓库,然后通过以下命令连接远程仓库。
git remote add origin 仓库的SSH
git remote add origin 仓库的url
8、Git 分支
分支就是从主分支上分离出来一个分支,不影响主分支中的任务,子分支也不受主分支的影响,当子分支工作完成后,可以合并到主分支上,Git默认的主分支是master。
Git常用分支命令:
git branch
git branch -a
git branch -r
git branch [新分支名]
git checkout [分支名]
git checkout -b [分支名]
git merge [分支名]
git branch -d [分支名]
git push origin [本地分支名]:[远程分支名]
git push origin --delete [分支名]
分支合并:两个分支进行合并时,如果分支中同一份文件的代码发生冲突时,可以选择保存哪一个分支上的代码
9、拓展
9.1、Git插件
- idea的
Gitee 插件:在idea的插件市场中搜索gitee ,输入gitee 账号后,可以克隆这个用户的所有项目,也可以直接在idea中直接push代码,默认是https 方式。
|