版本控制svn

web1 搭服務
svn(Subversion)版本控制系統 (核心版本庫)
作用:允許你數據恢復到早期版本,檢查數據被修改歷史,允許和別人協作文檔,共享倉庫(任何人共享上傳下載,可以放rpm包)系統,拷貝修改合併。
1,裝包subversion軟件

[root@web1 ~]# yum -y install subversion
[root@web1 ~]# rpm -q subversion
2,創建版本庫


mkdir /var/svn
svadmin create /var/svn/project    【創建版本庫】(它會在東西載project下面)
[root@web1 ~]# ls /var/svn/project/
裏面有conf/  db/  format  hooks/  locks/  README.txt
用du -sh project  可以看project目錄文件大小
3,導入東西到上面那個空倉庫 ,cd到目標導入(隨便導,做測試)
cd /usr/lib/systend/system(啓動配服務的配置文件)
svn import 空格.空格 file:///var/svn/project/ -m "xxx" (導入是本機的上導入的。所以位置是本機上的)(-m後面寫的是改寫原因)
導入project成功後可以通過du -sh看大小來判斷是否有導入
以上倉庫以準備好,準備改寫配置文件 後啓動服務

4,改版本庫配置文件cd進入配置文件下可以看到三個配置文件,依次從右到左修改
[]cd /var/svn/project/conf/
authz  passwd   svnserver.conf
4.1,vim /var/svn/project/conf/svnserve.conf
:19 (行,去掉註釋#和前面空格,改寫第一個anon-access = none)
anon-access = none
//19行,匿名無任何權限
auth-access = write
//20行,有效賬戶可寫
//27行,密碼文件(激活)
34行去掉註釋#
4.2,vim /var/svn/project/conf/passwd    (團隊用戶數量)
[users]                                         users下添加用戶和密碼,按照模版
harry = pass                               不能有空格
//用戶名和密碼
tom = pass
//用戶名和密碼
4.3,vim /var/svn/project/conf/authz       改用戶讀寫權限 (某個頁面只有某某能看)
如:     [/test]            [ ]方括號代表目錄
             zhangsan = rw     表示zhangsan能對這個test目錄能讀能寫
*************************************
[/]                                //定義ACL訪問控制    規則
harry = rw                        //用戶對項目根路徑可讀可寫
tom = rw
* = r                            //其他人只讀
5,以上配置文件該完,準備啓動服務

svnserver -d -r /var/svn/project              -d放後臺  -r指定路徑    (之前建的倉庫是啥路徑就寫啥)
ss -nutulp | grep project  看看啓動沒有, 可以殺它進程關閉服務 killall

。。。。。。。。。。客戶端測試.web2。。。。。。。
首先裝包  yum -y install subversion
1)將服務器上的代碼下載到本地  ,進入tmp下(什麼目錄都可以,建議資料少點的) 建立一個本地副本
[root@web2 ~]# cd /tmp
[root@web2 ~]# svn --username harry --password pass checkout svn://192.168.2.100/ code
checkout剪出下載 可以縮寫co    需要用戶名和密碼才能執行這條命令,因爲配置文件該過讀寫回車後會自動剪刀出數據下來,/tmp下會出現一個code(剛剛命令創建的)
***修改數據後想上傳會版本庫裏 (修改的是你剪出的數據其中一項的等)
首先要進入你建立的庫[root@web2 ~]# cd /tmp/code
[root@web2 code]# ls                    查看有那些就剪下來的文件
[root@web2 code]# vim user.slice                 //挑選任意文件修改其內容
[root@web2 code]# svn ci -m "modify user"        //(co剪出下載,ci上傳 )    將本地修改的數據同步到服務器
****如果誤刪除可以還原
svn update  /將服務器上新的數據同步到本地
*****[root@web2 code]# svn info     svn://192.168.2.100    //查看版本倉庫基本信息
*****[root@web2 code]# svn log     svn://192.168.2.100    //查看版本倉庫的日誌
****在code下建立新文件需要將文件加入版本控制才能 提交成功
[root@web2 code]# echo "test" > test.sh        //本地新建一個文件
[root@web2 code]# svn ci -m "new file"            //提交失敗,該文件不被svn管理
[root@web2 code]# svn add test.sh                //將文件或目錄加入版本控制
[root@web2 code]# svn ci -m "new file"            //再次提交,成功
*****創建東西 不支持命令行的格式,要在前面加  svn,刪除也是一樣的道理,要加 svn 比如
[root@web2 code]# svn mkdir subdir                //創建子目錄
[root@web2 code]# svn rm timers.target            //使用svn刪除文件
[root@web2 code]# svn ci -m "xxx"                //提交一次代碼
*****查看那些文件被人修改過測試root@web2 code]# vim umount.target            //任意修改本地的一個文件
[root@web2 code]# svn diff                     //查看所有文件的差異     (可以開兩個窗口對比)
[root@web2 code]# svn diff umount.target        //僅查看某一個文件的差異
[root@web2 code]# svn cat svn://192.168.2.100/reboot.target    //查看服務器文件的內容
*****基本操作
[root@web2 code]# sed -i 'd' tmp.mount            //刪除文件所有內容,但未提交
[root@web2 code]# svn revert tmp.mount            //還原tmp.mount文件
[root@web2 code]# rm -rf  *.target      //任意刪除若干文件          
[root@web2 code]# svn update                 //還原   
[root@web2 code]# sed -i '1a #test###' tuned.service//修改本地副本中的代碼文件
[root@web2 code]# svn ci  -m  "xxx"//提交代碼
[root@web2 code]# svn merge -r7:2    tuned.service    //將文件從版本7還原到版本2

2案例2:使用Subversion協同工作

2) harry和tom修改不同的文件,兩個人都需要 svn update,升級最新版本。列如:
[root@web1 mycode]# sed -i "3a ###harry modify#####"  tmp.mount
[root@web2 mycode]# sed -i "3a ###tom modify#####"  umount.target
[root@web2 mycode]# svn update
[root@web1 mycode]# svn update
3)harry和tom修改相同文件的不同行
如果A先上傳到版本庫,那麼B 要先基與A的版本上進行修改,不然就算修改後也是無法提交的!!
所以B 需要先更新升級(svn update)(A的版本和你的版本合併,並不會覆蓋)才能進行更
4) harry和tom修改相同文件的相同行
[root@web1 mycode]# sed  -i  '1c [UNIT]' tuned.service
[root@web2 mycode]# sed  -i  '1c [unit]' tuned.service
[root@web2 mycode]# svn update   輸入命令後會出現衝突,需要解決(因爲ie版本庫已經無法判斷合併了)
Conflict discovered in 'tuned.service'.
Select: (p) postpone, (df) diff-full, (e) edit,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options:p                    //選擇先標記p,隨後解決
那隻能手動去大家都要改的文件裏查看操作了
[root@web2 mycode]# ls
tuned.service   tuned.service.mine        tuned.service.r10    tuned.service.r9 可以看到改過版本有那些了
那怎麼解決呢?     把多餘的全刪掉(除了差異版本和自己改寫的版本)。留下來的就是最終版本!!!
[root@web2 mycode]# rm  -rf  tuned.service.r10 tuned.service.r9
把自己的版本移動到差異版本(傳達一個我是對的信息)root@web2 mycode]# mv tuned.service.mine tuned.service
最後就可以提交了,就是屬於你的版本了# svn ci -m "modified"    //解決衝突
使用dump指令備份版本庫數據(萬一服務器掛掉了。。。所以每一段時間備份一下)

[root@web1 ~]# svnadmin dump /var/svn/project > project.bak  //備份
命令+dump 後面是倉庫位置 > 自己創建的備份文件(回車即開始備份)
從備份裏還原

大於號變小於號,用load
 svnadmin load /var/svn/project2 < project.bak  
命令+load 後面是倉庫位置 <自己創建的備份文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章