svn使用筆記

svn是每天都要用到的工具,學會更好的使用它,對提高工作效率很有幫助,本篇博文記錄svn日常使用的一些技巧,方便溫故知新!


屬性的作用?


爲每個文件或文件夾附加額外的信息,例如:

"test-results=all passing " test-results(屬性名)  all passing(屬性值)

注:屬性名可以任意取,但最好不要以svn:開頭,以免與系統保留屬性名衝突。


當開發分支中存在svn copy或svn move的修改時,合併回主線需要特別小心!!!


例:

試想當你在自己的開發分支上通過svn move將文件integer.c重命名爲whole.c,事實你是在開發分支上創建一個新文件,並刪除了舊文件。同時在主線上,你的同事A提較了一些對integer.c的修改。這時你準備將你開發分支上的修改合併回主線:

$ svn merge --reintegrate ^/calc/branches/my-calc-branch
--- Merging differences between repository URLs into '.':
D integer.c
A whole.c
U .
--- Recording mergeinfo for merge between repository URLs into '.':
U

所得到的結果並非是你和你的同事A想要的,svn刪掉了包含你同事A最近一次修改的integer.c,並新增了一個文件whole.c,但whole.c中並不包含同事A的最新修改,他的修改被移除了。(這個缺陷存在於當前版本的svn中,期待後續版本能有改進)


svn switch


svn switch是svn update的一個超集,所以它們具有一些共同的特性:當運行這兩條命令時,任何本地工作拷貝的修改都會被保留。


試想,當你在主線的工作拷貝上做了大量的修改,突然你意識到最好爲了這次修改創建一個獨立的修改分支,藉助上述特性,你可以簡單地通過兩步完成該操作:

$ svn copy http://svn.example.com/repos/calc/trunk \
           http://svn.example.com/repos/calc/branches/newbranch \
           -m "Create branch 'newbranch'."
Committed revision 353.
$ svn switch ^/calc/branches/newbranch
At revision 353.

假設你修改完畢後準備svn commit,那麼所有的修改都將被移送到修改分支而非主線。


通過svn copy從歷史版本庫中恢復被刪除的文件


$ svn copy ^/calc/trunk/real.c@807 ./real.c
$ svn status
A + real.c


通過svn diff查看詳細的歷史修改記錄(精確到行)


檢查本地工作拷貝的修改

svn diff file


檢查本地工作拷貝與指定版本的修改

svn diff -r revision file


檢查指定的兩個版本間的修改

svn diff -r revision1:revision2 file(可以不再工作拷貝中執行該命令,但需要指定URL)


檢查前後兩個版本間的修改

svn diff -c revision_new file


處理樹衝突


原因:當你的同伴移動或刪除了一個你還在修改的文件,在你svn up時就會產生樹衝突


解決樹衝突的步驟:

①. 通過svn info可查看包含衝突項的URLS

$ svn info code/bar.c
Path: code/bar.c
Name: bar.c
URL: http://svn.example.com/svn/repo/trunk/code/bar.c
…
Tree conflict: local edit, incoming delete upon update
Source left: (file) ^/trunk/code/bar.c@4
Source right: (none) ^/trunk/code/bar.c@5


左邊的URL指示本地工作拷貝的信息

右邊的URL指示版本庫上與本地工作拷貝衝突時的版本信息


②.根據第①的得到信息,決定解決樹衝突的方案


可以刪除本地工作拷貝的文件,也可以刪除版本庫中的文件,視具體情況而定。

若要刪除本地文件但需要保留其中的修改,可以使用svn diff產生標準補丁文件patch,再通過svn patch打補丁

$svn delete --force code/bar.c
D code/bar.c
$ svn resolve --accept=working code/bar.c
Resolved conflicted state of 'code/bar.c'


通過svn patch打補丁


  • 當實際修改的行號和補丁文件中的行號存在偏差時或補丁文件中某幾行在實際應用修改時被忽略時,會在輸出報告中用符號'>'表示,這時我們就需要仔細審查修改是否正確了

  • 當補丁文件中修改行在實際修改中找不到對應行時,這部分修改會被保存到一個以.svnpatch.rej爲後綴的文件中。需要我們手動合入修



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章