這兩天一直再弄SVN提交代碼到服務器,遇到了很多莫名奇怪的問題。
1.每次提交總會莫名其妙的提示如下這種錯誤
剛開始以為是我自己代碼的編碼格式和和服務器要求的不一致,問了公司SVN服務器的管理員,告訴我SVN要求的文件編碼是GBK,我打開Xcode后發現Xcode默認的 編碼方式為UTF-8,一時間迷茫了,不知道怎么辦,問了大神告訴我進入到工程目錄下執行
find ./ -name '*.h' -exec svn propset svn:mime-type 'type/plain' {} \;
因為工程中只有.h文件會提示這樣的錯誤,這句命令行就是講編碼類型進行轉換,運行后再提交就ok了
2.有時候你在SVN目錄下執行命令例如 svn log 會提示:
svn: E155007: '/Users/lihua/Documents/SGXWHelpMe/SGXWHelpMe/Classes/Common/ThridPart/AliPayFrameWork/openssl/hmac.h' is not a working copy
因為這個目錄不是SVN的目錄,你不是從SVNcheck到本地的,我的做法是按照正確的步驟建立SVN目錄
3.按照正確的方式建立好目錄后可能還會遇到如下錯誤提示:
svn: E155021: This client is too old to work with the working copy at
'/Users/lihua/Documents/xiaowangLocalCode' (format 31).
You need to get a newer Subversion client. For more details, see
http://subversion.apache.org/faq.html#working-copy-format-change
這是告訴我們我們的SVN的版本太低了,需要升級版本,你可以按照如下執行名命令
$ svn info
svn: E155036: Please see the 'svn upgrade' command
svn: E155036: Working copy '/home/easwy/dev' is too old (format 10, created by Subversion 1.6)
出現該問題是由于工程目錄的svn版本比本機安裝的svn版本低導致的,解決辦法:在命令行下跳轉到工程目錄文件夾,執行"svn upgrade"命令
$ svn upgrade
Upgraded '.'
Upgraded 'scripts'
Upgraded 'merge-info'
Upgraded 'merge-log'
升級后需要重新啟動電腦
下面簡要介紹一下配置SVN過程
1.服務器配置 這里是Http/Https所以選擇HTTP Server
2.建立自己的代碼目錄文件夾,最好在SVN里建立如圖所示
之后進入將此目錄checkout到本地
3.將自己的工程代碼放入到check下來的目錄下進入到SVN會看到
然后提交即可在此步可能遇到開始說的編碼問題進入到工程目錄執行命令即可,會有如下的提示
然后去commit代碼就好了
其他一些用到的命令:
刪除工程.SVN文件:
sudo find /Users/justfly/Documents/workspace/justSVN/ -name ".svn" -exec rm -r {} \;
改變目錄執行權限:
chmod 777?xx.sh
Mac隱藏或顯示隱藏文件的命令:
defaults write com.apple.finder AppleShowAllFiles -bool true
defaults write com.apple.finder AppleShowAllFiles -bool false
用命令管理SVN:
一、創建代碼倉庫,用來存儲客戶端所上傳的代碼
我先在/User/apple目錄下新建一個svn目錄,以后可以在svn目錄下創建多個倉庫目錄
打開終端,創建一個mycode倉庫,輸入指令:svnadmin create /Users/apple/svn/mycode
指令執行成功后,會發現硬盤上多了個/Users/apple/svn/mycode目錄,目錄結構如下:
二、配置svn的用戶權限
主要是修改/svn/mycode/conf目錄下的三個文件
1.打開svnserve.conf,將下列配置項前面的和都去掉
# anon-access = read
# auth-access = write
# password-db = passwd
# authz-db = authz
anon-access = read代表匿名訪問的時候是只讀的,若改為anon-access = none代表禁止匿名訪問,需要帳號密碼才能訪問
2.打開passwd,在[users]下面添加帳號和密碼
[users]mj=123
jj=456
帳號是mj,密碼是123
3.打開authz,配置用戶組和權限
我們可以將在passwd里添加的用戶分配到不同的用戶組里,以后的話,就可以對不同用戶組設置不同的權限,沒有必要對每個用戶進行單獨設置權限。
在[groups]下面添加組名和用戶名,多個用戶之間用逗號(,)隔開
[groups]
topgroup=mj,jj
說明mj和jj都是屬于topgroup這個組的,接下來再進行權限配置。
使用[/]代表svn服務器中的所有資源庫
[/]
@topgroup=rw
上面的配置說明topgroup這個組中的所有用戶對所有資源庫都有讀寫(rw)權限,組名前面要用@
如果是用戶名,不用加@,比如mj這個用戶有讀寫權限
[/=rw
至于其他精細的權限控制,可以參考authz文件中的其他內容
4.啟動svn服務器
前面配置了這么多,最關鍵還是看能否正常啟動服務器,若啟動不來,前面做再多工作也是徒勞。
在終端輸入下列指令:svnserve -d -r /Users/apple/svn
或者輸入:svnserve -d -r /Users/apple/svn/mycode
沒有任何提示就說明啟動成功了
5.關閉svn服務器
如果你想要關閉svn服務器,最有效的辦法是打開實用工具里面的“活動監視器”
綜合上述,我們就可以輕松搭建svn服務器環境了
三、使用svn客戶端功能
1.從本地導入代碼到服務器(第一次初始化導入)
在終端中輸入
svn import /Users/apple/Documents/eclipse_workspace/weibo svn://localhost/mycode/weibo --username=mj --password=123 -m "初始化導入"
我解釋下指令的意思:將/Users/apple/Documents/eclipse_workspace/weibo中的所有內容,上傳到服務器mycode倉庫的weibo目錄下,后面雙引號中的"初始化導入"是注釋
2.從服務器端下載代碼到客戶端本地
在終端中輸入svn checkout svn://localhost/mycode --username=mj --password=123 /Users/apple/Documents/code
我解釋下指令的意思:將服務器中mycode倉庫的內容下載到/Users/apple/Documents/code目錄中
3.提交更改過的代碼到服務器
在步驟2中已經將服務器端的代碼都下載到/Users/apple/Documents/code目錄中,現在修改下里面的一些代碼,然后提交這些修改到服務器
1> 打開終端,先定位到/Users/apple/Documents/code目錄,輸入:cd?/Users/apple/Documents/code
2> 輸入提交指令:svn commit -m "修改了main.m文件"
這個指令會將/Users/apple/Documents/code下的所有修改都同步到服務器端,假如這次我只修改了main.文件
可以看到終端的打印信息:
Sending? ? ? ? weibo/weibo/main.m
Transmitting file data .
Committed revision .
4.更新服務器端的代碼到客戶端
這個應該是最簡單的指令了,在終端中定位到客戶端代碼目錄后,比如上面的/Users/apple/Documents/code目錄,然后再輸入指令:svn update
5.至于svn的其他用法,可以在終端輸入:svn help
這里列出一大堆svn指令,后面括號中的內容的一般代表著指令的簡稱,比如我們可以用svn ci代替svn commit,用svn co代替svn checkout