22.1-22.6 代码管理平台,安装svn以及使用(linux,windows),单机使用git

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//配置文件改为如下

[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


猜你喜欢

转载自blog.51cto.com/13578154/2167222
今日推荐