头像 黑化肥挥发发灰会花飞

Xcode10 使用 SVN 做版本控制

2018-09-20
Git  SVN  Xcode
   

Xcode10

2018-09-17 更新的 Xcode 10

前言

这几天更新完 Xcode 后,发现的一些问题,像 libstdc++ 没了的问题、 info.plist 重复的问题、CocoaPods 的问题,搜一搜都能解决,但是以前 Xcode 自带的 SVN 管理,现在全没了!没了!但凡使用 SVN 的,都不能直接使用 Xcode 进行 update、commit 等操作了,最最主要的文件比较的功能也没了,这样开发的时候都不方便看自己改动了啥,隐患很大啊。

另外在官网上看到 Xcode 10 Release Notes 中,确定已经移除了对 SVN 的支持后,更感觉凉凉了 = = SVN-Removed

解决方案

事已至此,除非不更新 Xcode10,否则在 Xcode 上已经没法直接使用 SVN 进行版本管理了。

但,Xcode 支持 Git 啊,而且支持的非常好,所以我们能不能换个思路,用曲线救国的方式,把 SVN 转成 Git,然后在 Xcode 中直接把它当成 Git 用,不就好了嘛。

git svn

Git 最为重要的特性之一是名为 git svn 的 Subversion 双向桥接工具。该工具把 Git 变成了 Subversion 服务的客户端,从而让你在本地享受到 Git 所有的功能,而后直接向 Subversion 服务器推送内容,仿佛在本地使用了 Subversion 客户端。也就是说,在其他人忍受古董的同时,你可以在本地享受分支合并,使暂存区域,衍合以及 单项挑拣等等。巴拉巴拉小魔…… 此段来源于 Git 与 Subversion

话不多说,直接上命令吧。

git svn clone

#git检出svn内容 (等效于svn checkout)
# -r 指定版本号,防止日志过多检出较慢 (HEAD是最新一次的版本)
git svn clone --username=用户名 SVN地址 -r HEAD

#例如在桌面检出SVN
cd ~/Desktop
git svn clone --username=1ilI https://1.2.3.4/svn/ -r 1234

git svn info

#svn 信息(等效于 svn info)
git svn info

git svn log

#查看日志(等效于svn log)
git svn log 

git svn rebase

#更新update (等效于 svn update)
git svn rebase

git svn dcommit

提交这步和 SVN 稍微有些不一样,分为两步,毕竟一个是集中式的一个是分布式的嘛。

首先提交代码 commit ,其实这个是本地操作;然后再 dcommit,这个才推到服务器,跟 git push 类似。

#代码提交分两步
#1、先 commit 提交(本地操作)
git commit -m "日志信息"
#2、提交至SVN
git svn dcommit

Xcode 中的使用

当 clone 成功后,打开工程,修改过未提交的文件右边就会出来我们熟悉的 M ,然后左右两边版本对比也可以用了,Source Control里的 commit 也可以了,当然这个commit是本地的,提交到 SVN 还需要我们手动dcommit一下。

另外这次更新的 Xcode10 又有了新功能,本地修改的内容可以直接实时显示出来了,在行数左边会有蓝条,并且还可以高亮显示、Discard操作,我就想问这么好的功能为什么 SVN 没有!!

modify-point

小知识

每次提交dcommit时,最好要rebase一下,和使用 SVN 类似,commit前先update一下。

另外,若有一次git commit后还未dcommit提交至SVN,然后修改了某些东西,这时候再dcommit就会失败,提示XXX文件 needs update update-index --refresh: command returned error: 1,解决方式如下:

  1. 你可以把当前修改的 git commit 后,再 dcommit ,这样 SVN 会有两次你提交的记录。

  2. 若当前修改的不想提交,只是想把上一次commit的给提交给SVN,可以用 git stash 暂存一下当前的修改,然后dcommit成功后再回到刚刚暂存的位置就可以了。

git stash

#暂时贮藏(使得working tree clean)
git stash

#查看贮藏的内容
git stash list
#例如
$ git stash list
> stash@{0}: WIP on master: 90d537f 日志2
> stash@{1}: WIP on master: 087e275 日志1

#启用贮藏的内容
#默认第一条
git stash apply
#可以指定
git stash apply stash@{1}

# 重新贮藏(取消当前的)
git stash pop

#移除贮藏(最新一条)
git stash drop

#移除指定贮藏
git stash drop stash@{1}

欢迎评论

Content