版本控制:集中式版本控制(SVN),分布式版本控制(Git)
版本控制工具的功能:协同修改、数据备份、版本管理(SVN:增量式版本控制;Git:文件系统快照)、权限控制(Git独有)、历史记录、分支管理
Git
Git官网:https://git-scm.com/
本地结构
工作区——(git add)——>暂存区——(git commit)——>本地库
本地命令行
初始化本地库
git init
设置签名
# 仓库级别
git config user.name tian
git config user.email 18810721315@163.com
# 查看本仓库下.git/config
$ cat config
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[user]
name = tian
email = 18810721315@163.com
# 系统级别
git config --global user.name tmy
git config --global user.email 18810721315@163.com
# 查看git家目录下.gitconfig
$ cd ~
$ cat .gitconfig
[user]
name = tmy
email = 18810721315@163.com
提交
# 查看提交状态
git status
# 添加到缓存区
git add test.java
# 从缓存区撤回到工作区
git rm --cached test.java
# 提交到本地库
git commit -m "message" test.java
# 修改的文件,从工作区直接提交到本地库,注意没有文件名
git commit -am "message"
查看本地库记录
git log # 只能显示之前的版本
git log --oneline
git reflog # 推荐
ea1836a (HEAD -> master) HEAD@{0}: commit: insert eeeeee
3bf1f55 HEAD@{1}: commit: insert dddddd
版本切换
# 仅移动本地库版本指针<HEAD>
git reset --soft
# 移动本地库版本指针<HEAD>,重置暂存区
git reset --mixed
# 移动本地库版本指针<HEAD>,重置暂存区,修改工作区
git reset --hard
# 1、基于索引值操作 推荐
git reset --hard 3bf1f55
# 2、^ 回退一个版本
git reset --hard HEAD^
# 3、~ 回退指定版本步数
git reset --hard HARD~3
文件比较
# 与缓存区进行比较
git diff test.java
# 与本地库进行比较
git diff ea1836a test.java
分支管理
git:管理分支是新建一个指针指向文件
svn:复制一份文件到新分支
# 查看分支
git branch -v
# 创建分支
git branch [分支名]
# 切换分支
git checkout [分支名]
# 合并分支
git merge [分支名]
# 解决冲突
1、合并分支,2、处理文件内容,3、添加到暂存区,4、提交到本地库
托管中心
局域网环境下:GitLab
外网环境下:GitHub、Gitee
本地与远程交互
创建链接别名
# 查看链接别名
git remote -v
# 创建链接别名
git remote add [别名] [地址]
代码托管
# 推送到托管中心
git push [远程地址] 分支
团队协作
# 克隆远程库
# 1、把远程库下载到本地
# 2、创建远程库别名
# 3、初始化本地库
git clone [远程地址]
# 推送到托管中心
# 前提是:此人必须加入远程地址的开发团队
git push [远程地址] [分支名]
# 拉取远程仓库
# 只是把远程仓库的内容下载下来,不修改本地文件
# 内容查看 git checkout [远程地址/分支名]
git fetch [远程地址] [分支名]
# 本地仓库合并远程仓库
git merge [远程地址/分支名]
# 拉取+合并
git pull [远程地址] [分支名]
# 解决冲突
1、拉取,2、处理文件,3、添加到暂存区,4、提交到本地库,5、推送到托管中心
跨团队协作
# 创建远程库一个自己的分支
通过别人的远程地址,fork为自己的远程仓库分支
# 克隆自己fork的远程库
git clone [远程地址]
# 推送到托管中心
git push [远程地址] [分支名称]
# 远程中心 new pull request
# 远程中心 create pull request
# 远程中心 merge pull request
# 拉取并合并
git pull [远程地址] [分支名]
SSH免密登录
# 回到本地git家目录
cd ~
# 添加根SSH key
ssh -keygen -t rsa -C [邮箱账号]
# 进入.ssh目录,复制id_rsa.pub,并在远程仓库添加
# 添加ssh别名
git remote add [别名] [地址]
# 推送到远程仓库
git push [远程地址] [分支名称]