-
项目版本控制管理
与SVN对比
SVN
-
SVN是集中式版本控制,版本库是集中放在中央服务器的,而开发人员工作的时候,用的都是自己的电脑,所以首先要到中央服务器下载最新的版本,然后开发,开发完后,需要把自己开发的代码提交到中央服务器
-
集中式版本控制工具缺点
-
服务器单点故障
-
容错性差
-
Git
-
Git是分布式版本控制系统,分别两种类型的仓库:本地仓库和远程仓库
-
本地仓库:开发人员自己电脑的Git仓库
-
远程仓库:是远程服务器上的Git仓库
-
-
Clone:克隆,就是将远程仓库复制到本地
-
Push:推送,就是将本地仓库代码上传到远程仓库
-
Pull:拉取,就是将远程仓库代码下载到本地仓库
工作流程
-
从远程仓库中克隆代码到本地仓库
-
从本地仓库中checkout代码然后进行代码修改
-
在提交前先将代码提交到暂存区
-
提交到本地仓库,本地仓库中保存修改的各个历史版本
-
修改完成后,需要和团队成员共享代码时,将代码push到远程仓库
下载与安装
代码托管
Github
码云
GitLab
创建远程仓库
-
注册码云
-
创建仓库
邀请仓库成员
常用命令
环境配置
设置用户信息
-
只是标识 不是真正的账号
git config --global user.name "lianchen"
git config --global user.email "lianchen@qq.com"
查看配置信息
git config --list
git config user.name
信息保存位置
-
~/.gitconfig
文件中
获取Git仓库
本地初始化一个仓库
-
创建本地仓库目录
-
进入目录下
git init
-
生成
.git
隐藏文件
从远程仓库克隆
-
进入需要创建仓库的目录
git clone https://gitee.com/lianchen/repo2.git
-
生成仓库目录及文件
工作目录,暂存区以及版本库概念
版本库
-
.git
文件就是版本库,版本库中存储了很多配置信息,日志信息和文件版本信息等
工作目录(工作区)
-
包含.git文件夹的目录就是工作目录,主要用于存放开发的代码
暂存区
-
.git
文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage,暂存区是一个临时保存修改文件的地方
Git工作目录下文件的两种状态
未跟踪 untracked
-
未被纳入版本控制
已跟踪 tracked
-
被纳入版本控制
未修改 Unmodified
已修改 Modified
已暂停 Staged
本地命令操作
查看文件状态
-
get status
-
git status -s 简化输出
文件加入和取消暂缓区
-
git add hello.txt
-
git reset HEAD hello.txt
文件在暂存区提交
-
git commit -m "init hello.txt"
-
不加
-m
参数 需要编辑日志文件 后保存提交
删除文件后提交
-
git rm hello.txt
-
自动添加到暂存区
-
本地手动删除文件 是不会自动添加到暂存区的 需要手动添加到暂存区
文件添加到忽略列表
-
创建一个名为
.gitignore
的文件 -
touch .gitignore
*.a
!lib.a # !表示取反
/TODO
build/
doc/*.txt
doc/**/*.pdf
日志记录
-
git log
-
出车下一页
-
q 退出
远程仓库命令操作
查看远程仓库
-
git remote
-
git remote -v
-
git remote show origin
-
对于本地仓库
添加远程仓库
-
git remote add origin http://gitee.com/xxx
-
可以添加多个
-
git remote add myremote http://gitee.com/xxx
从远程仓库克隆
-
git clone http://gitee.com/xxx
移除无效的远程仓库
-
本地关联删除
-
git remote rm myremote
从远程仓库中抓取与拉取
-
git fetch 从远程仓库获取最新版本到本地仓库 不会自动merge
-
git pull 从远程仓库获取最新版本到本地仓库 会自动merge
-
git fetch 抓取到本地
.git
文件的objects
中
-
git merge origin/master
-
git pull origin/master
-
如果当前本地仓库
不是从远程仓库克隆
的,而是本地创建的仓库,并且本地仓库中存在文件
,此时在从远程仓库拉取文件的时候回报错(fatal:refusing to merge unrelated histories
),解决此问题可以使用 git pull--allow-unrelated-histories
-
本地存在文件 提交过本地仓库
-
可能出现日志文件 保存退出即可
推送到远程仓库
-
git push origin master 本地master 推送到远程的 master
-
推送代码需要用户名和密码
-
推送用户名使用当时本地配置的name
-
添加暂存区并提交
Git 分支
查看分支
-
git branch 列出本地分支
-
git branch -r 列出远程仓库分支
-
git branch -a 列出所有本地分支和远程分支
创建分支
-
git branch b1
切换分支
-
git checkout b1
推送到远程仓库分支
-
git push origin b1
合并分支
-
在b1分支下开发
-
切换回master分支 没有新建的文件
-
合并分支
-
git merge b1
-
有时候合并操作不会如此顺利,如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,git就没办法合并它们,同时会提示文件冲突,此时需要我们打开冲突的文件并修改冲突文件内容,最后执行git add 命令来标识冲突已解决
-
在master分支下修改一行文件 并提交到本地
-
切换到b1分支中 同一行位置 添加文件并提交到本地
-
切换回master分支进行合并操作
-
解决冲突 手动修改
-
重新添加提交
-
将新文件推送到远程
-
git push origin master
-
git push origin b1
删除分支
-
git branch -d b2
-
如果本地修改没有推送到远程 需要强制删除 使用 -D
-
git branch -D b1
-
删除远程分支
-
git push origin -d b2
综合练习
# 有一个线上仓库
# 新建分支dev
git branch dev
# 切换到新分支
git checkout dev
# 新分支上开展工作
# 例如 创建UserDao文件
# 新文件加入到暂存区
git add UserDao.java
# 提交到本地仓库
git commit -m "add UserDao.java in dev branch"
# 继续开发
# 进度中 解决线上问题
# 切换到master分支
git checkout master
# 创建分支fix
git branch fix
# 切换到新分支
git checkout fix
# 开发业务需求
# 例如 pom.xml 文件中修改文件
# 提交文件
git commit -a -m "fix pom.xml"
# 切换到master分支
git checkout master
# 合并fix到主分支
git merge fix
# 推送到远程仓库
git push origin master
# 切换回dev
git checkout dev
# 继续dev上的业务
Git标签
-
给某一次提交打上时间点记录
创建标签
-
git tag v0.1
列出已有标签
-
git tag
-
git show v0.1
推送标签到远程仓库
-
git push origin v0.1
检出标签
-
新建一个分支,指向某个tag
-
git checkout -b b3 v0.1
-
开发代码 升级为v2.0
-
提交标签,推送远程
删除标签
-
git tag -d v0.1 删除本地
-
git push origin :refs/tags/v0.1 删除远程
TortoiseGit
安装
-
下载msi及中文语言包
-
安装完成重启电脑
创建仓库
克隆仓库
添加暂存区
-
可以在提交的时候操作
-
文件上右击
提交
推送到远程仓库
本地创建的仓库推送到远程
-
非克隆下来的
-
推送的时候需要配置远程仓库
远程拉取
创建分支
切换分支
合并分支
推送分支到远程
IDEA中使用Git
配置Git
创建仓库
-
在工作区生成
.git
文件
创建.gitignore忽略文件
.idea/
project.iml
target/
加入暂存区并提交
推送到远程仓库
-
定义远程仓库
克隆远程仓库
拉取远程代码
版本对比
创建分支
切换分支
合并分支
使用SSH传输协议
-
安全外壳协议
-
专为远程登录回话和其他网络服务提供安全性的协议
-
有效防止远程管理过程中的信息泄露问题
Git使用SSH
-
生成git的ssh key 公钥+私钥
-
远程服务器认证ssh key
-
将公钥放到需要访问的服务器上
没有配置SSH
生成ssh-key
-
ssh-keygen -t rsa
-
id_rsa 私钥
-