文章目录
介绍
分布式版本控制系统下的每一台终端都可以充当类似集中式版本控制系统的中央服务器。每台终端都可以保存版本库,并且版本库也可以不同,可以对每个版本库进行修改,修改完成后可以集中后最后更新,这更方便每个合作者之间的交流沟通。此外,git的分支等等策略更是合作方式的最佳办法。
分布式版本控制系统原理
理解git原理需要先理解几个术语:
工作区
:在编辑器内可增加或修改文件等位置;缓存区
:只能通过git bash等窗口显示,它是提交代码、解决冲突的中转站;版本库
:本地.git/
目录,内含缓存区
或暂存区
;本地仓库
:连接本地代码和远程代码的枢纽,仅能通过git bash显示。在没有联网状态下,本地代码可先提交至该处;远程仓库
:托管远程代码的中央服务器 ,如开源网站github
。
git安装和使用
git软件分类
git使用软件类型有git shell
和git desktop
两种类型,git shell是直接使用git 命令行,包括git add
,git commit
等,其中以git bash软件为代表;git desktop类型主要是图形界面软件,可以通过鼠标点击按钮实现git add和git commit等功能,其中以GitHub desktop,smartgit等为代表。这里分别推荐git bash和github desktop。
安装软件
- 分别到git bash和github desktop网站下载对应操作系统版本的软件,这里就以git bash安装作为标准。
- 按照默认设置安装git bash,完成后打开git bash,同时可以按照配置linux 的shell环境一样配置git bash的环境,如
.vimrc
和.bash_profile
等文件,如下图所示。
- 设置用户名和用户邮箱,该信息每次会通过修改提交git命令上传到远程仓库,也即为了识别用户。还有一个配置客户端长期存储用户名和密码的命令。
bash
# 必须配置
git config --global user.name "Hua"
git config --global user.email "hua1@outlook.com"
# 可选择配置
git config --global credential.helper store
# 检查配置
git config --list
>user.email=hua1@outlook.com
>user.name=Hua
注册开源社区github
github是全球程序员交流平台,又因程序员大多数是单身男性,因此也被称为全球基友交流平台
。注册分为三步:
- 创建账户;
- 选择订阅;
- 分享经历。
git ssh key 配置
为何要配置git ssh key呢?ssh协议可以避免输入账户名和密码直接拉去或上传代码至远程仓库。通过配置本地电脑或者位置的rsa公钥至github网址,可以实现无需输入用户名和密码的方式方便快速地提交和更新代码。解决方案如下:
- 打开本地git bash,使用
ssh-keygen -t rsa -C "emailname@mails.com"
,一路回车,最后生成的文件位于~/.ssh/
目录。打开目录内的id_rsa.pub
文件,复制内容。 - 打开github网站,点击右上角头像,下拉菜单显示
setting
选项,选择添加rsa公钥。 - 测试是否添加成功。
bash
ssh -T git@github.com
>Hi Hua! You've successfully authenticated, but GitHub does not provide shell access.
远程仓库
远程仓库是可以充当"中央服务器"托管代码的位置,其他终端可以从该处获取原始代码,从这一点看好像分布式版本控制系统与集中式版本控制系统无太大差别,但git的每一台终端都可以充当"中央处理器"且无主次之分,一般情况下大家会把某台24小时开机的终端看成"中央处理器",每台终端从服务器拉取代码和提交修改等。
GitHub仓库与本地仓库同步
:GitHub已存在某个仓库,同时本地也存在同名仓库,为使得两仓库远程同步,只需要输入如下命令
bash
# step1: 登陆GitHub并创建example_git远程仓库
# step2: 跳转到本地仓库目录
cd path_dir/example_git
# step3: 初始化版本库 .git
git init
# step4: 连接本地仓库和远程仓库
git remote add origin git@github.com:HuaZou/example_git
# step5: 推送本地文件至远程仓库,并且关联本地和远程的master分支
git push -u origin master # 第一次推送使用-u参数,后续只需要 git push origin master
克隆远程仓库
:如想获取GitHub上的某个仓库,只需要在本地使用做如下处理:
bash
# step1: 克隆远程仓库至本地工作区
git clone git@github.com:HuaZou/example_git
# step2: 查看工作区文件状态
git status
# step3: 提交工作区修改文件等至暂存区
git add filesname
# step4: 提交操作命令描述至本地仓库
git commit -m "operation description"
# step5: 推送本地仓库至远程仓库,注意保证远程仓库的head是高于本地仓库,否则会发生conflict错误
git push origin master
版本回退
:版本信息均存在.git目录,可以使用git log
,git log --pretty=oneline
查看head信息也即提交信息等。git reset --hard commit_id
回到某个提交命令的版本。
撤销修改
:发现某些修改需要撤回是,可以根据修改提交状态选择命令
bash
# step1: 查看文件状态
git status
# step2: 如果文件只通过git add提交到暂存区
git checkout -- filename.txt
# step3: 如果文件已经通过git commit提交到本地仓库
git reset HEAD filename.txt # git reset不仅仅可以版本库回退也可以文件撤回修改
删除文件
:未添加至暂存区和已添加两种情况。前者使用基本的rm
命令即可,后者删除动作是一个处理过程,也需要提交命令:1)git rm filename.txt
;2)git commit -m "remove file"
。
分支管理
分支是从主支线上分离出来,分支上的操作不会影响主线的工作,在完成分支上的任务后再合并到主线即可。
- 查看当前分支情况:git branch;
- 创建分支:git branch branchname;
- 切换分支:git checkout branchname;
- 创建并切换分支:git checkout -b branchname;
- 合并某分支到当前分支:git merge branch1; git branch -d branch1;
- 删除分支:git branch -d branchname;
master
分支一般仅仅发布新版本,工作的最新状态是在dev
分支,其他人工作是在自己的分支等,如图:
标签管理
标签管理一般是工作完成到某个重要节点了,然后希望对工作进行标记,这个时候可以使用git tag给该阶段打上标签。
bash
# 查看标签
git tag
# 在某个版本打上标签
git tag v0.1 <可加上某个commit版本>
# 给标签加上其他信息
git tag -a v0.1 -m "version 0.1 released" 1094adb
# 查看标签说明
git show v0.1
# 删除标签
git tag -d v0.1
# 推送标签
git push origin v0.1