目录
版本控制
本地版本控制:在本地记录每一次版本更新。
集中版本控制:版本数据都保存在单一服务器,不联网就看不到版本信息。SVN
分布式版本控制:所有的版本信息都同步到本地的每个用户,可以离线在本地提交,只需在联网时push。Git
++SVN与Git的区别:++
- SVN 是集中式的;Git 是分布式的
- SVN 的分支操作成本(创建/删除/合并)比 Git 高
- SVN 是存储变更差异;Git 是存储文件快照
- SVN必须联网操作,只有服务器上的版本控制;Git支持离线操作,有本地的版本控制
git配置
1)git\mingw64\etc\gitconfig ,--system系统级
2)C:\Users\用户\.gitconfig ,--global全局
Git branch 获取分支列表 ,列表保存到refs/heads/master 下面。
git config -l
,配置清单
git config --system --list
,系统配置
git config --global --list
,全局配置(用户配置)
安装好git后,设置用户名和邮箱(必要):
shell
git config --global user.name "xxx"
git config --global user.email "xxx@qq.com"
配置ssh公私钥连接远程仓库:
在c:/Users/用户/.ssh下打开git bash,运行ssh-kengen
生成公私钥,将pub公钥粘贴到远程仓库配置中。
工作区域
git本地有三个工作区域:工作目录、暂存区(stage/index)、资源库(repository)、远程仓库(remote repository)。
工作区:平时写代码项目文件的目录。
index/stage:存放提交的文件列表信息的文件。
Local R本地仓库:存放提交的所有版本信息,HEAD总是指向当前分支。
Remote:托管代码的远程服务器。
文件状态
untracked:未加入到本地库中,不参与版本控制,使用git add变为staged状态
unmodify:文件已入库,未修改。变为modified文件或git rm移除版本库变为untracked状态。
modified:文件已修改。通过git add变为staged状态,或通过git checkout放弃修改回到unmodify状态。
staged:暂存状态。执行git commit提交到版本库中,文件变为unmodify状态,执行git reset HEAD filename取消暂存,文件变为modified状态。
git对象模型
在git系统中有四种尅对象:
commit:指向一个tree,纪录了文件操作,作者,提交者信息;
tree:对象关系树,管理tree和blob的关系;
blob:保存文件内容;
tag:标记提交。
基础命令
git init
,本地创建一个新的项目。
git clone [url]
,克隆远程仓库上的项目代码。
git rm/mv [file]
,删除移动文件
git status [xx]
,查看文件状态。
git commit -m xxx
,提交暂存区中的内容到本地仓库,-v提交时显示diff信息。
git branch
,查看本地分支,-r查看远程,-d [name]删除分支,-rd删除远程分支
# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]
git merge [branch]
,合并分支到当前分支。
git checkout [branch]或git switch
,切换到指定分支。
git checkout [file]
,恢复暂存区文件到工作区。
git log
,显示当前分支版本历史,-S [key]根据关键词搜索提交历史,--follow [file]显示某文件的版本历史,--oneline简洁显示。
git shortlog -sn
,显示所有提交过的用户。
git blame [file]
,显示文件被什么人什么时间修改。
git diff
,显示工作区和暂存区的差异。
git show [commit]
,显示某次提交的时间和内容变化。
git fetch [remote]
,下载远程仓库变动到本地版本库。
git remote -v
,显示所有远程仓库,add添加仓库,remove删除。
git pull [remote] [branch]
,取回远程仓库分支的变化并与本地合并。
git push [remote] [branch]
,推送本地分支到远程仓库。
master分支主要用于发布新版本,常用工作分支使用dev等分支。
推送失败,因为最新提交和你试图推送的提交有冲突。先用git pull把最新提交从origin/dev抓下来,然后在本地合并,解决冲突,再推送。git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接。
shell
git branch --set-upstream-to=origin/dev dev
这回git pull成功,但是合并有冲突,需要手动解决,解决后提交,再push。
.gitignore忽略文件
在目录下创建.gitignore文件,将某些文件排除在版本控制外。
#
:注释。
tmp/*.txt
:忽略tmp目录所有以.txt结尾的文件,不包括tmp/d/*.txt
。
!
:除了这个文件外忽略所有
/tmp
:忽略除tmp文件夹外的其他文件
tmp/
:忽略tmp目录下的所有文件
IDEA集成Git
将所有克隆下来的git项目或新创建的git项目文件拷贝到IDEA项目中即可,或在IDEA下载git插件。