svn/subversion 集中式版本控制
1.安装
linux
yum -y install subversion #内置客户端与服务端
2.命令
(补充术语:版本库=线上版本库 工作副本=已加入版本控制的本地库)
服务器端命令:
svnadmin create /path/repos 创建版本库,可以追加相对路径或者绝对路径
--fs-type 后可追加存储格式选项
fsfs 常用格式
dbd
rm -rvf /path/repos 删除版本库
svnserve -d -r /svnroot/imooc 运行次版本库
--listen-port 指定端口
版本库配置及权限管理:
/path/repos/conf/ 配置文件位置
passwd 配置用户名和密码
user1 = passwd1
user2 = passwd2
svnserve.conf 配置默认权限、权限配置文件及密码配置文件位置
anon-access = read/write/none 未经认证用户默认权限
auth-access = read/write/none 已认证用户默认权限
password-db = passwd passwd文件路径
authz-db = authz auth文件路径
auth 配置用户组以及用户组权限
[aliases] 别名 一般不用
[groups] 用户组
pm = user1
dev = user1,user2
[/] 表示版本库的根目录,多个版本库的auth可以同时指向一个
@pm = rw 如果是组前缀需要加@
@dev = r
user3 = rw
[imooc:/] 表示名为imooc的版本库跟目录
@pm = rw
user1 = r
user2 = 表示无权限
* = r *表示所有用户
客户端命令
Linux:
mkdir svntest && cd svntest 创建一个存放目录
svn
co/checkout svn://192.168.0.1 检出并更新版本库,目录包含.svn隐藏文件夹用来记录工作副本的一切变化,在版本控制之下
--username NAME
--password PASSWD
-r 2 检出版本2
后面可以不追加用户密码,但是需要输入一下所使用的的系统用户密码
export 导出,用法与checkout相同,导出目录下无.svn隐藏文件夹,不在版本控制之下
add 添加到版本控制
--non-recursive 不递归增加
* 表示所以文件
force 强制执行
ci/commit 提交修改到服务端(创建一个新版本号)
-m "" 提交备注,必须要加的选项
--no-unlock 提交文件后不自动解锁
up/update 全目录更新到最新版本
-r 1 标识更新到版本1
* 强制所有副本更新到最新版本
del/delete/rm/remove 从版本库中删除文件或目录
-m "" 备注,可不加
然后需要执行提交操作,相当于版本变化
diff/di 版本库与本地库差异比较
-r 2 表示本地库与版本号为2的版本库进行差异比较
-r 1:3 表示版本库版本为1跟版本为3的内容进行差异比较
- 前缀表示版本库中最新版本内容
+ 表示本地库内容
如果有差异会把版本库与本地库都表示出来
mkdir 创建目录并直接加入到版本控制中
cat 不检测工作副本的情况下直接查看指定文件
例:svn cat svn://192.168.0.130/index.html
revert FILENAME|* 还原本地工作副本最后一次更新的状态(与reset回滚不同,revert会提取你指定的版本并再次提交)
--recursive 递归还原
lock 锁定文件,防止其他人员对文件进行提交,当自己进行提交后文件会自动解锁
unlock
list/ls 列出当前目录下处于版本控制的所有文件
--recursive 递归
-v 详情,依次显示最后一次提交的版本、用户、大小、时间
status 列出工作副本中的文件(夹)的最后一次被改动后的状态
标记代表的状态:
? 无版本控制
D 已被标记从版本库中删除
M 已被编辑过
A 已被标记增加到版本控制中
R 文件被替换
C 文件存在冲突
! 文件缺失
log 查看提交日志(来自svn ci的-m参数)
info 工作副本及文件(夹)的详细信息
--xml 以xml格式输出
copy/cp 复制文件或目录并加入到版本库中,可复制多个
-r 指定版本
示例:
svn cp -r 4 index.html copy.html 指定版本复制
svn cp index.html copy.html ./temp 多个复制
svn cp index.html svn://192.168.10.1/imooc/target.html -m " " 跳过版本库直接加到线上版本库中,不能跨库执行
svn cp svn://192.168.10.1/imooc/target.html index.html 从线上版本库复制到工作副本,支持跨库操作
svn cp svn://192.168.10.1/imooc/ svn://192.168.10.1/imooc//trunk -m " " 脱离工作副本,不支持跨库
swich/sw 版本库重径向
--relocate 重径向
示例:
svn sw --relocate svn://192.168.0.1/old svn://192.168.0.1/new
windos
TortoiseSVN : http://tortoisesvn.net/downloads.html 客户端下载地址
VisualSVN : http://www.visualsvn.com/server/download 服务端下载地址
安装小乌龟工具
创建文件夹,并鼠标右击选择 svn检出
输入svn的URL
代码冲突
代码冲突:多个程序员同时更改相同位置代码,并且更改前并未及时更新本地代码导致版本不同,服务器不知道需要保留哪个版本的修改而产生冲突
例:提交代码时提示‘is out fo data’ 一般为代码冲突
代码冲突更新代码时会提示 ‘conflict discovered’
此时会有提示选项:
p 延迟提交,延迟后会把冲突的内容发送到本地,而不会影响线上版本
延迟后可以直接编辑源文件进行修改
也可以#svn resolve FILENME 命令进行解决冲突
df 差异对比
e 编辑文件
mc 保存自己代码
tc 保存他人代码
处理完冲突后需要告诉服务端冲突已处理才能进行接下来的提交代码
#svn resolved FILENAME
树冲突:非二进制文件冲突,无法精准到行,而且处理树冲突必须处理整个文件
多版本库解决方案:
svn默认端口号:3690
多端口号:
运行命令:
svnserver -d -r /svnroot/hello --listen-port 3691
svnserver -d -r /svnroot/word --listen-port 3692
检出命令:
svn co svn://192.168.10.1:3691 SVNNAME1
svn co svn://192.168.10.1:3691 SVNNAME2
多路径方式
前提条件:多个版本库必须在同一目录下
运行命令:
svnserver -d -r /svnroot/
检出命令:
svn co svn://192.168.10.1/SVNNAME1
svn co svn://192.168.10.1/SVNNAME2
主干版本与分支版本:
目的:多版本并行开发
svn cp svn://192.168.10.1/imooc/ svn://192.168.10.1/imooc/trunk -m " " 创建主干版本
svn cp svn://192.168.10.1/imooc/trunk svn://192.168.10.1/imooc/branch -m " " 创建分支版本
管理svn,需重启操作生效
hooks钩子应用
钩子:当执行某些特定操作时触发执行预先设定好的任务
可查看版本库中hooks文件夹的模板
前缀:
start 表示数据传输开始之前
pre 数据传输之后,写入版本库之前
post 写入版本库之后
添加钩子时需要把后缀删掉然后按需求编写shell脚本
版本库精简/备份版本库
停止版本库
killall svnserver
备份需要的版本库
例如备份版本6到16的版本库
svnadmin dump /svnroot/imooc -r 6:16 > ~/imooc.repo
创建一个新的版本库
svnadmin create /svnroot/newimooc
加载备份数据
svnadmin load /svnroot/newimooc < ~/imooc.repo
复制所有配置文件到新版本库
运行版本库
客户端需要重新检出工作副本
注意:精简之后版本库的版本号还是从1开始往后递加
备份版本库第二中方法
停止版本库
把整个版本库目录打包压缩
复制解压到新服务器上并解压
在新版本库上运行
git 分布式版本控制
关系:
git 分布式管理系统
gitlab 企业私有库
github 公网共享库,全球最大的代码托管网站、开源网站、交流网站
安装:
Linux
1.yum -y install git 版本比较老
2. 编译安装较新版本
安装依赖
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
下载解压
wget https://github.com/git/git/archive/v2.7.4.zip
unzip v2.7.4.zip
cd git-2.7.4
编译安装
make prefix=/usr/local/git all
make prefix=/usr/local/git install
rm -rf /usr/bin/git
ln -s /usr/local/git/bin/git /usr/bin/git
git --version
配置用户名和邮箱:
git config --global user.name 'NAME'
git config --global user.email 'MAIL'
git config --global --list 查看
windos
进入官网,找到下载安装包进行安装
定义:
四个区域:
远程仓库
本地仓库
暂存区域
工作目录
文件的四个状态:
untracked 未纳入版本控制的状态
unmodified 纳入本地仓库中(commit)
modified 修改unmodified状态的文件,状态会变成modified的文件状态,并且从本地仓库回到工作目录中
staged 纳入版本管理的文件(add);暂存区中
常用命令:
Linux:
git
--version
init 初始化,并加入版本控制
add 添加到暂存区
fetch 拉取
commit
-m
status 查看改动
-s 状态概览
diff
--staged
log
--author='' 过滤名字
--pretty=oneline FILE 可查看文件的提交的id和改动注释
-p FILE 查看文件具体修改的内容
--oneline 查看简写日志
--graph 查看版本路线
rm 从版本库中移除
--cached FILENAME 从暂存区中移除,并移出版本控制
mv
show ID 查看提交的详情
checkout (切换指针,可以来回切换,与reset只能回滚不同)
ID -- FILE 指定文件复位到ID的版本
-- FILE 工作目录改动后可还原到未改动时的状态
BRANCHNAME 切换分支
-b BRANCHNAME 创建并切换分支
reset 回滚
--soft ID 回滚版本库到指定ID,工作目录和暂存区不动
--mixed ID (默认)回滚版本库到指定ID,缓存区被清空
--hard ID 回滚版本库到指定ID,暂存区和工作目录复位到ID的版本
省略ID写法(需大写HEAD):
HEAD FILENAME 取消add(追踪)操作,也就是取消暂存区操作
HEAD^ 复位到上一个版本(一个^表示复位一个版本,同理^^表示复位上两个版本)
HEAD~2 等同于 HEAD^^
例:
git reset HEAD home/home.html
git reset HEAD^^ home/home.html
git reset HEAD~2 home/home.html
push 远程推送
REPONAME(远程仓库名)
BRANCHNAME(分支)
TAGNAME
--delete BRANCHNAME 删除远程仓库分支
pull 直接拉取最新版本的代码并直接与本地合并
fetch 拉取最新代码,需手动与本地代码合并
tag 查看标签(相当于做一次快照)
-a 手动编写注释信息
TAGNAME 创建标签,默认加在最新一次的commit上
ID 标签创建在此ID上
-d TAGNAME 删除标签
branch 查看分支
BRANCHNAME 创建分支
-d BRANCHNAME 删除分支
-D BRANCHNAME 强制删除
-v
--merge 查看已合并的分支
--no-merge 查看未合并的分支
merge(master上执行)
BRANCHNAME
--abort 忽略其他代码,保留原分支代码(代码冲突;也可以手动修改)
clong URL BRANCH 远程克隆分支
reflog 查看包括reset完成时之前的记录和ID,然后可以通过checkout ID 切换指针,其他不变,可以新建分支合并还原
remote 显示远程仓库
-v
-add REPONAME URL 添加一个远程库
补充:
安装谷歌访问助手
octotree插件
作用:可以树状显示仓库
enhanced github
作用:可查看单个文件的大小,并可以下载单个文件
gitzip for github
作用: 直接下载文件夹
gitlab gitlab包 官网 https://about.gitlab.com/downlads 清华镜像 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
安装:
(1)依赖
sudo yum install curl policycoreutils openssh-server openssh-clients
sudo systemctl enable sshd
sudo systemctl start sshd
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
sudo firewall-cmd --permanent --add-service=http
sudo systemctl reload firewalld
(2)安装
rpm -ivh gitlab-ce-7.10.0~omnibus.2-1.x86_64.rpm
(3)配置(ruby语言编写)
vim /etc/gitlab/gitlab.rb
external_url 'URL'
gitlab-ctl reconfigure 配置生效
gitlab-ctl show-config 验证配置
gitlab-ctl status 查看
可以直接访问URL登录界面
组件: 目录:
命令:
gitlab-ctl
status
start
stop
restart
tail nginx 查看日志
认证:
生产中往往会开通ldap统一账户管理中心
Linux
通过ssh登录需要生成免密的公钥,导入到gitlab中
http登录可以通过设置好的账号密码
Windos
需要安装一个git客户端其他同Linux
管理员
Deploy Keys :只有下载权限的Keys,主要用于jenkins
备份
vim /etc/gitlab/gitlab.rb
gitlab_rails['backup_path']='/data/backup/gilab' 备份路径
gitlab_rails['backup_keep_time']=604800 备份有效时间,默认为7天
gitlab-ctl reconfigure 生效
gitlab-ctl restart
创建目录并授权git用户
crontab -l 创建计划任务备份全库
0 2 * * * /usr/bin/gitlab-rake gitlab:backup:create
恢复
停止数据写入服务:
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-rake gitlab:backup:restore BACKUP=1492296095
gitlab-ctl restart
邮件通知配置
sourcetree 工具
|