一.SVN
1.基本操作
- 下載遠程倉庫到本地(cd目錄下)
$svn check out 倉庫路徑 --username=用戶名 --password=密碼 - 查看本地倉庫文件狀態(tài)
?-未同步到svn目錄 A-添加的文件 M-修改的文件 D-刪除的文件 C-沖突 R-被替換 |-忽略
$svn status - 添加文件到svn目錄下
注意:默認情況下,xcode中新建文件都是 A 狀態(tài)的,也就是執(zhí)行隱性執(zhí)行了svn add 文件名操作手動添加
$svn add 文件名 - 提交代碼到遠程倉庫
$svn commit -m"提交信息" 具體文件名(不寫代表全部) - 更新到最新版本
$svn update - 查看版本提交日志
$svn log - 解決版本沖突
提交之后發(fā)現(xiàn)版本滯后 out of date
先svn commit -m"",會報沖突錯誤 diff-full
此時可以使用三種方式處理 tc(theirs-conflict) mc(mine-conflict) p(postpone)
tc:使用服務器數(shù)據(jù)覆蓋我的本地數(shù)據(jù),以服務器為準
mc:使用我的數(shù)據(jù)覆蓋服務器數(shù)據(jù),以我的數(shù)據(jù)為準,然后再svn resolved 文件名(告訴svn解決完沖突了),最后提交$svn commit "解決沖突" 沖突文件名
可參考:
http://www.lxweimin.com/p/7d28a0863810
2.Cornerstone使用注意:
xcuserdata文件包含斷點文件夾打開目錄等信息,這個文件在svn使用中可以忽略掉。
具體做法是:
A.第一次提交代碼的時候,點擊ignore(不點commit anyway),然后再commit
B.通過cornerstone刪除兩個xcuserdata開頭的文件,然后commit
C.在xcode中任意改一行代碼,打一個斷點,然后編譯,生成新的xcuserdata
D通過cornerstone找到這兩個新的xcuserdata,右鍵選擇ignore,再次commit
E.完成忽略操作
3.文件結(jié)構(gòu)應用場景
場景:
團隊開發(fā)1.0上線完成之后,著手2.0開發(fā),此時發(fā)現(xiàn)1.0版本有緊急Bug,找?guī)讉€人去修復Bug,在1.0的基礎上發(fā)布1.1版本,然后把修復的內(nèi)容合并到即將發(fā)布的2.0版本中。
解決流程:
我們先了解一下svn三個重要文件夾
trunk
一般存放目前正在開發(fā)的項目文件,主分支
tag
可以理解為項目的里程碑,也可以說是快照,凡是放在tag里的代碼都不變了。凡是放在tag里的代碼都是經(jīng)過測試,認定穩(wěn)定之后才放進去的。
branches
分支
- A.開發(fā)完1.0版本之后,除打包發(fā)布外,還需要備份(每個發(fā)布版本都需要備份),備份存放在tag文件夾中。
使用cornerstone的話,在svn服務器端右鍵Tag打標簽,備份到tag文件夾下。 - B.遇到緊急Bug時,把tag文件夾下的1.0版本創(chuàng)建一個新的1.0fixbug版本放到branches下,然后在該目錄中去修改bug。
使用cornerstone的話,在svn服務器端tag文件夾中右鍵Branches,在branches文件夾中創(chuàng)建分支。 - C.修改完bug之后,備份1.1版本文件到tag文件夾中,再把分支代碼合并到trunk主分支。
使用cornerstone的話,在本地倉庫主分支上點擊merge,選擇branches文件夾中項目進行合并。 - D.合并完之后可以刪除分支
使用cornerstone的話,在svn服務器端branches文件夾中delete。
二.Git
1.基本操作
- git初始化和配置
初始化一個git本地倉庫(cd到將要創(chuàng)建git倉庫的目錄下)
git config user.name "zsy"
git config --global user.name "zsy"
git config alias.別名 "操作" //eg:
git config --global alias.別名 "操作" //給所有git管理項目git操作起別名
- git本地提交
在目錄下創(chuàng)建一個文件main.h,然后查看文件狀態(tài)
git add main.h
git add . --add所有文件
main.h顯示綠色,new file main.h,相當于A狀態(tài),需要執(zhí)行git add
git add 操作,再執(zhí)行
git rm 文件名
此時main.h文件顯示綠色,deleted: main.h 直接$git commit操作就行
注意:紅色表示修改不在git暫緩區(qū),需要add操作,綠色表示可以直接提交 - 查看版本信息
git reflog 加強log,可以看到版本回退信息
- 回退版本
修改但為未提交狀態(tài),退回上個版本
git reflog 命令查看各個版本號信息
$git reset --hard 版本號 //版本號指定前5位就行 - 從遠程倉庫獲取數(shù)據(jù)
$git clone 路徑 - 從遠程倉庫拉取代碼
$git pull - 把數(shù)據(jù)推送到遠程倉庫
$git push
2.文件結(jié)構(gòu)
工作區(qū):.git文件目錄以外的內(nèi)容
版本庫:.git文件目錄信息
.git/config->記錄配置信息
.git/HEAD->指向當前分支
.git/Log->記錄提交信息
git commit是把暫緩去內(nèi)容提交到當前分支。
3.使用xcode+git工作
已經(jīng)擁有git托管的項目,直接clone下來開發(fā):
A.創(chuàng)建空文件夾,在其中克隆項目 git add .gitignore
然后 git push
C.配置git信息,用戶名郵箱
git config user.email "郵箱"
D.git pull
git commit
git push
注意:Xcode中?標記的文件需要使用$git add添加到暫緩區(qū),再提交。
創(chuàng)建倉庫導入已有未被git托管項目(不同的地方是步驟B):
A.創(chuàng)建空文件夾,在其中克隆項目 git add . 操作
C.git pull $git push
三.區(qū)別
SVN是集中式管理,所有代碼管理都是在服務器端(只有服務器端有代碼倉庫),客戶端只能夠下載服務器端代碼;
Git是分布式管理,除了在服務器端有代碼倉庫外,本地也有代碼倉庫,可進行本地代碼管理;
Git分支管理比SVN更容易;
Git文件每次添加修改之后都需要先執(zhí)行git commit操作,而SVN只會在第一次添加執(zhí)行
svn commit
四.應用
有新的遠程地址,有已存在文件夾
cd existing_folder
git init
git remote add origin http://git.taotiangou.net/zhousiyang/1111.git
git add .
git commit -m "Initial commit"
git push -u origin master有已存在文件夾和其他遠程地址
cd existing_repo
git remote rename origin old-origin
git remote add origin http://git.taotiangou.net/zhousiyang/1111.git
git push -u origin --all
git push -u origin --tags