SVN commit,update用法

2023-05-16

您是否有過這樣子的經驗, 在編修檔案的過程中, 尤其是在撰寫程式檔, 突然改爛了, 而想說: 如果我有辦法知道剛才改了什麼地方有多好! 或是在一份大作業或者是專案的情況下, 須要多個人一同改一份檔案, 總須事先說好誰要改哪個檔案, 改的時候別人都不能動, 以免在存檔的時候被互相覆蓋.

有這麼苦嗎?!

事實上這些工作, 都可以交給一套完善的版本控制系統 (Version Control System) 來解決. 接下來要介紹的這套系統名做 [subversion] , subversion透過一個集中管理的檔案庫(repository), 記錄下每一次的更動, 於是您可以取得每一次修改的紀錄, 甚至還可以多個人一起改, subversion 會負責把兩個人的修正合併起來!

安裝 Subversion

首先您須要在您所要工作的機器上安裝 Subversion 這套系統. 若您的機器上已經安裝好了, 您可以跳過這一步.

  1. 若您在 FreeBSD 底下, 請直接 cd /usr/ports/devel/subversion; make install
  2. 若您在 Microsoft Windows 底下, 請至 http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91 下載最新的 Subversion 安裝檔安裝即可, 或者是選擇跟 Explorer 整合在一起, 可以用右鍵來選擇功能的 TortoiseSVN http://tortoisesvn.tigris.org/download.html

若您使用其他的系統, 請參考 http://subversion.tigris.org/project_packages.html . 目前 Subversion 能在許多的作業系統上面執行.

checkout

對於每一個專案, 通常會有一個專屬的檔案庫. 若您不打算自行架設, 您可以至 https://opensvn.csie.org 申請一個.

首先您需要從檔案庫中取一份資料至目前目錄下. 您需要使用 `svn checkout 檔案庫路徑 [目的地路徑]` , 例如說:


~$ svn checkout http://OpenSVN.csie.org/demo
A demo
A demo/Makefile
A demo/integer.c
A demo/button.c
~$ cd demo # 切換到工作目錄 (demo) 下面
~/demo$

這時 svn會自動建立一個目錄, 若無指定 `目的地路徑` 的話則會以檔案庫路徑最一個目路為準 (以上例來說是 demo) , svn 將會作用在這個目錄底下.

一般操作

有兩個重要的指令, 分別是 svn update , 用來將檔案庫中的版本和本地端同步 (例如說有別人已經修正並上傳了) ; 另一個是 svn status , 可以看到本地端更動尚未上傳的情況. 若您尚不了解這是做什麼的並沒有關係, 接下來就會看到範例.

加入檔案 svn add

若要增加新的檔案進來, 請透過 `svn add <file name>`, 例如說我現在開始撰寫 newfile.c:


~/demo$ vim newfile.c           # 開始編輯 newfile.c

~/demo$ svn status # 看本地端的情況
? newfile.c # 前面加 ?表示該檔案尚未加入版本控制

~/demo$ svn add newfile.c # 將其加入版本控制
A newfile.c

~/demo$ svn status # 看本地端的情況
A newfile.c # 有新增的檔案, 尚未上傳

若要在這底下開新的目錄, 請透過 `svn mkdir <dir name>` , 或是先開好目錄, 再透過 `svn add <dir name>` 亦可.

修改

這時, 我可以針對我手上這一份檔案進行修改, 在我進行上傳(commit)前, 別人並不會看到這個更動, 所以並不用擔心我修正錯誤時, 別人會無法使用.


~/demo$ vim integer.c           # 修改 integer.c
~/demo$ svn status
A newfile.c
M integer.c # M 表是 modified

commit

一旦修改到一個斷落或完成時 (若是在程式開發的情況下, 通常都是在至少可以順利 compile 過時)需要下 commit 這個指令, 將我本地端的修改送回檔案庫; 而在每次 commit 的時候, 可以順便附帶一個訊息, 表示這次 commit 時修正了什麼地方, 以方便之後在找尋的時候, 除了透過時間及作者外, 還能有一些其他的資訊. 我們稱這個訊息為 commit log , 建議最好要填寫, 就算是只有一行五六個字, 也勝於什麼都沒有寫. 若您的 commit log 只有一行, 可以直接透過 -m "<your commit log>" 加在 commit 後面, 如:


~/demo$ svn commit -m "fix bug"

或是直接用 svn commit , 這時它會自動跳出一個編輯器讓您輸入. 接著會看到像是這樣的畫面:


Sending newfile.c
Sending integer.c
Transmitting file data..
Committed revision 57.

表示完成, 此時在別的地方進行 svn update 時, 就會含有剛才您更新的資訊.

總結

透過 Subversion 進行開發的流程:

1.只有第一次的時候須要進行 svn checkout , 之後請從 2. 起即可


svn checkout <repository url>

2.假設有其他人在之間有進行修正, 所以先 svn update 更新到最新的版本


svn update

3.進行修正

4.再同步一次


svn update

(這時可以再用 svn status 觀看一下目前的結果, 以及可以透過 svn diff 觀看修正內容. 這將在後文介紹)

5.若有問題則回 3 再進行修正. 要不然確認後, 上傳自己的修正


svn commit
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SVN commit,update用法 的相关文章

  • 如何正确创建可通过http访问的SVN存储库? (在 public_html 内)?

    情况是这样的 subversion 已安装在服务器中 并且我可以访问服务器中的共享帐户之一 不是 root 并且该共享托管帐户具有 SSH 访问权限 我想创建一个存储库 我可以在其中提交我正在处理的 PHP 文件 当我提交时 它应该可以在浏
  • 对于单个开发人员来说,是否值得从 SVN 转向 Git?

    自 2013 年起 此线程很可能已过时 当存储库主要由单个开发人员访问时 是否值得从 SVN 转到 GIT 我有几台用于开发的机器 主要不是用 C 开发 但我的存储库中混合了 VB VB Net PHP C C HTML Batch BAS
  • Subversion:暂存文件以显式提交?

    我已经非常习惯 git 的方式 即必须接触要提交的每个文件 并且在执行此操作时仔细检查差异 现在在工作中我必须使用 svn 并且我总是不小心提交一些东西 有没有办法让 subversion 的行为像 git 一样 因为我必须明确告诉每个文件
  • 在 Subversion 中合并分支时预防冲突

    我最近在 Subversion 中观察到一个非常奇怪的合并冲突 我使用乌龟SVN作为客户端 干线和分行详细信息请参见以下信息 树干 两个用户正在研究这个问题 QA 是主干合并将发生的分支 为了简单起见 trunk ClassLibrary1
  • 用于阻止大于 20MB 的提交的预提交挂钩

    是否可以为 SVN 1 8 编写 prcommit 挂钩以避免提交大于 20MB 的文件 任何建议 将不胜感激 谢谢 我尝试过 但这不适用于二进制文件或其他文件扩展名 filesize SVNLOOK cat t TXN REPOS f w
  • 重新创建 svn 存储库

    在一次重大服务器故障之后 svn 存储库被破坏 我的工作版本是最新版本 从我的工作版本重新创建 svn 存储库的方法是什么 在新服务器上安装 svn 并尝试我的工作副本之后 svn switch NEW SVN PATH 我收到一个错误 R
  • 在应用程序版本中使用 svn 修订号

    在 VS2010 解决方案 不是 NET 中 我希望将 svn 修订号作为应用程序版本的一部分包含在内 我们目前不使用 makefile 仅使用 VS 解决方案 项目设置 我想在编译时获取工作副本修订号 将其存储到变量中 以便稍后在代码中使
  • git 存储库中的提交次数

    我的一个为期 5 个月的项目即将结束 作为毫无意义的统计数据的粉丝 我想知道自存储库启动以来已经进行了多少次提交 我怎样才能发现这一点 Notes 我知道没有one存储库 我只对本地版本感兴趣 这在颠覆中是微不足道的 因为修订标识符 似乎是
  • 以最小的努力在多台计算机之间同步代码

    我希望能够跨多台计算机 准确地说是 3 台 同步源代码和整个项目 我尝试过使用 git 但从来没有获得过无忧无虑的体验 也许是因为我从来没有投入很多精力 所以 我理想中想要的是 能够将文件夹及其所有子文件夹添加到 同步 列表 基本上 一旦我
  • 在 SVN 存储库中导入 Android Studio 项目的正确方法是什么?

    我正在尝试在 SVN 存储库中导入 Android Studio 项目 我显然尝试过 VCS gt 导入到版本控制 gt 导入到 Subversion 但问题是 即使取消选中Include ignored resources框内 软件不断将
  • 当文件标记为“历史记录已提交”时,svn diff

    我对已合并到工作目录中主干的分支进行了更改 svn stat 显示已更改文件的正确列表 但是 svn stat 输出在计划提交新添加到分支的每个文件的历史记录中包含一个 A src main java com java 当我运行 svn d
  • SVN 预提交挂钩,用于避免更改标签子目录

    有没有人对如何添加避免更改标签子目录的预提交挂钩有明确的说明 我已经在互联网上搜索了很多 我找到了这个链接 SVN Hooks 拒绝更改 https metacpan org pod SVN Hooks DenyChanges 但我似乎无法
  • 当必须同时使用 Git 和 Subversion 时如何处理 Git-svn

    Update 更详细地说 我尝试在家使用纯 Git 的原因是 我的公司希望迁移到 Git 但经理不愿意进行更改 因为开发人员不了解我们自己的存储库上的 Git 所以 我尝试做的是 我尝试让每个人都使用 Pure git 同时有人可以在这个学
  • 无法将 Visual Studio 项目中的多个文件提交到 subversion

    几周以来 我在使用 Subversion 时遇到了一些问题 当我尝试从 Visual Studio 2017 项目提交文件时 有些文件无法提交到我的 Visual SVN 服务器 准确地说 项目文件夹中的所有文件 如 cs config c
  • 如何“修复”SVN 分支/树冲突?

    我接手了一个软件项目 决定把所有东西都放在SVN下 上Assembla http www assembla com 使用 Tortoise SVN 树干在ROOT下 所以主干包含了整个应用程序 我标记为 1 0 对于我的第一个重要功能 我创
  • 使用 svn diff 时如何获取无上下文

    当我从命令行使用 svn diff 时 它会打印出已更改的行 以及前后 3 个未更改的行以获取上下文 我更喜欢只看到没有上下文的更改行 我无法确定任何命令行选项可以让我让它以这种方式运行 默认情况下 标准 diff 和 cvs diff 执
  • 无法提交到 svn - 访问被拒绝

    我正在使用 SVN 开发一个小项目 我查看了该项目 svn co http mylocalserver projectx 我进行了更改 更新并添加了文件 svn add file1 php file2 php 但是 每次我想使用此命令提交更
  • 从本地缓存恢复SVN密码

    有没有办法从本地缓存恢复密码 密码必须存储在某处 因为我可以运行 svn co http my svn server foo 但我自己丢失了密码 我是否必须重置它 或者是否可以 以及如何 找到并解密密码 我主要在 Windows 上使用 C
  • 颠覆和混合修订:破坏构建的秘诀?

    在使用 TFS 一段时间后 我刚刚回到 subversion 一般来说我已经很退出了 有一件事情我记得不一样 我不记得能够从过时的工作副本中提交 或者也许我的记忆力让我无法理解 过时 的定义 我认为 过时 意味着自从我上次更新工作副本以来
  • 让 hudson 将源签出到特定目录

    这似乎是一个简单的任务 但在我的一生中 我无法让 Hudson 将我的源代码签出到特定目录 我可以在命令行上使用 svn 查看源代码 我尝试在源代码管理下指定本地模块设置 但没有骰子 我将其设置为 c source trunk 并在运行构建

随机推荐