Knight of the round table

          wansong

          linux svn 常用命令

          apt-get install subversion
          apt-get install libapache2-svn

          http://blog.csdn.net/tianziczj/article/details/6180745
          http://www.cnblogs.com/PatrickChen/archive/2010/07/02/1769877.html
          http://www.wowcms.com/server/post_7930.html    主要參考這篇文章
           

           

          http://www.subversion.org.cn/svnbook/nightly/svn.ref.svn.c.diff.html

           


          客戶端Rabbitvcs 安裝:

          http://groups.google.com/group/rabbitvcs/browse_thread/thread/401666c0b327dd29
          http://yhjhoo.iteye.com/blog/839372

          參考rabbitvcs-0.14beta1根目錄下的 README AND clients/nautilus/README


           

          開發人員常用命令

           

          (1) 導入項目

          $ cd ~/project
          $ mkdir -p svntest/{trunk,branches,tags}
          $ svn import svntest https://localhost/test/svntest --message "Start project"
          ...
          $ rm -rf svntest

          我們新建一個項目svntest,在該項目下新建三個子目錄:trunk,開發主干;branches,開發分支;tags,開發階段性標簽。然后導入到版本庫test下,然后把svntest拿掉。

          (2) 導出項目

          $ svn checkout https://localhost/test/svntest/trunk

          修訂版本號的指定方式是每個開發人員必須了解的,以下是幾個參考例子,說明可參考svn推薦書。

          $ svn diff --revision PREV:COMMITTED foo.c
          # shows the last change committed to foo.c

          $ svn log --revision HEAD
          # shows log message for the latest repository commit

          $ svn diff --revision HEAD
          # compares your working file (with local changes) to the latest version
          # in the repository

          $ svn diff --revision BASE:HEAD foo.c
          # compares your “pristine” foo.c (no local changes) with the
          # latest version in the repository

          $ svn log --revision BASE:HEAD
          # shows all commit logs since you last updated

          $ svn update --revision PREV foo.c
          # rewinds the last change on foo.c
          # (foo.c's working revision is decreased)

          $ svn checkout --revision 3
          # specified with revision number

          $ svn checkout --revision {2002-02-17}
          $ svn checkout --revision {15:30}
          $ svn checkout --revision {15:30:00.200000}
          $ svn checkout --revision {"2002-02-17 15:30"}
          $ svn checkout --revision {"2002-02-17 15:30 +0230"}
          $ svn checkout --revision {2002-02-17T15:30}
          $ svn checkout --revision {2002-02-17T15:30Z}
          $ svn checkout --revision {2002-02-17T15:30-04:00}
          $ svn checkout --revision {20020217T1530}
          $ svn checkout --revision {20020217T1530Z}
          $ svn checkout --revision {20020217T1530-0500}

          (3) 日常指令

          $ svn update

          $ svn add foo.file
          $ svn add foo1.dir
          $ svn add foo2.dir --non-recursive
          $ svn delete README
          $ svn copy foo bar
          $ svn move foo1 bar1

          $ svn status
          $ svn status --verbose
          $ svn status --verbose --show-updates
          $ svn status stuff/fox.c

          $ svn diff
          $ svn diff > patchfile

          $ svn revert README
          $ svn revert

          修改沖突發生時,會生成三個文件:.mine, .rOLDREV, .rNEWREV。比如:

          $ ls -l
          sandwich.txt
          sandwich.txt.mine
          sandwich.txt.r1
          sandwich.txt.r2

          解決修改沖突方式之一:修改沖突的文件sandwich.txt,然后運行命令:

          $ svn resolved sandwich.txt

          方式之二:用庫里的新版本覆蓋你的修改:

          $ cp sandwich.txt.r2 sandwich.txt
          $ svn resolved sandwich.txt

          方式之三:撤銷你的修改,這種方式不需要運行resolved子命令:

          $ svn revert sandwich.txt
          Reverted 'sandwich.txt'
          $ ls sandwich.*
          sandwich.txt

          確保沒問題后,就可以提交了。

          $ svn commit --message "Correct some fatal problems"
          $ svn commit --file logmsg
          $ svn commit

          (4) 檢驗版本歷史

          $ svn log
          $ svn log --revision 5:19
          $ svn log foo.c
          $ svn log -r 8 -v

          $ svn diff
          $ svn diff --revision 3 rules.txt
          $ svn diff --revision 2:3 rules.txt
          $ svn diff --revision 4:5 http://svn.red-bean.com/repos/example/trunk/text/rules.txt

          $ svn cat --revision 2 rules.txt
          $ svn cat --revision 2 rules.txt > rules.txt.v2

          $ svn list http://svn.collab.net/repos/svn
          $ svn list --verbose http://svn.collab.net/repos/svn

          $ svn checkout --revision 1729 # Checks out a new working copy at r1729

          $ svn update --revision 1729 # Updates an existing working copy to r1729

          (5) 其他有用的命令

          svn cleanup

          為失敗的事務清場。

          (6) 分支和合并

          建立分支方法一:先checkout然后做拷貝,最后提交拷貝。

          $ svn checkout http://svn.example.com/repos/calc bigwc
          A bigwc/trunk/
          A bigwc/trunk/Makefile
          A bigwc/trunk/integer.c
          A bigwc/trunk/button.c
          A bigwc/branches/
          Checked out revision 340.

          $ cd bigwc
          $ svn copy trunk branches/my-calc-branch
          $ svn status
          A + branches/my-calc-branch

          $ svn commit -m "Creating a private branch of /calc/trunk."
          Adding branches/my-calc-branch
          Committed revision 341.

          建立分支方法二:直接遠程拷貝。

          $ svn copy http://svn.example.com/repos/calc/trunk \
          http://svn.example.com/repos/calc/branches/my-calc-branch \
          -m "Creating a private branch of /calc/trunk."

          Committed revision 341.

          建立分支后,你可以把分支checkout并繼續你的開發。

          $ svn checkout http://svn.example.com/repos/calc/branches/my-calc-branch

          假設你已經checkout了主干,現在想切換到某個分支開發,可做如下的操作:

          $ cd calc
          $ svn info | grep URL
          URL: http://svn.example.com/repos/calc/trunk
          $ svn switch http://svn.example.com/repos/calc/branches/my-calc-branch
          U integer.c
          U button.c
          U Makefile
          Updated to revision 341.
          $ svn info | grep URL
          URL: http://svn.example.com/repos/calc/branches/my-calc-branch

          合并文件的命令參考:

          $ svn diff -r 343:344 http://svn.example.com/repos/calc/trunk
          $ svn merge -r 343:344 http://svn.example.com/repos/calc/trunk
          $ svn commit -m "integer.c: ported r344 (spelling fixes) from trunk."
          $ svn merge -r 343:344 http://svn.example.com/repos/calc/trunk my-calc-branch
          $ svn merge http://svn.example.com/repos/branch1@150 \
          http://svn.example.com/repos/branch2@212 \
          my-working-copy
          $ svn merge -r 100:200 http://svn.example.com/repos/trunk my-working-copy
          $ svn merge -r 100:200 http://svn.example.com/repos/trunk
          $ svn merge --dry-run -r 343:344 http://svn.example.com/repos/calc/trunk

          最后一條命令僅僅做合并測試,并不執行合并操作。

          建立標簽和建立分支沒什么區別,不過是拷貝到不同的目錄而已。

          $ svn copy http://svn.example.com/repos/calc/trunk \
          http://svn.example.com/repos/calc/tags/release-1.0 \
          -m "Tagging the 1.0 release of the 'calc' project."

          $ ls
          my-working-copy/
          $ svn copy my-working-copy http://svn.example.com/repos/calc/tags/mytag
          Committed revision 352.

          后一種方式直接把本地的工作拷貝復制為標簽。

          此外,你還可以刪除某個分支。

          $ svn delete http://svn.example.com/repos/calc/branches/my-calc-branch \
          -m "Removing obsolete branch of calc project."

          管理人員常用命令

          (7) 版本庫管理

          $ svnadmin help
          ...
          $ svnadmin help create
          ...
          $ svnadmin create --fs-type bdb /usr/local/repository/svn/test
          $ chown -R svn.svn /usr/local/repository/svn/test

          建立版本庫,庫類型為bdb(使用Berkeley DB做倉庫),庫名稱為test。
          svn版本庫有兩種存儲方式:基于Berkeley DB(bdb)或者基于文件系統(fsfs),通過 --fs-type可指定存儲方式。

          (8) 查詢版本庫信息

          $ svnlook help
          ...
          $ svnlook help tree
          ...
          $ svnlook tree /usr/local/repository/svn/test --show-ids

          posted on 2012-01-15 20:23 w@ns0ng 閱讀(1675) 評論(0)  編輯  收藏 所屬分類: Linux

          主站蜘蛛池模板: 麟游县| 虎林市| 肥东县| 双流县| 和静县| 澄江县| 宁夏| 剑阁县| 双城市| 文登市| 襄樊市| 永靖县| 普格县| 珲春市| 湖南省| 德阳市| 象州县| 东明县| 长葛市| 丰顺县| 临湘市| 鲁山县| 古田县| 承德县| 张掖市| 吴川市| 东丰县| 高雄市| 蓝山县| 河东区| 汕尾市| 孝义市| 柳江县| 财经| 利辛县| 海南省| 米泉市| 齐齐哈尔市| 综艺| 岳西县| 和平县|