22.1 代码管理平台介绍
22.2 安装svn
22.3 客户端上使用svn(linux)
22.4 客户端上使用svn(windows)
22.5 22.6 单机上使用git
22.1 代码管理平台介绍
要了解的常识
版本控制,记录若干文件内容变化,以便将来查阅特定版本修订情况
版本管理工具发展简史,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,两者没有直接关系
22.2 安装svn
1 安装svn
yum install -y subversion
2 创建版本库 (可以理解为项目)
mkdir -p /data/svnroot/myproject
3 初始化版本库
svnadmin create /data/svnroot/myproject
# ls -la !$ ls -la /data/svnroot/myproject/ 总用量 8 drwxr-xr-x 6 root root 86 8月 29 16:27 . drwxr-xr-x 3 root root 23 8月 29 16:27 .. drwxr-xr-x 2 root root 54 8月 29 16:27 conf drwxr-sr-x 6 root root 233 8月 29 16:27 db -r--r--r-- 1 root root 2 8月 29 16:27 format drwxr-xr-x 2 root root 231 8月 29 16:27 hooks drwxr-xr-x 2 root root 41 8月 29 16:27 locks -rw-r--r-- 1 root root 229 8月 29 16:27 README.txt #authz为权限配置文件,passwd为密码文件 # cd /data/svnroot/myproject/conf/ ; ls authz passwd svnserve.conf
4 vim authz //配置文件改为如下
vim authz [groups] admins = kevin,user1 [/] @admins = rw *= r [myproject:/] user1 = rw
解释:
第一种形式
[groups]
项目,针对项目下面进行设行权限设置
admins = kevin,user1
组名:admins
组用户:kevin,user1
[/]
目录,这里的目录指的是刚刚初始化的目录,那就是:/data/svnroot/myproject
也可以子目录管理模式:[/dir1][/dir1/dir2]
@admins = rw
admins只可以拥有rw权限,
*= r
*表示所有,这个配置的意思是所有
第二种形式
[myproject:/]
myproject是项目的名称
这种情况用在/svnroot 有多个项目的情况下,如果只有一个项目,就用第一种。
user1 = rw
user1是rw形式
5 设置密码
vim passwd //加入如下内容 [users] kevin = kevin_!(*$123 user1 = user1_^^^123 user2 = user2-***123
解释:
格式:用户 = 密码
6 配置svnsever.conf
vim svnserver.conf //更改或增加如下内容 [general] anon-access = none auth-access = write password-db = passwd authz-db = authz realm = /data/svnroot/myproject
解释:
anon-access = none
匿名用户权限,none表示无
auth-access = write
授权用户权限,可写
password-db = passwd
用户的密码数据文件存放在:passwd , 后面带的是文件。
authz-db = authz
权限控制文件:authz ,后面带的是文件。
realm = /data/svnroot/myproject
需要生效的项目目录,需要写绝对路径。
7 启动svn
这样就启动了,-d后台启动,-r指定目录
svnserve -d -r /data/svnroot
# ps aux |grep svn root 18654 0.0 0.0 162240 656 ? Ss 10:34 0:00 svnserve -d -r /data/svnroot/ root 18656 0.0 0.0 112720 984 pts/0 S+ 10:34 0:00 grep --color=auto svn [root@9F-VM1 conf]# netstat -lntp|grep svn tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 18654/svnserve # netstat -lntp |grep svnserve tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 18654/svnserv
c/s架构访问需要确保是否已经关闭防火墙(iptables,selinux)
22.3 客户端上使用svn(linux)
1 client安装svn
yum install -y subversion
2 创建myproject的项目相关目录
在server上面建立项目的目录,稍后client有需要建立
[root@9F-VM1 ~]# mkdir -p /home/svntest [root@9F-VM1 svntest]# cd /home/svntest/
#首次连接svn,记录svn的登录信息,在哪个目录checkout就在哪里获得登录信息。
svn checkout svn://192.88.29.250/myproject --username=kevin 认证领域: <svn://192.88.29.250:3690> /data/svnroot/myproject “kevin”的密码: ----------------------------------------------------------------------- 注意! 你的密码,对于认证域: <svn://192.88.29.250:3690> /data/svnroot/myproject 只能明文保存在磁盘上! 如果可能的话,请考虑配置你的系统,让 Subversion 可以保存加密后的密码。请参阅文档以获得详细信息。 你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”, 来避免再次出现此警告。 ----------------------------------------------------------------------- 保存未加密的密码(yes/no)?yes 取出版本 0。
解释:
版本号 0
密码信息修改可以在“/root/.subversion/servers”中设置
在哪个目录登录就在哪个目录产生项目,此处的项目名称是myproject
3 项目生产的文件,
cd myproject ; ls -la # cd myproject/ ; ls -la 总用量 0 drwxr-xr-x 3 root root 18 8月 30 11:27 . dr-xr-x---. 4 root root 207 8月 30 11:27 .. drwxr-xr-x 4 root root 75 8月 30 11:27 .svn
4 client也是如此手动建立初始目录
cd /root/ svn checkout svn://192.88.29.250/myproject --username=kevin ls anaconda-ks.cfg myproject svntest.txt cd myproject ; ls -la # ls -la 总用量 4 drwxr-xr-x 3 root root 37 8月 30 11:46 . dr-xr-x---. 4 root root 226 8月 30 11:45 .. drwxr-xr-x 4 root root 75 8月 30 11:47 .svn
5 测试
5.1 在client操作
#复制文件到项目目录中
cp /root/svntest.txt .
#将文件添加到版本控制中心
svn add . /svntest.txt
#把文件上传到服务器
svn commit -m “add file” # svn commit -m "add svntest.txt" 正在增加 svntest.txt 传输文件数据. 提交后的版本为 1。
5.2 在server操作
进行同步:svn upadte,把当前目录下的文件都更新到最新版
[root@9F-VM1 myproject]# svn update 正在升级 '.': 版本 1。 [root@9F-VM1 myproject]# ls svntest.txt
可以看到svntest.txt已经从client同步过来了。
#在服务器上删除
svn commit -m “delete filename”
#修改代码
svn commit -m “ch filename”
例子:client在svntest.txt增加内容
[root@9F-VM2 myproject]# vim svntest.txt 11111 2222 333 [root@9F-VM2 myproject]# svn commit -m "ch svntest.txt" 正在发送 svntest.txt 传输文件数据. 提交后的版本为 2。
6 在回到server上同步数据,
[root@9F-VM1 myproject]# svn up 正在升级 '.': U svntest.txt 更新到版本 2。 [root@9F-VM1 myproject]# cat svntest.txt 11111 2222 333
#在本地删除
svn delete filename
#查看变更日志
svn log [root@9F-VM1 myproject]# svn log ------------------------------------------------------------------------ r2 | kevin | 2018-08-30 15:13:39 +0800 (四, 2018-08-30) | 1 行 ch svntest.txt ------------------------------------------------------------------------ r1 | kevin | 2018-08-30 11:47:39 +0800 (四, 2018-08-30) | 1 行 add svntest.txt ------------------------------------------------------------------------
22.4 客户端上使用svn(windows)
官网 https://tortoisesvn.net/index.zh.html
下载TortoiseSVN 并安装
简明教程 http://www.jianshu.com/p/6b3b7b915332
使用:
1 在windows建立项目文件夹,
2 选中项目文件夹,选择svn checkout选项
3 项目地址:svn://192.88.29.250/myproject
checkout目录:自定义
4 创建文件,例如txt文件,键入内容。。。。
5 创建成功后,右击文件"svn add" ,add后再次右击文件,进行SVN commit,
6 commit后,需要增加说明,说明是必须操作的一步。
7 在linux任意c/s进行svn up进行同步即可
如果想在windows进行同步,同样原理:右击选中项目文件夹,进行update即可。
22.5 单机上使用git(上)
1 安装git以及创建相关目录
yum install -y git mkdir /data/gitroot cd /data/gitroot
2 初始化仓库
git init # git init 初始化空的 Git 版本库于 /data/gitroot/.git/ 初始化后,生成.git的目录 #ls -la 总用量 0 drwxr-xr-x 3 root root 18 8月 30 16:34 . drwxr-xr-x 6 root root 67 8月 30 16:33 .. drwxr-xr-x 7 root root 119 8月 30 16:34 .git
3 创建一个新文件,并追加内容
#echo -e “123\naaa\n456\nbbb” > 1.txt #cat 1.txt 111 222 333
4 把1.txt添加到仓库
git add 1.txt
5 add完了必须要commit才算真正把文件提交到git仓库里
git commit -m “add new file 1.txt”
# git commit -m "add 1.txt" [master(根提交) a115137] add 1.txt 1 file changed, 3 insertions(+) create mode 100644 1.txt
再次更改1.txt
echo -e "444\n555\n666" >>1.txt cat 1.txt 111 222 333 444 555 666
再次add,再次commit
# git add 1.txt # git commit -m "add 1.txt again" [master ca9c291] add 1.txt again 1 file changed, 3 insertions(+)
#查看当前仓库中的状态,比如是否有改动的文件
# git status # 位于分支 master 无文件要提交,干净的工作区
如果修改了1.txt内容,但是没有git add,但git status会出现以下提示
echo -e "aaa\nbbb" >> 1.txt git status # 位于分支 master # 尚未暂存以备提交的变更: # (使用 "git add <file>..." 更新要提交的内容) # (使用 "git checkout -- <file>..." 丢弃工作区的改动) # #修改: 1.txt # 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
6 可以对比1.txt本次修改了什么内容,相比较仓库里面的版本
# git diff 1.txt diff --git a/1.txt b/1.txt index 62b65c9..33f8125 100644 --- a/1.txt +++ b/1.txt @@ -4,3 +4,5 @@ 444 555 666 +aaa +bbb
版本回退
多更改几次1.txt,然后add,commit
删除1.txt 中的 444 5555 两段字符
# git add 1.txt # git commit -m "ch 1.txt again" [master 0a8eb9d] ch 1.txt again 1 file changed, 2 insertions(+), 2 deletions(-)
git log //查看所有提交记录
查看日志
git log --pretty=oneline //一行显示 # git log --pretty=oneline 0a8eb9df92f9fb1cb833a6c50161db036a27dd37 ch 1.txt again ca9c291b3fab3e09cb2dc6530554e5dd399d66ec add 1.txt again a1151376acc51fe31277d7f96e5a4a2f73b4bda2 add 1.txt
解释:
ca9c291b3fab3e09cb2dc6530554e5dd399d66ec add 1.txt again
行首第一段是版本的id号
版本号是从下往上的,最上的是最新的。
7 #回退版本,其中后面跟的字符串可简写
格式: git reset --hard f7c8e9
[root@9F-VM1 gitroot]# git reset --hard ca9c291b3fab3 HEAD 现在位于 ca9c291 add 1.txt again [root@9F-VM1 gitroot]# git log --pretty=oneline ca9c291b3fab3e09cb2dc6530554e5dd399d66ec add 1.txt again a1151376acc51fe31277d7f96e5a4a2f73b4bda2 add 1.txt
回退成功
8 查看所有历史版本
# git reflog ca9c291 HEAD@{0}: reset: moving to ca9c291b3fab3 0a8eb9d HEAD@{1}: commit: ch 1.txt again ca9c291 HEAD@{2}: commit: add 1.txt again a115137 HEAD@{3}: commit (initial): add 1.txt
如果要回到指定版本号,命令执行回到即可。
# git reset --hard 0a8eb9d HEAD 现在位于 0a8eb9d ch 1.txt again # git log --pretty=oneline 0a8eb9df92f9fb1cb833a6c50161db036a27dd37 ch 1.txt again ca9c291b3fab3e09cb2dc6530554e5dd399d66ec add 1.txt again a1151376acc51fe31277d7f96e5a4a2f73b4bda2 add 1.txt
9 撤销修改
rm -f 1.txt//不小心删除了1.txt
git checkout -- 1.txt//恢复1.txt
rm -f 1.txt ls git checkout -- 1.txt ls 1.txt
因为文件存放在版本库里面,就算文件被删掉了也能找回来。
如果1.txt文件修改,add后但没有commit,再想回退到上一次提交的状态,可以使用git reset HEAD 1.txt,再执行git checkout -- 1.txt
删除其中几行字段
22.6 单机上使用git(下)
1 删除文件
#在版本号删掉
git rm 2.txt
#在库里面删掉
git commit -m "rm 2.txt"
2 检查
git checkout -- 2.txt ls
3 文件恢复
# git reflog eb3cb57 HEAD@{0}: commit: delete 2.txt 244548b HEAD@{1}: commit: add 2.txt 0a8eb9d HEAD@{2}: reset: moving to 0a8eb9d ca9c291 HEAD@{3}: reset: moving to ca9c291b3fab3 0a8eb9d HEAD@{4}: commit: ch 1.txt again ca9c291 HEAD@{5}: commit: add 1.txt again a115137 HEAD@{6}: commit (initial): add 1.txt # git reset --hard 244548b8059b HEAD 现在位于 244548b add 2.txt # ls 1.txt 2.txt # cat 2.txt 111 222 333