背景
由于出差現(xiàn)場(chǎng)與公司網(wǎng)絡(luò)不通,兩地開發(fā)無法通過同一個(gè)SVN服務(wù)器進(jìn)行管理声功。進(jìn)行代碼同步比較困難叛复。進(jìn)行代碼合并往往費(fèi)時(shí)費(fèi)力,需要找到一個(gè)更好的方法提升效率家厌。
對(duì)比
之前的方案
方式: 改動(dòng)方直接通過SVN導(dǎo)出差異的文件播玖,或者是記住改動(dòng)過的文件,只復(fù)制改動(dòng)過的文件饭于。SVN導(dǎo)出的方式的缺點(diǎn)是沒有SVN服務(wù)器的一方在導(dǎo)出時(shí)沒法導(dǎo)出增量部分蜀踏,而復(fù)制的方式是只適合少量修改的情況维蒙,否則容易出現(xiàn)遺漏。
然后果覆,接收方收到改動(dòng)的代碼文件后的合并方案通常是提交本地代碼到SVN颅痊,然后將收到的文件覆蓋本地文件再次提交,通過SVN的版本記錄來對(duì)比局待,再逐個(gè)文件查看斑响,對(duì)比差異合并代碼,或者是直接通過Android Studio或是Merge等工具進(jìn)行文件合并燎猛。
缺點(diǎn): 這種方式進(jìn)行代碼合并恋捆,不僅僅對(duì)于改動(dòng)文件需要逐個(gè)查看合并,還需要對(duì)雙方改動(dòng)代碼都了解重绷。而且還非常容易出現(xiàn)遺漏沸停、覆蓋的問題。不僅勞心勞力還容易出錯(cuò)昭卓。對(duì)于刪除文件也不能同步愤钾。
SVN同步方案
方式: 改動(dòng)方直接提交到SVN,然后導(dǎo)出SVN增量版本候醒,并將增量包發(fā)給對(duì)方能颁。然后接收方將增量包導(dǎo)入到SVN倉庫中,再從SVN中更新代碼倒淫,合并后再提交伙菊。
優(yōu)點(diǎn): 雙方都可以只發(fā)增量部分,不會(huì)隨著迭代次數(shù)加大而增加合并難度敌土。通過SVN的合并镜硕,不需要查看處理所有改動(dòng)文件,只需要處理有沖突的文件就可以了返干,這一步可以減少大量的工作量兴枯。同時(shí),還可以同步刪除的文件矩欠。
缺點(diǎn): 雙方提交代碼到SVN之前需要確認(rèn)SVN倉庫處于同步狀態(tài)(即雙方的SVN記錄是完全一致的)财剖。也就是說只有一方允許提交代碼,另一方要提交代碼必須等到從對(duì)方那拿到增量版本同步了倉庫之后才能提交癌淮。否則會(huì)造成兩個(gè)倉庫無法同步躺坟。
具體操作
首先,雙方都安裝VisualSVN乳蓄。安裝時(shí)要安裝命令行工具瞳氓。
A導(dǎo)出倉庫。在Repositories下的工程倉庫Project上右鍵,然后選擇Backup Repository匣摘,然后在彈窗上根據(jù)提示選擇文件夾與文件名并導(dǎo)出倉庫店诗。
B導(dǎo)入倉庫。在Repositories上右鍵音榜,然后選擇Restore Repository庞瘸,然后在彈窗上根據(jù)提示選擇從A處獲取到的倉庫備份文件并導(dǎo)入倉庫。
-
B切入倉庫路徑赠叼。在工作目錄上右鍵-->TortoiseSVN-->重新定位(Reload)-->在彈窗中輸入剛剛還原的倉庫的路徑-->然后確認(rèn)
經(jīng)過前面4個(gè)步驟擦囊,在兩端搭建了兩個(gè)完全一致的兩個(gè)倉庫,并且兩方各自的工作目錄指向了各自的倉庫嘴办,到此同步環(huán)境就搭建好了
A提交代碼瞬场。目前SVN倉庫是同步狀態(tài),A或者B都可以提交代碼涧郊。但是A提交后B就不能提交了贯被。但是A可以進(jìn)行多次提交。
-
A導(dǎo)出增量版本妆艘。導(dǎo)出命令格式是
svnadmin dump REPOS_PATH [-r LOWER[:UPPER] [--incremental]]
示例:
svnadmin dump "D:\Repositories\project" -r 1:2 --incremental > "D:\project.bak"
-
B加載增量版本彤灶。導(dǎo)入的命令格式是
svnadmin load REPOS_PATH
示例:
svnadmin load "D:\Repositories\project" < "D:\project.bak"
B更新代碼,處理沖突批旺,完成代碼合并幌陕。
注意: A與B同時(shí)只能一方提交,另一方需要在同步后才能提交汽煮。所以每次需要提前確認(rèn)好搏熄。