git
GIT简单说明
从哪儿来?
GIT出生高贵,出自于LinusTorvalds之手,仅用了两个礼拜就给折腾出来了
linus又是谁?
有什么用?
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
分布式版本控制系统又是啥?
我们自己平时写个“HelloWorld”程序,或者写一个只有几百行代码的小项目,不需要专门的代码管理工具,依靠自己的记忆就能把代码捋顺。
但是,一旦涉及到代码量巨大的项目,往往需要经过很多人协同工作数周乃至数月才能完成。
开发过程中,会面临着代码的修改、增删、恢复等工作,开发人员不可能清楚的记得每次变化,这时候就需要借助版本管理工具来跟踪代码的变化历程。
版本管理工具赋予每个文件一个版本号,每次修改之后,哪怕只改动了一个字母,版本管理工具都会精确地记录下来,并改变该文件的版本号。
这样,每个版本号就对应着文件的一次变化,依此可以进行文件的对比、恢复等操作。
缓存区 永久存放区
vim a.txt ---> add ---> commit
修改其中某一行 修改其中某一行
分布式版本控制系统都有哪些?
SVN
VCS
GIT
……
=====================================================================
GIT的安装
安装git及其依赖包
1 | # yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel git-core |
=========================================================================
GIT的配置文件:
/etc/gitconfig # 全局配置文件(主配置文件),对所有用户都有效的参数配置
git config –system 时使用该文件
~/.gitconfig # 局部配置文件,仅对当前用户有效的参数配置
git config –global 时使用该文件
工作目录中的.git/config文件 # 该文件仅对当前工作目录有效,如果有该配置文件,则会覆盖以上两个文件的效果
git的配置查找过程:./.git/config –> ~/.gitconfig –> /etc/gitconfig
git config –list # 列出当前git的所有配置详情(有时会出现重复选项,是来自于多个配置文件)
GIT用户和email的设置:
git config –global user.name “username”
git config –global user.email “You are email!”
=========================================================================
GIT版本库的创建:
先创建一个目录,用于当作git仓库使用
mkdir /testgit
将刚刚创建的目录初始化为git仓库
cd /testgit
git init # 将当期目录初始化为git仓库
或者:
git init /testgit # 将指定目录初始化为git仓库
初始化完成后会在指定目录内自动生成一个.git目录,存放git必备的文件,该目录下文件请勿随意修改:
ls -a /testgit
. .. .git
==============================================================================
GIT文件上传:
备注:
git add filename # 添加一个文件到git版本库临时文件中,此时并未对版本库中的内容真正修改
git commit -m ‘备注信息’ # 提交刚刚添加的文件至版本库中,此时才会对版本库中的内容进行修改
(注意:-m 后面的备注信息为自定义内容,为了后期更好查阅,该备注信息最好写上,而且最好写的详细些)
例如:
echo ‘test’ >a.txt # 创建一个即将上传的文件,内容自定义
git add a.txt # 将刚刚创建的文件添加到git的临时文件中
**(注意:切记,上传的文件必须在你创建的仓库目录中,否则将会报致命错误,可以多次add后再执行commit,每次可add多个文件,以空格为分隔符:# git add a.txt b.txt )**
git commit -m “添加新文件a.txt” # 提交之前的所有操作,中文需中文字符的支持(新增文件、修改文件、删除文件)
# 位于分支 master
#
# 初始提交
#
……
(此时将无法正常提交,因为我们还没有进行用户和email的设置)
git config user.name ‘test’ # 为当前用户设置一个git帐号
git config user.email ‘test@localhost’ # 为当前用户设置一个git帐号邮箱
git config –list # 查看当前用户配置信息
user.name=test # 帐号信息
user.email=test@localhost # 邮箱信息
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
git commit -m ‘新增文件a.txt’ # 再次提交就可以成功了
[master(根提交) 61be9a1] test1
1 file changed, 1 insertion(+)
create mode 100644 1.txt
=======================================================================
GIT 之 “后悔药”
1 |
|
================================================================================
工作区、缓存区的作用
工作区(仓库目录) add –> 缓存区(临时存放) commit –> master(永久存放)
由上可知:当我们对一个文件进行”git add filename”后,文件被修改的内容将存放至缓存区,不会直接修改master的内容,只有当”git commit”后,git才会将修改的内容写入到永久存放区;值得注意的是,git的特性为 管理文件的修改,而不是直接管理文件,所以,如果你进行了多次修改,都需要进行add才能将修改写入到缓存区;
例如:
vim a.txt
test
test
test1
git add a.txt
vim a.txt
test
test
test1
test2
git commit -m ‘第三次修改a.txt’
[master 2d5e028] 第三次修改a.txt
1 file changed, 1 insertion(+)
1 |
|
提交后查看一下git的状态,你会发现,git还是提示a.txt有一次新的修改未被提交,因为最后一次修改后你并未重新提交,所以git没有将其写入缓存区
1 | git diff HEAD -- a.txt # 使用命令将工作区和当前版本库的内容进行对比一下,确实后面添加的一行没有提交 |
总结:如果你需要对工作区多个文件修改,那么请先将需要修改的都改好后,再进行add,然后commit,这样就可以省去多次add和提交了
=================================================================
GIT之 撤销修改
vim a.txt
test
test
test1
test2
tset
保存后发现刚刚新增的一行或者是修改的内容有错误,需撤销后重新编辑,这时可使用:
git checkout – filename #(当然,也可以直接手动修改文件内容)
该命令会有两种恢复情况:
1.如果修改后还未提交至缓存区,则将文件内容恢复到与版本库相同的状态
2.如果修改前有过提交至缓存区,则恢复文件内容到和缓存区相同的状态
例如,未add之前的撤销:
git checkout – a.txt # 注意:必须要有 – 如果没有,则是另一个含义了
cat a.txt
test
test
test1
test2 # 之前新增的那行不见了
已经add之后的撤销:
git reset HEAD a.txt # 将缓存区中保存的临时文件撤回到a.txt文件中
重置后撤出暂存区的变更:
M a.txt
git checkout – a.txt # 在使用命令撤销文件修改过的内容即可
cat a.txt
test
test
test1
test2
问:如果不小心将错误的内容已经写入到了版本库,该如何恢复?
git reset –hard HEAD^
or
git reset –hard [commit id]
(注意:切记;上面的恢复仅限未推送到远程版本库,如果推送至远程版本库后,撤销起来将会非常麻烦)
GIT之 删除文件与版本库文件
一般情况下,有不需要的文件都是直接rm掉,git中也会监控文件的删除,如果有删除,git会告诉你都删除了哪些文件
例如:
touch b.txt
git add b.txt
git commit -m ‘新建文件b.txt’
rm -f b.txt # 直接将文件b.txt删掉
1 | git status |
该情况下,有两个选择,如果确实需要删掉该文件,可以使用以下命令将该文件从版本库也一起删掉:
1 | git rm b.txt # 从版本库也删除b.txt |
注意:如果你删掉文件后使用版本库进行恢复,恢复的内容为最近一次提交至版本库的版本,所以会丢失该版本库以后的内容
===============================================================
GIT之 远程版本库
远程版本库分两种:
1、别人提供的
2、自己搭建的
目前最主流的web远程版本库github与码云
github注册及远程版本库创建过程详见Word文档”git工作原理图&github注册流程”;请下载后查看
github远程版本库的使用方法:
主要使用两种方式:
1、https协议传输;该方式每次推送都需要验证帐号和密码,比较麻烦
2、ssh协议传输;该方式直接通过ssh协议的密钥对进行验证,只需在github上配置好公钥即可;
1、使用https推送的使用
添加远程版本库,origin为你设置的远程库名称,可自定义,zstest换成你自己注册的用户名,test.git换成你自己的版本库名称
git remote add origin https://github.com/zstest/test.git
将本地版本库中的内容全部推送至远程版本库;origin为刚刚添加时定义的版本库名称
git push -u origin master
Username for ‘https://github.com': zstest # 输入注册的用户名
Password for ‘https://ninmu@github.com': # 输入注册的用户密码
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 262 bytes | 0 bytes/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To https://github.com/ninmu/one.git
2502bb2..da8228c master -> master
分支 master 设置为跟踪来自 origin_test 的远程分支 master。
该方法比较繁琐,每次推送都需要验证用户名和密码
2、使用ssh协议推送;配置过程请见Word文档”git工作原理图&github注册流程”
按照word文档上配置完成后,即可开始添加远程版本库:
1 | ssh-keygen –t rsa –C “你自己的邮箱地址” # 产生ssh密钥对,输入命令后全部回车即可 |
1 | # cat ~/.ssh/id_rsa.pub # 将该文件的内容复制粘贴进github即可 |
备注:第一次推送任务会将本地版本库中所有内容都推送过去,以后每次有修改都可以使用该命令进行推送
===============================================================
GIT 私有版本库之 GITLAB
想要免费,且更加安全的私有版本库,只能自己搭建
GITLAB是一款开源的分布式存储管理系统,可以让你自己也能轻松实现自己的git远程版本库,且可以免费拥有私有版本库
Gitlab提供的功能:
1、用户管理
2、组管理
3、私有版本库
4、公开版本库等等
Gitlab的安装过程:
安装前准备:
1、绑定主机名
2、绑定hosts
3、关闭iptables和selinux
4、停止所有占用80和8080端口的服务
1、下载软件包
镜像源,下载偏慢
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.0.6-ce.0.el7.x86_64.rpm
最新版本
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.5.2-ce.0.el7.x86_64.rpm
2、安装依赖
yum install -y curl policycoreutils-python openssh-server openssh-clients
3、开始安装Gitlab(使用本地rpm包安装)
yum localinstall -y gitlab-ce-10.0.6-ce.0.el7.x86_64.rpm
由于包比较大,所以安装过程会慢些
4、修改Gitlab配置
把13行后面的IP换成你自己的IP地址,否则后面添加用户时会出现无法设置密码的情况,IP前面必须有’http://‘否则会报错
vim /etc/gitlab/gitlab.rb
23行 external_url ‘http://192.168.224.11'
以下为配置邮件服务的内容 不配置也可以的
1 | 在文件末尾添加以下内容: |
5、初始化Gitlab
gitlab-ctl reconfigure
过程比较慢 3分钟左右
echo $?
6、启动Gitlab服务
gitlab服务管理命令:
启动Gitlab服务 # gitlab-ctl start
查看Gitlab的状态 # gitlab-ctl status
停止Gitlab服务 # gitlab-ctl stop
7、查看端口监听情况
lsof -i:80 # Gitlab默认监听的端口为80和8080两个端口
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 5453 root 7u IPv4 38573 0t0 TCP *:http (LISTEN)
nginx 5454 gitlab-www 7u IPv4 38573 0t0 TCP *:http (LISTEN)
lsof -i:8080
8、启动后就可以到web浏览器输入你的IP地址进行下一步了;详情请参见“github与gitlab使用说明”word文档
默认登陆用户是root
9、安装完成后,打开浏览器,输入你的IP地址即可访问gitlab页面了
有时候访问80访问不了,那就可能是端口占用了,需要直接修改端口,直接修改web_server配置文件,默认在/var/opt/gitlab/nginx/conf/gitlab-http.conf
Gitlab远程版本库的使用
备注:Gitlab的使用过程和github和相似,都可以通过多种协议来进行推送和克隆
1 | 1、http协议方式 |
一台服务器如何使用多个远程版本库:
(备注:添加第二个sshkey之后必须将第二个版本库删除后重建才能正常推送)
注意:一个ssh_key只能提供一个版本库使用,如果一台服务器需要使用多个版本库,直接生成多个ssh_key即可:
1 | # ssh-keygen -t rsa -C '邮箱地址' |
上面的准备好后,直接将新的公钥内容复制进去即可
远程版本库的删除:
git remote –列出当前已添加的所有远程版本库信息
git remote -v –长格式列出当前的所有远程版本库信息
git remote remove test –删除远程版本库test
远程版本库的下载:
git clone git@IP:username/test.git # 将指定服务器中的test远程版本库克隆到本地当前目录
例如:
git clone git@3.3.3.8:root/test.git # 将3.3.3.8上的test这个远程版本库克隆到本地,用户名 root
========================================================
本章总结
1 | 本地版本库操作命令: |
- 本文标题:git
- 本文作者:yichen
- 本文链接:https://yc6.cool/2020/08/03/git/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!