1.本地git的使用
1.1 本地git仓库的组成
- 工作区:本地git仓库的编辑内容所在的区域,所有可见的文件都包含在此区域内。
- 版本库:初始化本地git仓库后,在文件夹内生成的.git文件夹。版本库又包含以下内容:
- 暂存区(stage或index):工作区所做的修改会先提交到该区域
- 分支区:暂存区中存储的修改会合并到该区域中的当前分支。
- 分支区包含的分支,由commit节点按照commit时间顺序链接构成;
- 分支区可以有多个版本分支,但所有分支由同一个commit节点延伸而出。
- 在分支区,存在一个HEAD指针,指向当前分支的当前commit节点,而当前的合并操作都针对该HEAD指针指向的commit节点。
- 每条分支都有一个分支名称,每个commit节点都有一个commit_id。
1.2 本地git仓库的配置
1.2.1 git软件的安装与账户的配置
- Linux系统中,可编译git软件源码安装,或者从软件仓库直接安装;
- windows系统中,可下载windows软件包,点击安装;
- Mac系统中,可通过homebrew安装,也可在Xcode集中工具里安装。
在系统中安装好git软件后,可通过在命令行中输入git
命令查看是否安装成功。安装成功能够git软件后,需要在命令行中配置账户、邮箱等配置项:
- 配置账户:
git config --global user.name [用户名]
- 配置邮箱:
git config --global user.email [用户邮箱]
- 配置git提示语句显示不同颜色:
git config color.ut true
git config
命令的--global
参数,表示配置针对当前系统的所有git仓库。不使用该参数,也可针对单一的git仓库进行配置。
1.2.2 git仓库的初始化
选定一个空目录,作为git仓库的存储区域,此时使用git init
命令将该目录初始化为本地git仓库。初始化后的git仓库,其所在目录会生成一个.git文件夹,此文件夹为版本库所在空间。
1.3 本地git的使用
1.3.1 修改内容的提交、合并
-
添加文件,修改文件内容的提交:
git add [文件名]
-
删除文件、文件夹的提交:
git rm (-r) [文件名或文件夹名]
注:
git rm
命令的-r
参数针对文件夹,删除文件不需要该参数。 -
提交内容的合并:
git commit -s -m [commit节点的注释]
注:
git commit
命令的-s
参数,会在commit节点中添加提交账户。
使用git diff [文件名]
可比较文件修改提交后的内容差异;使用git status
命令,会显示出未合并的所有文件操做,包括添加文件,修改文件内容,删除文件、文件夹等;使用git reflog
命令,可查看所有合并记录。
1.3.2 本地git仓库的回退
-
未提交内容的回退:
git checkout -- [文件名]
-
已提交内容的回退:
git reset HEAD [文件名]
注:此时仅回退暂存区中的内容,工作区中的内容并未改变。
-
已合并内容的回退:
git reset --hard HEAD^
注1:
git reset
的--hard
参数,表示HEAD指针的指向移动。注2:
HEAD
加n个^
,表示当前HEAD指针指向的当前分支当前commit节点的前n个commit节点位置,也可用HEAD~n
表示。 -
当前分支,不同commit节点间的跳动:
git reset --hard [commit_id]
注1:在每次合并代码的过程中,每个commit节点将对应生成对应的commit_id。将HEAD指针指向不同commit_id,则分支区中当前分支的当前commit节点发生改变。
注2:当使用HEAD指针向当前commit节点之前commit节点跳动,则在关闭命令行窗口前,后面的commit节点不会消失,仍能使用commit_id会跳,但已无法用
git log
查看。
使用git log
命令,可查看当前分支的所有commit节点。当git log
命令使用--pretty=oneline
参数,可将当前分支的commit节点记录以每行一条的形式显示。当git log
命令使用--graph
参数,可显示所有分支的commit节点记录。
1.3.3 本地git仓库的分支管理
-
分支的创建:
git branch [新分支名]
-
分支的切换:
- 新版切换分支命令:
git switch [分支名]
- 老版切换分支命令:
git checkout [分支名]
注:在使用新版切换分支命令
git switch
时,使用-c
参数,可实现创建新分支,并切换到新分支的效果;在使用老版切换分支命令git checkout
时,使用-b
参数,也可实现创建新分支,并切换到新分支的效果。 - 新版切换分支命令:
-
分支的合并:
git merge [指定分支名]
命令,可将指定分支与当前分支合并。 -
分支的删除:
- 已合并的分支删除:
git branch -d [分支名]
- 未合并的分支删除:
git branch -D [分支名]
- 已合并的分支删除:
-
分支的查看:
git一般会采用Fast forward模式,在该模式下,删除分支,会丢掉分支信息。此时
git log --graph
无法查看到已删除分支的commit节点信息。在合并分支时,对
git merge
命令使用--no-ff
参数,可强制禁止Fast forward模式。此时git log --graph
可查看到已删除分支的commit节点信息。-
git branch
可列出所有分支; -
git log --graph --pretty=oneline
可列出所有分支的所有commit节点。
-
-
跨分支的提交:使用
git cherry-pick [commit_id]
命令,可将某次特定的提交合并到当前分支中。 -
stash暂存的使用:
- 使用
git stash
命令,可将当前未合并到当前分支的修改工作暂存到当前分支上(此时使用git status
不可见,但使用git stash list
可见); - 当切换回当前分支后,可使用
git stash list
查看当前分支的stash暂存内容:- 使用
git stash apply
命令,可将stash暂存中的修改工作内容恢复到当前分支中,但stash暂存中的修改工作内容并不会被删除。 - 使用
git stash pop
命令,可将stash暂存中的修改工作内容恢复到当前分支中,并将stash暂存中的修改工作内容删除。
- 使用
- 使用
1.3.4 本地git仓库的标签操作
标签是指向commit节点的指针,适合做版本标注。
- 标签的创建:
- 当前分支当前commit节点处的标签创建:
git tag [新标签名]
- 任意commit节点处的标签创建:
git tag [新标签名] [commit_id]
- 带注释的标签创建:
git tag -a [新标签名] -m [标签注释] [commit_id]
- 当前分支当前commit节点处的标签创建:
- 标签的查看:
-
git tag
命令可列出所有标签。标签不是按照创建时间排列显示,而是安装名称排序显示。 -
git show [标签名]
命令,可查看特定的标签所指向的commit节点的状况。
-
- 标签的删除:
git tag -d [标签名]
2. git服务器
2.1 密钥的生成
使用ssh-keygen -t rsa -C [用户邮箱]
创建SSH key,此时会在.ssh目录下生成id_rsa和id_rsa.pub两个文件,其中id_rsa.pub文件存储公钥,而id_rsa存储私钥。
2.2 本地git服务器的搭建
2.2.1 搭建git服务器
-
安装git软件:
-
创建git管理用户:
sudo adduser [用户名]
-
创建证书登陆:将所有用户的id_ras.pub文件中的公钥导入到.ssh目录下的authorized_keys文件中,每行一个用户的公钥;
-
初始化git仓库:
-
选择存放仓库的空白目录,在该目录内,使用
sudo git init --bare [仓库名].git
命令初始化git仓库; -
修改仓库的的管理账户:使用
sudo chown -R [管理用户分组]:[管理用户用户名] [仓库名].git
命令注:
-R
参数 表面将目录的权限以递归的形式修改(即当前目录和所有子目录的权限一起修改)。
-
-
禁止本地shell登陆,改为远程ssh登陆:将/etc/passwd文件的
:/home/git:/bin/bash
改为:/home/git:/bin/git-shell
2.2.2 管理公钥
- 开发人员较少:将所有开发人员的公钥导入到.ssh目录下的authorized_keys文件中即可。
- 开发人员较多:Gitosis软件
2.2.3 管理权限
使用Gitolite工具。
2.3 在线git服务器
2.3.1 在线git服务器的配置
- 创建在线git服务账号:
- 将本机git公钥导入在线git服务账号中:
- 创建线上git仓库:
- 将本地git仓库与线上git仓库关联:
git remote add [线上仓库本地命名] [线上仓库地址]
2.3.2 git服务器的使用
-
本地仓库的提交
-
第一次:
git push -u [线上仓库本地命名] [本地仓库分支名]
-
非第一次:
git push [线上仓库本地命名] [本地仓库分支名]
注:
git push
命令的-u
参数,是将本地仓库分支与线上仓库分支关联。
使用
git remote
命令可查看所有线上分支情况。 -
-
远程仓库的克隆:
git clone [线上仓库地址]
注:线上仓库地址有ssh、https等多种协议,其中ssh协议是最快的。
-
标签的操作
- 推送一个本地标签:
git push [线上仓库本地命名] [标签名]
- 推送所有本地未推送的标签:
git push [线上仓库本地命名] --tags
- 删除一个远程标签:
git push [线上仓库本地命名] :refs/tags/[标签名]
- 推送一个本地标签:
网友评论