当前位置:   article > 正文

svn,git

svn,git

基本概念

  • 版本管理工具发展简史,cvs> svn > git  参考http://luckypoem14.github.io/test/2012/04/24/scm-history/ 
  •  svn全称subversion,是一个开源版本控制系统,始于2000年
  • git是linux创始人linus发起的,2005年发布,最初目的是更好管理linux内核代码
  • git和svn不同在于git不需要依赖服务端就可以工作,即git是分布式的
  • 关于git和svn的比较大家参考http://blog.lishiming.net/?p=305
  • github是基于git的在线web页面代码托管平台,可以选择付费服务
  •  gitlab可以认为是一个开源的github,两者没有直接关系

安装SVN

开发人员经常会上传代码,或者改对代码做一些更改。svn就是用来将修改后的代码更新到服务器上的。下面就来看一下怎么在Linux环境下搭建svn服务(subversion)

  1. yum install -y subversion //安装
  2. mkdir -p /data/svnroot/myproject // 创建版本库
  3. svnadmin create /data/svnroot/myproject 创建svn资源仓库
  4. vim/data/svnroot/myproject/conf #authz为权限配置文件,passwd为密码文件
  5. vim authz//配置文件改为如下
  6. [groups]
  7. admin = test
  8. [/]
  9. @admin = rw 组的用户
  10. * = r 其他以外的用户
  11. 扩展:
  12. [myproject:/] 如果svnroot下面有多个子目录可以用这个指定项目目录
  13. test = rw
  14. 设置账户密码:
  15. vim passwd
  16. test = test1234 (前面不要有空格不然无法连接)
  17. vim svnserver.conf
  18. [general]
  19. anon-access = none 匿名用户无法登陆
  20. auth-access = write 授权的用户拥有写权限
  21. password-db = passwd 指定passwd文件
  22. authz-db = authz 指定权限配置文件
  23. realm = /data/svnroot/myproject 指定项目目录
  24. 启动svn
  25. svnserve -d -r /data/svnroot/ //-d以后台模式启动,-r,指定目录
  26. 查看是否启动:监听3698端口
  27. netstat -lntp
  28. tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 19138/svnserve

客户端linux使用svn上传

  1. yum install -y subversion 安装客户端
  2. svn checkout svn://192.168.133.130/myproject --username=aming 检查库,输入账号密码
  3. cd myproject ; ls -la
  4. cp /etc/fstab .
  5. svn add . //添加到版本控制中心
  6. svn commit -m “add file” //把文件上传到服务器
  7. svn delete filename //在本地删除
  8. svn commit -m “delete filename” //在服务器上删除
  9. svn update //把当前目录下的文件都更新到最新版
  10. svn log //查看变更日志

客户端window使用svn上传 

  1. 1:去官网下载svn
  2. https://tortoisesvn.net/
  1. 在window上创建一个文件夹
  2. 右键checkout 
  3. 输入url 格式为:svn://IP/项目名称 
  • 上传代码操作
  • 创建一个1.txt,然后右键svn有个add,添加,然后commit 上传写上描述
  • 服务器上运行svn update即可

svn优缺点

SVN的优点:

1、采用集中式,易于管理,保证安全性;

2、管理方便,逻辑明确,理念符合常规思维;

3、代码的一致性高;

4、适合人数不多的项目开发;

5、允许一个文件有任意多的可命名属性,会关注所有的文件类型;

6、支持二进制文件,更容易处理大文件;

7、支持空目录。

SVN的缺点:

1、服务器压力太大,数据库容量暴增;

2、必须连接在服务器上,否则基本不能工作、提交、对比、还原等;

3、不适合开源开发。 

git优缺点:

Git的优点:

1、适合分布式开发,强调个体;

2、公共的服务器压力和数量都不会太大;

3、速度快, 成熟的架构,开发灵活;

4、任意两个开发者之间可以很容易的解决冲突;

5、离线工作,管理代码成本低,不需要依赖服务器;

6、部署方便。基本上下个命令就可以用;

7、良好的分支机制,可以让主干代码保持干净。

Git的缺点:

1、资料少,学习成本比较大,学习周期比较长,要求人员素质比较高;

2、不符合常规思维;

3、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。 

git单机上使用安装与操作

  1. 安装:
  2. yum install -y git
  3. 创建一个项目
  4. mkdir /data/gitroot/
  5. 初始化仓库:
  6. git init
  7. 创建文件测试:
  8. touch 1.txt |echo "12312">1.txt
  9. 把1.txt添加标志
  10. git add 1.txt
  11. 上传至仓库
  12. git commit -m "add 1.txt"
  13. 查看提交记录:
  14. git log
  15. commit c46f8980e76cf5aea20e9501923d87167cb76379
  16. Author: root <978464597@qq.com>
  17. Date: Fri Sep 21 14:39:46 2018 +0800
  18. add
  19. 如果想回退版本库
  20. git reset --hard c46f89 //后面跟的是commit字符串,简写即可
  21. 如果不小心删除了1.txt,使用下面命令即可恢复
  22. git checkout -- 1.txt //前提要记得文件名
  23. 如果你add添加错了,但没有commit,可以使用以下命令返回上一次的状态
  24. git reset HEAD 1.txt
  25. git checkout 1.txt
  26. [root@study gitroot]# git add 1.txt //添加
  27. [root@study gitroot]# git status //查看状态,差提交
  28. # On branch master
  29. # Changes to be committed:
  30. # (use "git reset HEAD <file>..." to unstage)
  31. #
  32. # modified: 1.txt
  33. #
  34. [root@study gitroot]# git reset HEAD 1.txt //取消
  35. Unstaged changes after reset:
  36. M 1.txt
  37. [root@study gitroot]# git checkout 1.txt //再次检查
  38. [root@study gitroot]# git status //查看状态是空
  39. # On branch master
  40. nothing to commit, working directory clean
  41. [root@study gitroot]#
  42. 如果你想真正的删除文件,需要先删除后提交才能算删除。
  43. 1.git rm 1.txt 删除
  44. 2. git commit -m "rm 1.txt" 确认提交

使用远程仓库(github)

我们可以把仓库放在其他地方。

1.首先需要去gitlub官网上注册一个账号 官网:https://github.com 

2.注册完登录后去setting那里添加ssh本机秘钥

3.然后创建自己的项目库New repository

4.一般创建完自己项目库后,他会有教程

5.试下本地传文件去远程库把

  1. [root@study gitroot]# ls
  2. 1.txt
  3. [root@study gitroot]# touch 2.txt |echo "1231231231231" >2.txt 创建
  4. [root@study gitroot]# git add 2.txt 添加
  5. [root@study gitroot]# git commit -m "add src " 上传
  6. [master c25e6b9] add src
  7. 1 file changed, 1 insertion(+)
  8. create mode 100644 2.txt
  9. 下面这个就是把本地推送到远程的地址,https://网址/账号名/账号下的git库
  10. [root@study gitroot]# git remote add origin https://github.com/skycity1234/gitroot.git
  11. [root@study gitroot]# git push -u origin master 推送上去
  12. Username for 'https://github.com': skycity1234 输入账号密码
  13. Password for 'https://skycity1234@github.com':
  14. Counting objects: 6, done.
  15. Compressing objects: 100% (3/3), done.
  16. Writing objects: 100% (6/6), 427 bytes | 0 bytes/s, done.
  17. Total 6 (delta 0), reused 0 (delta 0)
  18. remote:
  19. remote: Create a pull request for 'master' on GitHub by visiting:
  20. remote: https://github.com/skycity1234/gitroot/pull/new/master
  21. remote:
  22. To https://github.com/skycity1234/gitroot.git
  23. * [new branch] master -> master
  24. Branch master set up to track remote branch master from origin.
  25. [root@study gitroot]#

6.查看下gitlub是否有我们上传的文件(这里看到我们的上传的2.txt,时间是3分钟前)

懂得上传了,还得需要会克隆远程的库,原理相反

  1. 多了个clone克隆的意思加远程仓库地址
  2. [root@study test]# git clone https://github.com/skycity1234/gitroot.git
  3. Cloning into 'gitroot'...
  4. remote: Enumerating objects: 6, done.
  5. remote: Counting objects: 100% (6/6), done.
  6. remote: Compressing objects: 100% (3/3), done.
  7. Unpacking objects: 100% (6/6), done.
  8. remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0
  9. [root@study test]# ls
  10. gitroot
  11. [root@study test]# cd gitroot/
  12. [root@study gitroot]# ls
  13. 1.txt 2.txt
  14. [root@study gitroot]#

关于github如何创建分支(因为工作中,可能每个人的开发的项目的都不一样)

 

我们在linux下首先学会本地查看和创建和切换分支

  1. [root@study gitroot]# git branch 查看
  2. * master
  3. [root@study gitroot]# git branch slave 创建slave
  4. [root@study gitroot]# git branch
  5. * master
  6. slave
  7. [root@study gitroot]# git checkout slave 切换
  8. Switched to branch 'slave'
  9. [root@study gitroot]# git branch
  10. master 可以看到*号改变了代表切换到了slave下
  11. * slave

尝试在本地slave分支下创建文件并上传。

  1. [root@study gitroot]# ls
  2. 1.txt 2.txt
  3. [root@study gitroot]# cat 1.txt
  4. 123123
  5. [root@study gitroot]# echo "abcd" > 1.txt 修改文件内容
  6. [root@study gitroot]# cat 1.txt
  7. abcd
  8. [root@study gitroot]# git branch 目前在slave上
  9. master
  10. * slave
  11. [root@study gitroot]# git add 1.txt 添加上传
  12. [root@study gitroot]# git commit -m "change 1.txt"
  13. [slave f870962] change 1.txt
  14. 1 file changed, 1 insertion(+), 1 deletion(-)
  15. [root@study gitroot]# ls
  16. 1.txt 2.txt
  17. [root@study gitroot]# git checkout master 切换会主分支
  18. Switched to branch 'master'
  19. [root@study gitroot]# ls
  20. 1.txt 2.txt
  21. [root@study gitroot]# cat 1.txt 查看1.txt内容,可以看到跟上从分支是不一样的
  22. 123123
  23. [root@study gitroot]# git checkout slave
  24. Switched to branch 'slave'
  25. [root@study gitroot]# cat 1.txt
  26. abcd
  27. [root@study gitroot]#

本地合并和删除分支

  1. git checkout master //合并分支之前,先切换到目标分支
  2. git merge slave //把slave分支合并到了master
  3. git branch -d slave//删除分支
  4. git branch -D slave //强制删除

使用分支的原则

  • 对于分支的应用,建议大家以这样的原则来:  master分支是非常重要的,线上发布代码用这个分支,平时我们开发代码不要在这个分支上。
  •  创建一个dev分支,专门用作开发,只有当发布到线上之前,才会把dev分支合并到master  
  • 开发人员应该在dev的基础上再分支成个人分支,个人分支(在自己pc上)里面开发代码,然后合并到dev分支

本地分支推送和克隆到远程

  1. 对于git push分支分两种情况  
  2. 当本地分支和远程分支一致时 git push会把所有本地分支的变更一同推送到远程
  3. 如果想只推送一个分支,使用git push origin branch-name
  4.  当本地分支比远程分支多,默认git push 只推送本地和远程一致的分支,想要把多出来的本地分支推送到远程时,使用git push origin branch-name  如果推送失败,先用git pull抓取远程的新提交  
  5. git clone的时候默认只把master分支克隆下来,如果想把所有分支都克隆下来,需要手动创建,在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称要一致

标签管理

git别名

搭建git服务器

 github毕竟是公开的,而私有仓库又得花钱买。所以我们可以想办法搭建一个私有的,只自己公司使用的。Gitlab是个不错的选择。在介绍它之前,先讲述一下命令行的git服务器  找一台服务器,

  1. 首先安装git yum install -y git
  2. 添加git用户 useradd -s  /usr/bin/git-shell git 
  3. cd /home/git  创建用户目录
  4. 在git目录下创建authorized_keys文件,并更改主/属和权限
  5. mkdir .ssh/
  6. touch .ssh/authorized_keys
  7. chown -R git:git .ssh
  8. chmod 600 .ssh/authorized_keys
  9. 创建仓库目录 mkdir /data/gitroot
  10. 创建一个裸仓库 git init --bare sample.git
  11. chown -R git:git sample.git  更改权限
  12. 然后在其他机器可以git clone git@ip:/data/gitroot/sample.git  此时就可以在当前目录下生成一个sample的目录,这个就是我们克隆的远程仓库了。进入到这里面,可以开发一些代码,然后push到远程

 

搭建一个gitlab

gitlab官网 https://about.gitlab.com/gitlab-com/

官方安装文档 https://about.gitlab.com/installation/?version=ce#centos-7 (ce/ee) 要求服务器内存不少于2g
 

  1.  vim /etc/yum.repos.d/gitlab.repo//加入如下内容
  2. [gitlab-ce]
  3. name=Gitlab CE Repository
  4. baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
  5. gpgcheck=0
  6. enabled=1
  7. yum install -y gitlab-ce
  8. gitlab-ctl reconfigure
  9. netstat -lnpt //查看监听端口
  10. gitlab-ctl stop/restart/start/status //停止或者开启、重启
  11. 浏览器访问gitlab,输入ip即可
  12. 默认管理员root,无密码,它会让我们去定义一个密码
  13. gitlab常用命令 https://www.cnyunwei.cc/archives/1204
  14. gitlab备份 gitlab-rake gitlab:backup:create
  15. 备份目录在/var/opt/gitlab/backups
  16. gitlab 恢复 先停服务 gitlab-ctl stop unicorn ; gitlab-ctl stop sidekiq
  17. gitlab-rake gitlab:backup:restore BACKUP=xxxxx (这里是一个编号,即备份文件的前缀)
  18. 再启动服务 gitlab-ctl start

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/960618
推荐阅读
相关标签
  

闽ICP备14008679号