git学习网址 GIT版本管理工具轻松入门-学习视频教程-腾讯课堂
1.版本控制软件
版本控制软件提供完备的版本管理功能,用于存储/追踪和文件的修改历史,是软件开发者的必备工具。
2.版本管理工具主要有两个作用
代码版本管理
多人协作开发
3.Git是一个开源的分布式版本控制系统,可以有效/高速地处理从很小到非常大的项目版本管理
控制软件
git -----> 最流行
svn
cvs ------> 开源奇葩
安装软件和小乌龟
git官网地址:Git - Downloading Package
小乌龟TortoiseGit安装 ----> *记得选择使用openssh * 安装完以后记得设置用户和邮箱
本地仓库和git基本概念
1.使用git init命令创建本地仓库
2.仓库区和工作区
.git文件夹为仓库区,类似于一个数据库存储着每一次提交的变化
.git所在目录称为工作区,我们在这里创建项目,和其他文件
3.适应git add<文件名>可以把文件添加到暂存区,暂存区存储将要被提交的文件变化
4.使用commit命令提交暂存区存储的变化并生成一个新的版本 实例:git commit -m '说明'
5.使用git status 命令查看状态,git log命令查看日志
Git服务器和远程仓库创建
1.可以搭建,自己搭建git服务器
2.免费服务器
github.com 全球最大开源项目托管平台
gitee.com 国内知名开源项目过关平台码云
3.注册gitee账号,并创建仓库
Git克隆
1.https方式
第一次克隆需要我们输入账户密码
2.ssh方式
公钥作用:1.加密通信 2.用户的权限认证
ssh是一种开源非对称加密通信协议
ssh只是一种协议,有开源实现也有商业实现,git默认使用开源实现的openssh
ssh通信需要一对密钥(公和私一对),私钥留在自己电脑上,公钥给其他的电脑
使用GITGUI生成密钥,并把公钥放在服务器上 步骤:Git GUI Here -> Help -> Show SSH Key -> Generate Key
安装完第一次克隆会请求是否允许使用ssh,需要我们输入一个“yes”或者点击ok
示例:
1.git clone 链接
开源项目不需要输入密码
私有项目需要输入密码
添加/提交/推送/拉去
添加:文件添加到暂存区
提交:暂存区存储的变化并生成一个新的版本
推送:是把本地的变化推到服务器
拉去:是拉去服务器那边的代码
1.添加add (如果使用小乌龟 勾选即为add)
2.提交commit
1.提交只提交到本地仓库 需要推送才会到把变化更新到服务器仓库
3.推送push
1.如果服务器版本比我们新,会推送不成功需要先拉取
4.拉取pull
1.拉取时应确保工作区整洁
分支创建与合并
1.master是仓库的主分,为了避免开发中程序之间互相影响,我们一般选择创建一个新的分支来开发新功能
2.创建分支
3.切换分支
4.合并分支 将其他分支合并到当前分支
冲突
1.冲出如何产生
1.两个分支修改了同一个文件合并的时候会发生冲突
2.如何解决冲出
1.协商修改冲突位置,并重新提交
3.尽量避免冲突
1.先pull再修改
2.确保自己正在修改的文件是最新版本的
3.各自开发各自的模块,如果要修改公共文件,最好先确认有没有人正在修改
4.不要擅自修改同事的代码
忽略 (忽略文件)
.gitignore
创建.gitignore文件:
Git Bash Here -> touch .gitignore
示例 :1.忽略文件 *.mp3
2.忽略文件夹 Temp/ Temp(文件夹的名字)
3.如果只想忽略当前目录下的文件夹 /Temp/
4.!*.mp3 表示反忽略 (不忽略) .mp3文件
空文件夹会被自动忽略掉
版本回退
(如果想把我们当前版本呢回到之前的版本/或者干脆把我们的主分支变成其他分支时使用)
在版本日志界面选择一个节点,使用重置(Reset)命令
Head 当前分支的引用指针(充重置就是移动Head这个指针)
Index 就是缓存区(被Add的,也可以说是将要提交的,文件的快照)
工作区 .git所在的目录以及子目录
Head头的意思 代表当前分支的引用
三种重置
重置类型
软重置(S):不更改工作区和索引
混合(M):保持工作区不变,重置索引文件
硬重置(H):重置工作区和索引(丢弃所有本地变更)
子模块
子模块就是一个git仓库包其他git仓库
当我们需要把其他开源项目作为本项目的一个库,并可以以随时拉取更新的时候
或者我们的项目需要分模块独立开发的时候需要使用子模块
克隆有子模块的仓库,需要选择递归
issue和PullRequest
issue 讨论
PullRequest 拉取请求,为项目共贡献代码,请求项目管理这合并自己的代码
git非常灵活可以根据自己的需要构思出来不同的工作流(团队开发的方式和流程)