爲何會出現源代碼管理工具?安全
爲了解決在軟件開發過程當中,由源代碼引起的各類蛋疼、繁瑣的問題服務器
源代碼會引起哪些問題?app
沒法後悔:作錯了一個操做後,沒有後悔藥能夠吃分佈式
版本備份:費空間、費時間svn
版本混亂:因版本備份過多形成混亂,難於找回正確的想要的版本工具
代碼衝突:多人操做同一個文件(團隊開發中的常見問題)post
權限控制:沒法對源代碼進行精確的權限控制spa
追究責任:出現了嚴重的BUG,沒法得知是誰幹的,容易耍賴命令行
… …3d
源代碼管理工具就是爲了解決上述問題而生的!此乃軟件開發的一大福音!
CVS
開啓版本控制之門
1990年誕生,「遠古時代」的主流源代碼管理工具
SVN
全稱是Subversion,集中式版本控制之王者
是CVS的接班人,速度比CVS快,功能比CVS多且強大
在國內軟件企業中使用最爲廣泛(70%~90%)
概念:
1> Repository 代碼倉庫,保存代碼的倉庫
2> Server 服務器,保存全部版本的代碼倉庫
3> Client 客戶端,只保存當前用戶的代碼倉庫
4> 用戶名&密碼 訪問代碼倉庫須要使用本身的"用戶名和密碼",從而能夠區分出不一樣的人對代碼作的修改
操做:
1> checkout 將服務器上最新的代碼倉庫下載到本地,"只須要作一次"
2> update 從服務器上將其餘人所作的修改下載到本地,"天天上班必需要作的事情"
3> commit 將工做提交到服務器,"天天下班以前至少作一次"
GIT
一款偉大的分佈式源代碼管理工具
目前被愈來愈多的開源項目使用
不過在國內企業還沒有大範圍普及
--------------------------------------------------------------------------------------------------------
基本操做
服務器端按照配置
客戶端軟件使用
與Xcode的集成
1.Chectout是下載服務器上得全部文件,
2.commit 是將本地修改以後的文件提交到服務器(只提交修改以後的)
3.update是將服務器上代碼更新到本地(只會更新修改的文件)
SVN使用過程
提交代碼時候報 out of date的錯誤,就是你從服務器上拿下來的代碼,你修改後提交,可是這個你拿下來的代碼在服務器上,已經被別人修改過了。
這時候你要commit上傳,你必需要執行 update的操做,將服務器修改過的代碼拿到本地。 這時候拿到本地之後就會把服務器上和你本身修改過的合併在一塊兒。這時候就能夠commit 上傳到服務器了。
策略就是: 拷貝 修改 合併 (SVC、CVS採用)
還有好比微軟的VSS: 鎖定 修改 解鎖的方案,弊端:不能並行開發。
--------------------------------------------------------------------------------------------------------------------------------------
SVN使用環境
要想利用SVN管理源代碼,必須得有2套環境
服務器
用於存儲客戶端上傳的源代碼
能夠在Windows上安裝Visual SVN Server
大部分狀況下,公司的開發人員沒必要親自搭建SVN服務器
客戶端
上傳本地的源代碼到服務器,或者更新服務器的代碼到本地,保持同步
能夠在Mac上使用命令行、Versions、Cornerstone
開發人員就屬於客戶端這個角色
Visual SVN Server下載地址
http://www.visualsvn.com/server/download/
SVN 端口號。http 爲80 HTTPs爲443
HTTP : 超文本傳輸協議 HTTPS : HTTP + SSL
-------------------------------------------------------------------------------------------------------------------------------------
命令行
查看 svn --help 系統提示經常使用命令 清除命令 clear
具體某個指令怎麼用 svn help checkout
經常使用UNIX命令
cd 進入目錄
pwd 查看路徑
cd ../ 返回上級目錄
1> SVN基本命令
命令行格式:
svn <subcommand> [options] [args]
說明
svn 子命令 [選項] [參數]
提示:
# [中括號]中包含的內容是可選的
# (子命令縮寫)
2> 查看幫助信息
$ svn help
查看svn全部命令的幫助
$ svn help 子命令
附錄:UNIX經常使用命令
================================================================================
1. cd 改變工做目錄
2. pwd 輸出當前工做目錄的絕對路徑
在UNIX中要執行什麼命令,必定要知道本身當前所在的工做目錄
3. ls 查看文件
$ ls 顯示文件
$ ls -a 顯示全部文件
$ ls -l 列表顯示文件
$ ls -la 列表顯示全部文件
$ ls -G 帶顏色顯示
4. touch 用於更改文件訪問和修改時間的標準UNIX程序,也被用於建立新文件
$ touch myfile.txt
注意:touch不修改myfile.txt內容,只更改它的訪問、修改時間,若是myfile.txt不存在,它會被建立
$ open myfile.txt 打開文件,能夠直接進行編輯了。
5. cat 連續查看文件內容
6. more 分頁查看文件內容
提示:
1> 命令和參數之間須要添加空格
2> 若是要使用當前目錄中的文件名,輸入到一半時,按TAB鍵可以補全
---------------------------------------------------------------- ---------------------------------------------------------------- ----------------------------------------------------------------
從新設置帳號密碼的時候 應該這樣: svn checkout http://192.168.15.155/svn/weibo/ --username = ls --password=ls
在後面加上 username password 就能夠了
SVN的本質是經過一個文件夾來管理源代碼,默認狀況下,用於管理源代碼的文件夾是隱藏的,這個隱藏的文件夾的名稱爲:.svn
04. SVN演練準備
================================================================================
1> 顯示隱藏文件夾
# 顯示隱藏文件
$ defaults write com.apple.finder AppleShowAllFiles Yes && killall Finder
# 不顯示隱藏文件
$ defaults write com.apple.finder AppleShowAllFiles No && killall Finder
================================================================================
1.注意:新建文件或者文件夾以後若是直接提交(直接commit)
會報以下錯誤:is not under version control
該錯誤的含義是:提示咱們提交的文件沒有歸入到版本控制。
2.注意: 在提交代碼的時候必須寫上註釋(必定要明確),不然會報錯誤cound find log 什麼的
commit 要加註釋 :SVN commit main.c -m "第一次提交"
如何查看哪些文件沒有「入會」 加入本地管理文件夾。 指令是:SVN status 沒有加入的,前面會出現?
3. 注意: svn add 只會添加到本地管理,不會添加到服務器
---------------------------------------------------------------------- ---------------------------------------------------------------------- --------------------------------------------------------
SVN客戶端命令
svn checkout :下載服務器的代碼到本地 (簡寫svn co)
svn commit :將改動的文件提交到服務器(簡寫svn ci)
svn update :更新服務器的代碼到本地 (簡寫svn up)
svn add :向本地的版本控制庫中添加新文件
svn delete、svn remove :從本地的版本控制庫中刪除文件(簡寫svn del、svn rm)
svn move :移動文件或者目錄或文件改名
svn mkdir :建立歸入版本控制下的新目錄
svn revert :撤銷以前的一切修改
svn merge :將兩個版本之間的差別合併到當前文件
svn info :查看文件的詳細信息
svn diff :查看不一樣版本的區別
svn log :查看日誌信息
svn list :列出版本庫下的文件和目錄列表
svn status :查看文件狀態(簡寫svn st)
svn help :獲取幫助信息(好比svn help ci)
svn lock :加鎖
svn unlock :解鎖
svn st 顯示的文件狀態
第1列狀態說明:描述文件被添加、刪除或其餘修改
--------------------------------------------------------------------------------
' ' 沒有修改
'A' 被添加到本地代碼倉庫
'C' 衝突
'D' 被刪除
'I' 被忽略
'M' 被修改
'R' 被替換
'X' 外部定義建立的版本目錄
'?' 文件沒有被添加到本地版本庫內
'!' 文件丟失或者不完整(不是經過svn命令刪除的文件)
'~' 受控文件被其餘文件阻隔
---------------------------------------------------------------------------------------------
反悔了,撤銷 revert
1.注意:若是修改文件以後,而且文件沒有提交(commit)想反悔,可使用svn revert 這個指令,讓文件回到上一次提交以前的狀態(上一次下載的時候),注意是沒有提交,要是提交了就不行了。
例如:先進入文件的目錄後:svn revert main.m 能夠悔到上次。
2.若是提交了 能夠用update 解決,由於update除了能夠更新服務器上得最新代碼之外,還能夠更新到指定的版本。(每次提交後SVN的版本號就會制動加1),版本號是惟一的,因此能夠經過版本號更新到指定的版本。
例如: 進入目錄後 svn update -r 3 回到第三個版本
3.查看某個文件的日誌 進入相應的目錄後 SVN log main.c 就能夠看全部關於main.c的提交版本了。
---------------------------------------------------------------------------------------------
版本控制中最多見的2個問題
1.超時
使用SVN 有一個原則,先更新再提交。
只有本地的版本號大於等於服務器的版本號的時候才能提交,不然會報一個out of data的錯誤。
這時候應該先 在該路徑下,先update,而後再提交,(若是不修改同一行就不會衝突的),直接合併成一行了,而後再提交。
2.衝突
當多我的,修改了 同一個文件的同一行代碼就會報衝突的錯誤,Conflict discovered
我: main.c 11 行 abc
其餘人: main.c 11行 45454
其餘人已經提交了代碼,我再提交代碼就會有衝突
解決衝突 三種:
mine-conflict、表明用咱們的代碼替換服務器上得代碼,本地的代碼保留我本身寫得
:在衝突後面輸入命令:1.mc 先更新成功,2.而後在commit 提交 svn ci main.c -"增長了東西"
theirs-conflict、表明用服務器代碼替換咱們的代碼。本地的代碼只保留服務器的,會自動刪除個人
命令: tc 而後更新
postpone、本身手動解決,本地文件中會同時保留服務器代碼和本地代碼
命令: p
會在本地建立三個備份:
main.c.mine 備份本身最新的版本
main.c.r17 本地修改以前的版本(r17是上個版本)
main.c.r18 服務器最新版本
《《《《《《《《 中間是咱們本身修改的代碼 =======
======== 中間是服務器最新的代碼 》》》》》》》
注意:手動解決完衝突後須要告訴svn咱們已經解決衝突了,這樣才能保證數據的安全和SVN的可靠性
先進入路徑後輸入:命令:svn resolved main.c,三個備份被刪除
接下來 提交代碼 svn ci main.c -m"手動解決衝突"