菜鸟科技网

ios svn命令

虽然目前 Git 已是绝对主流,但一些历史项目、大型企业或特定团队仍在使用 SVN,了解在 macOS (iOS 开发的宿主系统) 上如何使用 SVN 命令依然很有必要。

ios svn命令-图1
(图片来源网络,侵删)

这篇指南将涵盖从环境准备到日常开发的所有核心命令。


环境准备:安装 SVN

macOS 系统通常会预装一个基础的 SVN 命令行工具,你可以通过终端检查是否已安装。

检查是否已安装

打开终端(Terminal),输入以下命令:

ios svn命令-图2
(图片来源网络,侵删)
svn --version

如果看到版本信息,说明已安装,如果提示 command not found,则需要手动安装。

安装或升级 SVN (推荐使用 Homebrew)

Homebrew 是 macOS 上最流行的包管理器,如果你没有安装,建议先安装它。

# 安装 Homebrew (官网命令)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

然后使用 Homebrew 安装或升级 SVN:

ios svn命令-图3
(图片来源网络,侵删)
# 安装 SVN
brew install subversion
# 如果已安装,可以升级到最新版本
brew upgrade subversion

安装完成后,再次运行 svn --version 确认。


核心概念

在使用命令前,了解 SVN 的几个核心工作区域很重要:

  • Repository (仓库 / SVN 服务器):存放所有项目代码和历史版本的服务器,地址通常是一个 URL,svn://server_ip/projecthttps://svn.server.com/project
  • Working Copy (工作副本):从仓库 签出 到你本地的代码文件夹,这是你日常编码、修改的地方。
  • .svn 文件夹:在每个工作副本的根目录及其子目录下都存在一个隐藏的 .svn 文件夹,它记录了本地文件与仓库的关联信息(如版本号、属性等),**千万不要手动删除或修改它!

常用 SVN 命令详解

以下命令是你日常开发中最频繁会用到的。

检出代码

这是你第一次获取项目代码的操作。

# 基本语法
svn checkout <SVN仓库URL> [本地文件夹名]
# 示例:从仓库检出项目,并将本地文件夹命名为 "MyAwesomeApp"
svn checkout svn://192.168.1.100/iOS/MyAwesomeApp MyAwesomeApp
  • svn cosvn checkout 的简写,更常用。

查看状态

这是 最最常用 的命令,用于检查你本地的修改情况。

# 进入你的工作副本目录
cd /path/to/MyAwesomeApp
# 查看状态
svn status

状态码的含义:

  • 未版本控制的新文件(新创建的文件)。
  • M:修改过的文件。
  • A:已添加到暂存区(即将提交)的文件。
  • D:已标记为删除的文件。
  • C:冲突,需要你手动解决。
  • 文件丢失或损坏(通常是 .svn 文件夹出问题)。
  • I:被忽略的文件。
  • 文件类型被更改(文件变成了文件夹)。

添加文件/文件夹

当你创建新的文件或文件夹后,需要先将其加入 SVN 的管理。

# 添加单个文件
svn add path/to/your/new_file.swift
# 添加一个新文件夹及其下所有内容
svn add path/to/your/new_folder/
# 添加所有未版本控制的文件和文件夹(慎用!)
# 它会递归添加所有 '?' 状态的文件。
svn add *

提交修改

将你的修改从本地推送到 SVN 服务器。

# 提交单个文件
svn commit -m "修复了登录按钮的样式问题" path/to/your/modified_file.swift
# 提交所有已暂存的修改
svn commit -m "feat: 添加了用户个人中心模块"
# 提交所有修改的文件(包括未暂存的)
# 这会自动将 'M' 状态的文件加入暂存区并提交,但不会处理 '?' 或 'D' 的文件。
svn commit -m "修复了多处bug" --keep-local
  • -m (message) 是必须的,用于清晰描述本次提交的内容,养成良好的习惯。
  • svn cisvn commit 的简写。

更新代码

在提交之前或开始工作前,务必先更新,以确保你本地的代码是最新版本,避免与同事的修改冲突。

# 更新整个工作副本
svn update
# 更新单个文件
svn update path/to/your/file.swift
# svn up 是 svn update 的简写
svn up

查看差异

比较你的本地修改和仓库最新版本的差异。

# 查看所有已修改文件的差异
svn diff
# 查看单个文件的差异
svn diff path/to/your/modified_file.swift
# 使用外部工具查看差异(如 Meld, Diffmerge,需要先安装)
svn diff --diff-cmd /usr/bin/meld

查看日志

查看项目的提交历史记录。

# 查看整个项目的提交日志
svn log
# 查看某个文件的提交日志
svn log path/to/your/file.swift
# 查看最近10条日志
svn log -l 10
# 显示每次修改的文件列表
svn log -v

解决冲突

svn updatesvn commit 时出现冲突,文件内容会出现类似下面的标记:

<<<<<<< .mine
// 你的代码
=======
// 合并进来的代码
>>>>>>> .r12345

你需要手动编辑文件,删除这些标记,并整合好代码,然后执行以下命令标记冲突已解决:

svn resolved path/to/your/conflicted_file.swift

删除文件

从工作副本和仓库中删除文件。

# 先在本地删除文件
rm path/to/your/file_to_delete.swift
# 然后执行 svn delete 命令
svn delete path/to/your/file_to_delete.swift
# 最后提交
svn commit -m "删除了不再使用的旧文件"

你也可以一步到位:

svn delete path/to/your/file_to_delete.swift && svn commit -m "删除了不再使用的旧文件"

查看和恢复历史版本

# 查看文件在某个版本时的内容(例如版本 123)
svn cat -r 123 path/to/your/file.swift
# 将文件恢复到某个版本(不会提交,只是本地覆盖)
# 这相当于 "git checkout <commit> -- <file>"
svn update -r 123 path/to/your/file.swift
# 创建一个补丁文件,包含两个版本之间的差异
svn diff -r 100:120 > changes_from_100_to_120.patch

iOS 开发中的实际场景与技巧

场景1:处理 .gitignore 文件

SVN 没有 .gitignore 这样的标准文件,但它有类似的“忽略列表”。

使用 svn:ignore 属性(推荐)

这种方式只对当前目录有效,更灵活。

# 1. 进入你想设置忽略规则的目录,Pods 文件夹
cd Pods
# 2. 设置该目录的忽略属性
#    -R : 递归设置,对子目录也生效
#    --targets : 从文件中读取规则
svn propset svn:ignore -R -F .gitignore .

使用 svn:global-ignores 属性

这种方式对整个工作副本有效。

# 在项目根目录执行
svn propset svn:global-ignores -F .gitignore .

注意:设置完忽略属性后,需要提交 才能生效。

svn commit -m "添加 SVN 忽略规则"

场景2:处理第三方库(如 CocoaPods)

对于通过 CocoaPods 管理的项目,Pods 目录和 Podfile.lock 文件通常都应该被忽略。

  1. 在项目根目录创建一个 .gitignore 文件(即使你不用 Git,这个文件名也常用),内容如下:

    # CocoaPods
    /Pods/
    /Podfile.lock
  2. 按照上面的方法,将这个文件的内容设置为 SVN 的忽略规则。

  3. 提交你的修改。

场景3:SVN 与 Xcode 结合

你可以在 Xcode 的终端中直接执行这些命令,或者配置一个外部的 SVN 客户端(如 Versions, Cornerstone, SmartSVN)来配合使用,命令行提供了最大的灵活性和自动化能力。


总结与对比 (SVN vs Git)

特性 SVN (Subversion) Git
仓库结构 中心化,一个中央服务器,多个本地副本。 分布式,每个本地副本都是一个完整的仓库。
提交 svn commit:直接推送到中央服务器。 git commit:仅提交到本地仓库,git push 才推送到远程。
分支/标签 便宜,只是复制一个目录,没有特殊优化。 高效,指向某个提交的指针,非常轻量。
历史版本 .svn 文件夹记录了元数据,但历史查看相对较慢。 每个提交都是一个快照,历史追踪非常快和强大。
工作流 简单直接,适合小型团队或对分布式概念不熟悉的开发者。 灵活强大(如 Git Flow, GitHub Flow),适合复杂协作。
命令行 相对简单,命令直观。 命令更丰富,概念稍复杂(如暂存区 staging area)。

对于新的 iOS 项目,强烈建议直接使用 Git,生态更完善,工具链更成熟,社区支持更好,但如果你的团队或项目历史原因必须使用 SVN,以上命令将足以支持你完成日常的开发工作。

分享:
扫描分享到社交APP
上一篇
下一篇