22.1 代碼管理平臺介紹html
22.2 安裝svnlinux
22.3 客戶端上使用svn(linux)git
22.4 客戶端上使用svn(windows)github
22.5 22.6 單機上使用gitweb
22.1 代碼管理平臺介紹vim
要了解的常識windows
版本控制,記錄若干文件內容變化,以便未來查閱特定版本修訂狀況bash
版本管理工具發展簡史,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