配置本地SVN
1. 在本地建立一個倉庫,開啟終端執行
1 |
svnadmin create /Users/vcyber/Desktop/SVNCode/ |
執行完成桌面多了一個SVNCode資料夾,目錄結構如下:
目錄結構
配置svn許可權
2.1 使用Xcode開啟/conf/svnserve.conf
,將下面項前面的#去掉, command+s
儲存,退出。
1 2 3 4 |
anon-access = read auth-access = write password-db = passed authz-db = author |
anon-access代表匿名使用者許可權,read代表使用者只讀,none代表禁止訪問,write代表可讀可寫, 這裡我就不修改了,畢竟測試這玩嘛。。。
2.2 使用Xcode開啟/conf/passwd/
,在[user]
下面新增使用者名稱和密碼,command+s
儲存,退出。
2.3 使用Xcode開啟/conf/authz
,在[groups]下面新增組名=使用者名稱(可以多個)
這裡我就一個使用者,我就新增一個組,然後享有伺服器全部資源,注意新增許可權的時候組名前面要加@,使用者名稱不需要。
2.4 啟動svn伺服器
svnserve -d -r /Users/vcyber/Desktop/SVNCode/
沒有任何提示說明啟動成功,可以再活動監視器中檢視可關閉SVN服務。
本地環境配置github(要有github賬號)
1 配置賬號資訊
1 2 |
git config --global user.name Fly_Sunshine_J git config --global user.email 857402355@qq.com |
2 建立本地ssh(用於上傳到你對應的github賬號)
1 |
ssh-keygen -t rsa -C "857402355@qq.com" |
接下來會讓你輸入儲存路徑,你可以選擇預設,也可以選擇儲存到對應位置,最後會讓你輸入密碼, 密碼也是可有可無的。
3 接下來就是找到建立.ssh資料夾,開啟id_rsa.pub,複製內容,登陸github,選擇Settings –>SSH and GPG kyes –>New SSH Key –>Add SSH Key
4 驗證
1 |
ssh -T git@github.com |
會出現詢問你繼續連線,輸入yes,然後彈框輸入3.2中你設定的密碼, 然後出現如下資訊說明配置成功
1 |
Hi Fly-Sunshine-J! You've successfully authenticated, but GitHub does not provide shell access. |
SVN常用命令
import 匯入檔案到svn伺服器
示例:
1 2 |
svn import /Users/vcyber/Desktop/Personal/CoreData/RealmTest/ svn://localhost/Desktop/SVNCode/Realm -m "匯入專案" svn import /Users/vcyber/Desktop/Personal/CoreData/RealmTest/ svn://localhost/Desktop/SVNCode/Realm --username=Fly_Sunshine_J --password=123456 -m "匯入專案" |
checkout(co) 檢出
示例:
1 2 |
svn checkout svn://localhost/Desktop/SVNCode/Realm /Users/vcyber/Desktop/RealmSVN svn checkout svn://localhost/Desktop/SVNCode/Realm /Users/vcyber/Desktop/RealmTest --username=Fly_Sunshine_J --password=123456 |
export 匯出
示例:
1 2 3 4 |
svn export svn://localhost/Desktop/SVNCode/Realm /Users/vcyber/Desktop/RealmExport --username=Fly_Sunshine_J --password=123456 svn export svn://localhost/Desktop/SVNCode/Realm /Users/vcyber/Desktop/RealmExport -r 數字(版本號) svn export -r 4 svn://localhost/Desktop/SVNCode/Realm /Users/vcyber/Desktop/RealmExport |
delete/remove(rm) 刪除(注意要切換到本地倉庫, 別忘了提交,這個操作只刪除本地,伺服器沒有刪除)
示例:
1 |
svn delete RealmTest/Realm.framework/ |
update 更新本地倉庫
示例:
1 2 |
svn update 沒有檔案路徑預設全部更新 svn update RealmTest/ViewController.m 更新指定檔案 |
add 新增新檔案(先把檔案新增到work copy中,然後新增,別忘了commit)
示例:
1 |
svn add RealmTest/Realm.framework/ |
diff 比較差異
示例:
1 2 3 |
svn diff RealmTest/ViewController.m 比較兩個版本的差異 svn diff -r 4:5 RealmTest/ViewController.m |
status 檢視狀態
M:修改,?不存在控制中,你可能需要刪除或者新增,C:有衝突,A:新增,K:鎖定
示例:
1 2 3 |
svn status //指定檔案的狀態 svn status RealmTest/ViewController.m |
log 檢視日誌
示例:
1 2 3 |
svn log 指定檔案的日誌 svn log RealmTest/ViewController.m |
info 檢視資訊
示例:
1 2 3 |
svn info 指定檔案資訊 svn info RealmTest/ViewController.m |
revert 恢復到上個版本
注意:它不會恢復被刪除的目錄。
示例:
1 2 3 4 |
//恢復整個目錄 svn revert --recursive //恢復某一個檔案 svn revert RealmTest/ViewController.m |
resolved 解決衝突
一般會在你更新的時候有衝突會提示你,然後輸入r就可以解決衝突
示例:
1 |
svn resolved RealmTest/ViewController.m |
cp 建立新的分支
示例:
1 |
svn cp svn://localhost/Desktop/SVNCode/Realm svn://localhost/Desktop/SVNCode/RealmBranch1 -m"建立新的分支" |
remove(rm) 刪除分支
示例:
1 2 |
svn remove svn://localhost/Desktop/SVNCode/RealmBranch1 -m"刪除分支1" svn rm svn://localhost/Desktop/SVNCode/RealmBranch2 -m"刪除分支2" |
merge 合併分支
合併分支到另一個分支或者主幹
示例:
1 2 3 4 |
主幹 svn merge svn://localhost/Desktop/SVNCode/Realm svn://localhost/Desktop/SVNCode/RealmBranch1 分支 svn merge svn://localhost/Desktop/SVNCode/RealmBranch2 svn://localhost/Desktop/SVNCode/RealmBranch1 |
Git常用命令
init 新建程式碼庫
示例:
1 2 3 4 |
//在當前目錄新建程式碼庫 git init //在指定位置建立程式碼庫 git init Desktop/GitCode |
git config [–global] user.name/user.email “name/emai” 配置當前或者全域性提交的附帶名字或者郵件
示例:
1 2 3 4 5 |
git config --global user.name "Fly_SunShine_J" git config --global user.email "857402355@qq.com" //檢視設定情況 git config --global user.name git config --global user.email |
clone 克隆程式碼到本地
示例:
1 |
git clone https://github.com/Fly-Sunshine-J/Realm.git Desktop/RealmGit |
commit 提交暫存區
示例:
1 2 3 4 |
//提交所有 git commit -m"日誌" //提交某一個檔案 git commit RealmTest/RealmTest/ViewController.m -m"修改VC" |
status 檢視工作區的檔案修改
示例:
1 |
git status |
rm 刪除檔案
示例:
1 |
git rm RealmTest/RealmTest/ViewController.m |
add 新增檔案到暫存區
示例:
1 2 3 4 |
//新增指定檔案 git add RealmTest/RealmTest/ViewController.m //新增本地庫所有檔案 git add . |
mv 修改某一個檔案的名字
注意,路徑要對應,否則會自動移動
示例:
1 |
git mv RealmTest/RealmTest/ViewController.m RealmTest/RealmTest/View.m |
diff 產看追蹤檔案的差異
示例:
1 2 3 4 |
//檢視追蹤檔案的差異 git diff //檢視某一檔案的差異 git diff RealmTest/RealmTest/ViewController.m |
reset –hard HEAD 放棄本地全部修改
示例:
1 |
git reset --hard HEAD |
git reset 回退到某個版本並儲存未追蹤的改動
一大串的東西可以通過log來查詢
示例:
1 |
git reset 8989920311bacb3f4e3ced7f82ab75ca47c318c7 |
git reset –keep回退到某個版本並儲存未提交的改動
1 |
git reset --keep 8989920311bacb3f4e3ced7f82ab75ca47c318c7 |
checkout HEAD 放棄本地某一檔案的修改
示例:
1 |
git checkout HEAD RealmTest/RealmTest/ViewController.m |
revert 撤銷某一次提交
示例:
1 |
git revert 8989920311bacb3f4e3ced7f82ab75ca47c318c7 |
checkout 撤銷某次提交的某個檔案
示例:
1 |
git checkout 8989920311bacb3f4e3ced7f82ab75ca47c318c7 RealmTest/RealmTest/ViewController.m |
log 檢視提交日誌
示例:
1 |
git log |
blame 檢視檔案被誰修改
示例:
1 |
git blame RealmTest/RealmTest/ViewController.m |
branch 分支
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
//檢視本地分支 git branch // 檢視遠端分支 git branch -r // 檢視遠端和本地分支 git branch -a //建立本地分支,但是不切換 git branch branch1 //新建一個分支並切換 git checkout -b branch2 //新建一個分支,指向指定commit git branch branch3 8989920311bacb3f4e3ced7f82ab75ca47c318c7 //新建一個分支,與指定的遠端分支建立追蹤關係 git branch --track branch4 origin/master //切換到指定分支,並更新工作區 git checkout branch4 //切換到上一個分支 git checkout - //建立追蹤關係,在現有分支與指定的遠端分支之間 git branch --set-upstream branch3 origin/master //合併指定分支到當前分支 git merge branch2 //選擇一個commit,合併進當前分支 git cherry-pick 8989920311bacb3f4e3ced7f82ab75ca47c318c7 //刪除分支 git branch -d branch1 //刪除遠端分支 git push origin --delete branch1 git branch -dr branch1 //將當前分支push到指定遠端分支 git push origin HEAD:branch1 |
tag 標籤
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//列出所有tag git tag //新建一個tag在當前commit git tag 1 //新建一個tag在指定commit git tag 2 8989920311bacb3f4e3ced7f82ab75ca47c318c7 //刪除本地tag git tag -d 1 //檢視tag資訊 git show 2 //提交所有tag git push --tags //刪除遠端tag git push origin --delete tag 2 //新建一個分支,指向某個tag git checkout -b [branch] [tag] |
remote 遠端
1 2 3 4 5 6 7 8 9 10 11 12 |
// 檢視遠端庫的地址列表 git remote -v //檢視這個遠端庫的資訊 git remote show origin // 從遠端庫更新所有的資訊到本地,但是不合並 git fetch origin //從遠端庫更新所有的資訊到本地,但是不合並並清理已刪除的遠端分支 git fetch -p origin //從遠端庫更新資料並立即合併資料 git pull origin branch1 //將本地資料同步到遠端庫中 git push origin branch1 |
這裡我在演示一下git解決衝突,演示流程:
-
製造衝突
1.1 新建分支,並切換到分支, 開啟其中的一個檔案修改, 儲存提交
1.2 切換到master分支,開啟同一檔案,在同一位置修改,儲存提交
1.3 merge分支
其實還可以通過status來檢視衝突檔案.
-
解決衝突(手動解決)
開啟衝突檔案,刪除<<<<<<< HEAD ======= >>>>>>> branch1這三行
再修改成想要的,新增,提交即可。