git 版本控制系统

2/28 星期五 git 版本控制系统

  1. 版本控制系统:
    git 分布式 —没有中心代码库,所有机器之间的地位同等(每台机器上都有相同的代码)

svn 集中管理的 —有中心代码库,其他都是客户端

2.git与svn介绍
1.git属于分布式版本控制系统:
客户端并不只提取最新版本的文件,而是把原始的代码仓库完整地克隆下来。
优点:
a.由于任何人每次提取操作,实际上都是一次对代码仓库的完整备份,因此近乎所有的操作都可以在本地执行,速度就是相当的快,并且可以在网络断开的时候操作仍然不受影响,可以频繁的进行提交更新,等到有网络的时候再上传到仓库就可以了。
b.git的分支模型,相当的轻量级,被称为“必杀技”。
 
缺点:
a.每个开发人员都拥有所有的代码,不利于核心代码的保密(如果有重要代码需要保密,则不建议使用git)
2.svn属于集中化的版本控制系统:
有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的成员通过客户端连接到这台服务器,进行文件上传和更新。

优点:
a.使用简单,比较符合我们的常规思维
b.同步代码比较简单,只要一步操作即可。

缺点:
丢失数据的风险:由于集中化的特点,如果版本库的服务器磁盘发生故障等,你不能保证所有的数据已经有人提取出来了,最坏的情况是彻底的丢失整个项目的所有历史更改记录。
3.git 相关概念—纯命令行
工作区
版本库
暂存区
HEAD
版本号
版本日志
1.工作区(Working Directory):
存放git版本仓库的目录就是工作区(放源代码的地方)
2.暂存区:
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,(会将代码添加到缓存区,没有问题之后在提交到版本库)
3.版本库(Repository):
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
4.HEAD:指向你最近一次提交后的结果。

1.添加文件到暂存区:
创建两个文件add到stage: #git add 文件名 或者 #git add *
从stage提交到当前master分支的HEAD:
git commit -m “版本描述信息” #提交暂存区里的修改到版本库的分支
版本号:最核心用的是id号。每个版本都会有一个id号,也就是commit id,
查看版本号: 版本号可以通过版本日志查看,可以使用git log查看每次的commit记录
[root@vm20 gittest]# git log commit fbecfa3d04ae5038aa11bf55942e46c840077ace //id号 …
二、git部署
环境:
git-server 192.168.246.214 充当中央服务器
client 192.168.246.213

安装:所有机器都安装
[root@git-server ~]# yum install -y git
[root@git-server ~]# git --version
git version 1.8.3.1
准备:
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,

所有的机器都添加,只要邮箱和用户不一样就可以。

git config --global user.email “soho@163.com” ----设置邮箱

git config --global user.name “soho” ----加添用户

1、git使用
创建版本库:
1.创建一个空目录:在中心服务器上创建
[root@git-server ~]# mkdir /git-test
[root@git-server ~]# useradd git #创建一个git用户用来运行git
[root@git-server ~]# passwd git #给用户设置密码
[root@git-server ~]# cd /git-test/
2.通过git init命令把这个目录变成Git可以管理的仓库: 我们一般就是第二种
第1种情况:可以改代码,还能上传到别人的机器,别人也能从你这里下载但是别人不能上传代码到你的机器上。
第2种情况:只是为了上传代码用,别人从这台机器上下载代码也可以上传代码到这台机器上,经常用于核心代码库。
创建裸库: 适用与作为远程中心仓库使用 创建裸库才可以从别处push(传)代码过来,使用–bare参数------裸
git init --bare 库名字
创建一裸库:
[root@git-server git-test]# git init --bare testgit
Initialized empty Git repository in /git-test/testgit/
[root@git-server ~]# chown git.git /git-test -R #修改权限
2.仓库创建完成后查看库目录:
[root@git-server git-test]# cd testgit/
[root@git-server testgit]# ls
branches config description HEAD hooks info objects refs
客户端
1.配置免密登录
[root@client ~]# ssh-keygen #生成秘钥
[root@localhost ~]# ssh-keygen -t rsa -b 4096 -N “” -f $HOME/.ssh/id_rsa
-t 是指采用rsa加密方式的公钥/私钥对。 -b指定加密强度 -N密码为空 -f 指定文件的位置当前家目录的 减少交互
[root@client ~]# ssh-copy-id -i git@192.168.246.214 #将秘钥传输到git服务器中的git用户
2.克隆git仓库
[root@client ~]# git clone git@192.168.246.214:/git-test/testgit/
Cloning into ‘testgit’…
warning: You appear to have cloned an empty repository.
[root@client ~]# ls #查看仓库已经克隆下来了
anaconda-ks.cfg testgit
1.创建文件模拟代码提交到仓库
1.在testgit目录下创建一个测试文件test.txt
[root@client ~]# cd testgit/
[root@client testgit]# vi test.txt #随便写点东西
2.把文件添加到暂存区:使用 “git add” 建立跟踪
[root@client testgit]# git add test.txt
注: 这里可以使用 git add * 或者 git add -A
3.提交文件到仓库分支:
[root@client testgit]# git commit -m “test1”
[master (root-commit) 2b51ff9] test1
1 file changed, 2 insertions(+)
create mode 100644 test.txt
-m:描述
4.查看git状态:
[root@client testgit]# git status

On branch master #分支位于master

5.修改文件后再此查看状态:
[root@client testgit]# echo ‘1122334’ >> test.txt
[root@client testgit]# git status

位于分支 master

尚未暂存以备提交的变更:

(使用 “git add …” 更新要提交的内容)

(使用 “git checkout – …” 丢弃工作区的改动)

修改: readme.txt

修改尚未加入提交(使用 “git add” 和/或 "git commit "
6.先add
[root@client testgit]# git add -A
8.再次提交commit:
[root@client testgit]# git commit -m “add2” test.txt
[master 73bf688] add2
1 file changed, 1 insertion(+)
[root@client testgit]# git status

On branch master

nothing to commit, working directory clean
2、版本回退
已经提交了不合适的修改到版本库时,想要撤销本次提交,使用版本回退,不过前提是没有推送到远程库。
查看现在的版本:
[root@client testgit]# git log
显示的哪个版本在第一个就是当前使用的版本。
版本回退(切换): 在Git中,上一个版本就HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100(一般使用id号来恢复)
回到上一个版本
[root@client testgit]# git reset --hard HEAD^
HEAD is now at 0126755 test1
2.回到指定的版本(根据版本号):
[root@client testgit]# git reset --hard dd66ff
HEAD is now at dd66ff9 add2

3、删除文件
从工作区删除test.txt,并且从版本库一起删除
[root@client testgit]# rm -rf test.txt
[root@client testgit]# git status

位于分支 master

尚未暂存以备提交的变更:

(使用 “git add/rm …” 更新要提交的内容)

(使用 “git checkout – …” 丢弃工作区的改动)

删除: a.txt

从版本库删除:
[root@client testgit]# git rm test.txt
rm ‘test.txt’
[root@client testgit]# git commit -m “删除文件test.txt”
[master cebc081] 删除文件test.txt
1 file changed, 3 deletions(-)
delete mode 100644 test.txt
[root@client testgit]# git status

On branch master

nothing to commit, working directory clean
4、将代码上传到仓库的master分支
[root@client testgit]# vi a.txt #创建一个新文件
[root@client testgit]# git add a.txt
[root@client testgit]# git commit -m “add”
[root@client testgit]# git push origin master #上传到本地仓库master分支
Counting objects: 11, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (11/11), 828 bytes | 0 bytes/s, done.
Total 11 (delta 0), reused 0 (delta 0)
To git@192.168.246.214:/git-test/testgit/

  • [new branch] master -> master
    测试:
    在客户端将仓库删除掉然后在克隆下来查看仓库中是否有文件
    [root@git-client ~]# rm -rf testgit/
    [root@client ~]# git clone git@192.168.246.214:/git-test/testgit/
    Cloning into ‘testgit’…
    remote: Counting objects: 11, done.
    remote: Compressing objects: 100% (4/4), done.
    remote: Total 11 (delta 0), reused 0 (delta 0)
    Receiving objects: 100% (11/11), done.
    [root@client ~]# cd testgit/
    [root@client testgit]# ls
    a.txt
    [root@client testgit]# cat a.txt
    hello world
    三、创建分支并合并分支
    每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD是指向master,所以,HEAD指向的就是当前分支。
    在客户端操作:
    [root@client ~]# git clone git@192.168.246.214:/git-test/testgit/
    [root@client testgit]# git status

On branch master #当前所在为master分支

Initial commit

nothing to commit (create/copy files and use “git add” to track)
注意:刚创建的git仓库默认的master分支要在第一次commit之后才会真正建立。然后先git add .添加所有项目文件到本地仓库缓存,再git commit -m "init commit"提交到本地仓库,之后就可以随心所欲地创建或切换分支了。
创建分支:
[root@client testgit]# git branch dev #创建分支。
[root@client testgit]# git branch #查看分支。*在哪里就表示当前是哪个分支
dev //开发写代码上传代码的分支

  • master //主分支 是我们的主分支
    切换分支:
    [root@client testgit]# git checkout dev
    Switched to branch ‘dev’
    [root@client testgit]# git branch
  • dev
    master
    在dev分支创建一个文件;
    [root@client testgit]# vi test.txt
    [root@client testgit]# git add test.txt
    [root@client testgit]# git commit -m “add dev”
    [dev f855bdf] add dev
    1 file changed, 1 insertion(+)
    create mode 100644 test.txt
    现在,dev分支的工作完成,我们就可以切换回master分支:
    [root@client testgit]# git checkout master
    Switched to branch ‘master’
    切换回master分支后,再查看一个test.txt文件,刚才添加的内容不见了!因为那个提交是在dev分支上,而master分支此刻的提交点并没有变:
    [root@client testgit]# ls
    a.txt
    现在,我们把dev分支的工作成果合并到master分支上: 代码已经完全ok 我们直接可以ok克隆 开发直接从 master拉代码
    [root@client testgit]# git merge dev
    Updating 40833e0…f855bdf
    Fast-forward
    test.txt | 1 +
    1 file changed, 1 insertion(+)
    create mode 100644 test.txt
    [root@client testgit]# ls
    a.txt test.txt
    现在已经将dev分支的内容合并到master上。确认没有问题上传到远程仓库:
    [root@client testgit]# git push origin master
    git merge命令用于合并指定分支到当前分支。合并后,再查看test.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。
    合并完成后,就可以放心地删除dev分支了:
    [root@client testgit]# git branch -d dev
    Deleted branch dev (was f855bdf).
    删除后,查看branch,就只剩下master分支了:
    [root@client testgit]# git branch
  • master
    四、部署gitlab服务
    准备环境: 关闭防火墙和selinux
    192.168.246.214 #gitlab服务器
    1.配置yum源
    [root@git-server ~]# cd /etc/yum.repos.d/
    [root@git-server yum.repos.d]# vi gitlab-ce.repo
    [gitlab-ce]
    name=Gitlab CE Repository
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever
    gpgcheck=0
    enabled=1
    安装相关依赖
    [root@git-server yum.repos.d]# yum install -y curl policycoreutils-python openssh-server
    [root@git-server yum.repos.d]# systemctl enable sshd
    [root@git-server yum.repos.d]# systemctl start sshd
    安装postfix
    [root@git-server yum.repos.d]# yum install postfix #安装邮箱
    [root@git-server yum.repos.d]# systemctl enable postfix
    [root@git-server yum.repos.d]# systemctl start postfix
    [root@git-server yum.repos.d]# yum install -y gitlab-ce #将会安装gitlab最新版本
    配置gitlab
    [root@git-server ~]# vim /etc/gitlab/gitlab.rb
    1.# 添加对外的域名(gitlab.papamk.com请添加A记录指向本服务器的公网IP):将原来的修改为
    external_url ‘http://192.168.246.214’
    2.设置地区
    gitlab_rails[‘time_zone’] = ‘Asia/Shanghai’

将git数据路径的注释去掉,可以更改

开启ssh服务:

重置并启动GitLab执行:
[root@git-server ~]# gitlab-ctl reconfigure #重新加载,需要等很长时间


启动:
[root@git-server ~]# gitlab-ctl restart #启动

测试访问:http://192.168.246.214

用户为:root
密码:为刚才设置的本人设置的密码是12345678

需要创建秘钥

[root@client ~]# ssh-keygen
[root@client ~]# cd .ssh/
[root@client .ssh]# ls
[root@client .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0HeO8gaua13h9HCJK5RXVc/cjet9DpLYq2dqmQ0LXfP0Vwj6YjKxu7lE1i/4Y2cmu5lDe8bG22aikyaW38Fnz0bkGfEurdVZii/KCiHBz2lXS1ocuAdloJT4wnc2MUjh/gwc4FuNkWdYvpbMLXSSHIVjv8vB9YbHlPMTMy5N89kMwMmta5C87/8fBO5VtGijgGOueywM+xAzovlfoJbprV/ZBKkhiskSKz4fHyoGFGwllX3kMkNR/soGF5XXA+/99iO3UqSaloF0UzfUCgqfMfMVB5zDHGIB6uTrMe6ccfKp9gnVyD7m4Zmk7MwouBwAfMLIiHmvekBGXqb1YCTgJ root@client

创建一个文件:
1.newfile:先新建一个文件。 2.uploadfile:再上传即可。

上传一个文件:

创建一个用户

新添加的用户创建成功!
在git客户端
[root@client ~]# git clone git@192.168.246.214:root/testapp.git
Cloning into ‘testapp’…
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6/6), done.
[root@client ~]# ls
testapp
[root@client ~]# cd testapp/
[root@client testapp]# ls
test.txt 同步时间.txt
[root@client testapp]#
使用http的
[root@client ~]# rm -rf testgit/
[root@client ~]# git clone http://192.168.246.214/root/testapp.git
Cloning into ‘testapp’…
Username for ‘http://192.168.246.214’: root
Password for ‘http://root@192.168.246.214’:12345678 #为自己设置的密码
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
[root@client ~]# ls
testapp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值