代码管理平台(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

yum install -y subversion
创建版本库 
mkdir -p /data/svnroot/myproject
svnadmin create /data/svnroot/myproject
cd /data/svnroot/myproject/conf

#authz为权限配置文件,passwd为密码文件

vim authz     //配置文件改为如下

[groups]
admins = aming,user1
[/]    #相对路径,/data/svnroot/myproject
@admins = rw  #admins用户组拥有 rw权限
*= r   #其它用户读权限

vim passwd    //加入如下内容

[users]    #用户名和密码
aming = aming_!(*$123
user1 = user1_^^^123
user2 = user2-***123

vim svnserver.conf    //更改或增加如下内容

[general]
anon-access = none    #匿名用户无权向
auth-access = write   #认证用户,有write权限
password-db = passwd  #passwd文件,位置
authz-db = authz      #认证文件,位置
realm = /data/svnroot/myproject #对于那个项目生效,绝对路径。

启动svn

svnserve -d -r /data/svnroot/myproject

-d:后台运行

客户端上使用svn(Linux)

yum install -y  subversion
svn checkout svn://192.168.133.130/myproject --username=aming
cd myproject ; ls -la
cp /etc/fstab .
svn add .  //添加到版本控制中心
svn commit -m “add file”   //把文件上传到服务器
svn delete filename   //在本地删除
svn commit -m “delete filename”   //在服务器上删除
svn update   //把当前目录下的文件都更新到最新版
svn log   //查看变更日志

客户端上使用svn(windows)

官网 https://tortoisesvn.net/index.zh.html
下载TortoiseSVN 并安装
简明教程 http://www.jianshu.com/p/6b3b7b915332

单机上使用git

yum install -y git
mkdir /data/gitroot
cd /data/gitroot
git init //初始化仓库
echo -e  “123\naaa\n456\nbbb” > 1.txt //创建一个新文件
git add 1.txt//把1.txt添加到仓库
git commit -m “add new file 1.txt”   //add完了必须要commit才算真正把文件提交到git仓库里
再次更改1.txt
git status  //查看当前仓库中的状态,比如是否有改动的文件
git diff 1.txt  //可以对比1.txt本次修改了什么内容,相比较仓库里面的版本

版本回退
多更改几次1.txt,然后add,commit
git log    //查看所有提交记录
git log --pretty=oneline    //一行显示
git reset --hard f7c8e9    //回退版本,其中后面跟的字符串是简写
撤销修改
rm -f 1.txt    //不小心删除了1.txt
git checkout -- 1.txt    //恢复1.txt
如果1.txt文件修改,add后但没有commit,再想回退到上一次提交的状态,可以使用 git reset HEAD 1.txt,再执行 git checkout -- 1.txt
git reflog //查看所有历史版本

删除文件 
echo -e "11111111111\n2222222222" > 2.txt 
git rm 2.txt 
git commit -m "rm 2.txt"

git建立远程仓库

首先到 https://github.com 注册一个账号,创建自己的git,点repositories 再点new
名字自定义,比如叫studygit  选择public  点 create repository
添加key:右上角点自己头像,选择settings,左侧选择SSH and GPG keys
左侧点New SSH key,把linux机器上的~/.ssh/id_rsa.pub内容粘贴到这里
把本地仓库推送到远程仓库 git remote add origin git@github.com:aminglinux/studygit.git  //这一步是在远程创建一个新的仓库studygit,名字尽量和本地的一致
git push -u origin master  //然后把本地的studygit仓库推送到远程的studygit
下一次再推送,就可以直接 git push 

克隆远程仓库

cd /home
git clone  git@github.com:aminglinux/lanmp.git
它提示,会在当前目录下初始化一个仓库,并创建一个.git的目录,如下
Initialized empty Git repository in /home/lanmp/.
git/完成后,ls可以看到一个lanmp的目录
cd  lanmp
vi lanmp.sh 编辑一下文件,然后提交
git add lanmp.sh
git commit -m "sdlfasdf" 
然后再推送到远程服务端
git push

分支

git branch //查看分支
git branch aming  //创建分支
git checkout  aming //切换到了aming分支下
再用git branch查看,会看到有两个分支master和aming,当前使用的分支前面会有一个*在aming分支下 ,编辑2.txt,并提交到新分支
echo "askdfjlksadjflk" >  2.txt
git add 2.txt
git commit -m "laksjdflksjdklfj" 
切换回master分支
git checkout master //此时cat 2.txt发现并没有更改内容

分支的合并

git checkout master //合并分支之前,先切换到目标分支 
git merge aming   //把aming分支合并到了master
如果master分支和aming分支都对2.txt进行了编辑,当合并时会提示冲突,需要先解决冲突才可以继续合并。
解决冲突的方法是在master分支下,编辑2.txt,改为aming分支里面2.txt的内容。 然后提交2.txt,再合并aming分支。
但是这样有一个问题,万一master分支更改的内容是我们想要的呢? 可以编辑2.txt内容,改为想要的,然后提交。切换到aming分支,然后合并master分支到aming分支即可(倒着合并)。合并分支有一个原则,那就是要把最新的分支合并到旧的分支。也就是说merge后面跟的分支名字一定是最新的分支。
git  branch -d aming //删除分支
如果分支没有合并,删除之前会提示,那就不合并,强制删除
git branch -D aming

使用分支的原则

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

0c475eab843cb9e574c7a634e8a88925508.jpg

dev分支合并bob分支的命令是:
git checkout dev   //先切换到dev分支,然后
git merge bob

远程分支

本地新建的分支如果不推送到远程,对其他人就是不可见的
查看远程分支  git ls-remote origin,可以看到所有分支
对于git push分支分两种情况:
当本地分支和远程分支一致时,
git push会把所有本地分支的变更一同推送到远程,如果想只推送一个分支,使用git push origin branch-name
当本地分支比远程分支多,默认git push 只推送本地和远程一致的分支,想要把多出来的本地分支推送到远程时,使用git push origin branch-name  如果推送失败,先用git pull抓取远程的新提交
git clone的时候默认只把master分支克隆下来,如果想把所有分支都克隆下来,需要手动创建,在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称要一致

标签管理

标签类似于快照功能,可以给版本库打一个标签,记录某个时刻库的状态。也可以随时恢复到该状态。
git checkout master 先切到master分支上
git tag v1.0  给master打一个标签v1.0
git show v1.0 查看标签信息
git tag 可以查看所有的标签
tag是针对commit来打标签的,所以可以针对历史的commit来打tag
git log --pretty=oneline --abbrev-commit  //先查看历史的commit
git tag v0.9 46d3c1a  //针对历史commit打标签
git tag -a v0.8 -m "tag just v1.1 and so on" 5aacaf4  //可以对标签进行描述
git tag -d v0.8  //删除标签
git push origin v1.0   //推送指定标签到远程
git push --tag origin   //推送所有标签
如果本地删除了一个标签,远程也想要删除需要这样操作:
git tag v1.0 -d    //删除本地标签
git push origin :refs/tags/v1.0   //删除远程标签

git别名

git commit 这个命令是不是有点长? 用别名可以提高我们的工作效率
git config --global alias.ci commit
git config --global alias.co  checkout
git config --global alias.br  branch
查看git别名使用命令
git config --list |grep alias
查询log小技巧:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

取消别名
git config --global --unset alias.br 

搭建git服务器

github毕竟是公开的,而私有仓库又得花钱买。所以我们可以想办法搭建一个私有的,只自己公司使用的。Gitlab是个不错的选择。在介绍它之前,先讲述一下命令行的git服务器
找一台服务器,首先要安装git,yum install git 
添加git用户,并且设置shell为 /usr/bin/git-shell,目的是为了不让git用户远程登陆
useradd -s /usr/bin/git-shell git 
cd /home/git
创建authorized_keys文件,并更改属主、属组和权限,用来存客户端机器上的公钥
mkdir .ssh
touch .ssh/authorized_keys
chown -R git.git .ssh
chmod 600 .ssh/authorized_keys

定好存储git仓库的目录,比如 /data/gitroot
mkdir /data/gitroot
cd /data/gitroot
git init --bare sample.git    //会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾
chown -R git.git sample.git
以上操作是在git服务器上做的,平时git服务器是不需要开发人员登录修改代码的,它仅仅是充当着一个服务器的角色,就像github一样,平时操作都是在我们自己的pc上做的
首先要把客户端上的公钥放到git服务器上/home/git/.ssh/authorized_keys文件里
在客户端上(自己pc)克隆远程仓库:
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

vim /etc/yum.repos.d/gitlab.repo

[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1

yum install -y gitlab-ce    //安装

gitlab-ctl reconfigure  //配置

netstat -lnpt  //查看监听端口
gitlab-ctl stop/restart/start/status
浏览器访问gitlab,输入ip即可
默认管理员root,无密码,它会让我们去定义一个密码
gitlab常用命令  https://www.cnyunwei.cc/archives/1204
gitlab备份  gitlab-rake gitlab:backup:create
备份目录在/var/opt/gitlab/backups
gitlab 恢复  先停服务 gitlab-ctl stop unicorn ; gitlab-ctl stop sidekiq
gitlab-rake gitlab:backup:restore BACKUP=xxxxx (这里是一个编号,即备份文件的前缀)
再启动服务 gitlab-ctl start 

扩展

同学分享的svn文档  http://note.youdao.com/noteshare?id=1bb87a28a2973ae5722bf765882c2d8f
svn 多仓库管理  http://elim.iteye.com/blog/1171108
svn+ssh  http://www.linuxfly.org/post/450/
svn清除保存的用户名和密码  http://holy2010.blog.51cto.com/1086044/645944
svn命令详解  http://blog.sina.com.cn/s/blog_963453200101eiuq.html
svn的钩子  http://coolnull.com/1716.html
gitlab修改端口  http://blog.csdn.net/arybd/article/details/54635295
修改主机名 http://www.mamicode.com/info-detail-1316828.html
第三方邮件 http://blog.csdn.net/liuruiqun/article/details/50000213
server ssh 端口并不是22  http://www.cnblogs.com/limx/p/5709101.html   http://www.linuxidc.com/Linux/2017-02/141043.htm  
应该修改  /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
# If you use non-standard ssh port you need to specify it
ssh_port: xxxxx
gitlab的钩子相关配置 http://fighter.blog.51cto.com/1318618/1670667

转载于:https://my.oschina.net/u/3993922/blog/3017699

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值