SVN(一次检出&二次检出)

2023-09-06,

一次检出:

》进入经历文件夹

》输入svn checkout指令

》输入电脑密码

》输入用户名

》输入密码

》检出成功

第二次检出:

》进入小涛文件夹

》输入svn checkout指令

》检出成功

只要输入过一次账号密码后, 终端会自动记录我们的密码

通过指定的账号密码检出

svn checkout http://192.168.15.155/svn/weibo/ --username=ls --password=ls

SVN的本质是通过一个文件夹来管理源代码

默认情况下, 用于管理源代码的文件夹是隐藏的, 这个隐藏文件夹的名称叫做.svn

注意: 新建文件或文件夹之后如果直接提交(直接commit)会报如下错误:

is not under version control

该错误的含义是: 提示我们提交的文件没有纳入版本控制

注意: 在提交代码时必须写上注释(认真写), 否则回报如下错误

Could not use external editor to fetch log message;

注意: svn add只会将文件添加到本地, 不会添加到服务器

注意:如果说利用SVN管理源代码, 就不能直接在项目中删除源文件

如果修改文件之后, 并且文件没有“提交“(commit) 想反悔,可以使用SVN的 revert指令让文件回到上一次提交时的状态

update除了可以更新服务器最新的代码以外还可以更新到指定版本。

每次提交代码之后, SVN的版本号都会自动加1. 正式因为版本每次会自动加1, 也就是说版本号是唯一的。 所以我们可以通过版本号更新到指定版本的代码

版本控制器中最常见的两个问题:

1.超时

SVN 使用SVN有一个原则: 先更新再提交

只有本地的版本号大于等于服务器的版本号时才能提交, 否则会报一个out of data错误;

ls:R8

manager :R11

服务器: R11

2.冲突:

当多个人修改了同一个文件的同一行代码会导致冲突

我: main.c  11行  123

其它人: main.c 11行 abc

其它人先提交了代码

我再提交代码就会有冲突,

Conflict discovered in, 提示我们如何解决问题

(mc) mine-conflict,  代表用我们的代码替换服务器的代码。

本地的代码只保留我们自己写的

(tc) theirs-conflict, 代表用服务器代码替换我们的代码

本地的代码只保留服务器的, 会自动删除我们的

(p) postpone, 自己手动解决。

本地文件中会同时保留服务器代码和本地代码

会在本地创建3个备份

main.c.mine 备课自己最新的代码

main.c.r17 本地修改之前的版本

main.c.r18 服务器最新版本

<<<<<<<  到 ======中间存放的是我们自己修改的代码

======= 到  >>>>>>> 中间存放的是服务器最新的代码

注意: 手动解决完冲突之后, 需要告诉SVN服务器我们已经解决冲突了, 这样才能保证数据的安全性和SVN的可靠性

svn resolved 文件名称

—————————

注意: 在工具中Repositories中的仓库是服务器的仓库

1.新建一个“本地仓库”

$ git init

2.配置仓库

》告诉git你是谁

git config user.name lnj

》告诉git怎么联系你

git config user.email lnj@itcast.cn

》上面一种配置方式是一次性的配置, 会配置到被管理文件的。git文件夹下

》下面一种配置方式是一劳永逸的方式:

git config --global user.name lmj

git config --global user.email lmj@itcast.cn

》如何学习git指令

>学习git指令和SVN指令的学习其实是一样的, 只不过展现的方式不太一样, git是通过使用指南的方式告诉我们某一个指令如何使用

>这个指南其实是一个不可编辑的vim

Q退出指南

按空格下一页

control + B 上一页

/需要搜索的内容 可以进行搜索

git常规指令

》git status 查看文件状态

》git add 添加文件到“暂存区”

》git commit 文件名称   添加文件到”本地仓库“

注意:如果没有在commit后面加上 -m说明修改了什么, 会自动进入vim界面, 要求我们输入修改信息

按键盘上的 i 代表开始输入内容

输入完毕之后按 esc 然后按 :wq

所以: 如果以后在终端中提交最好在后面加上-m

》注意: git中的add和SVN中的add不太一样, SVN中只需要add一次, 而git中每次新建或者修改之后都需要重新add

》1.为添加之前的颜色

红色 代表在”工作区“

》2.添加到暂存区之后的颜色

绿色 代码在”暂存区“

》注意: git默认没有简写指令

》注意: 一般情况下不建议自定义简写指令

》git中的简写称之为起别名

> 查看log

》git log 文件名

》注意: GIt中的版本号是一个”40位“的哈希值, 而SVN中的版本号是一个递增的整数

》已经提交

git reset —hard HEAD^ 返回上一个版本

其中—hard代表强制重置

git reset —hard 版本号(只需要写前7位)

》未提交

git checkout 文件名 回退到上一次提交的版本

git reset —hard HEAD  回退到上一次提交的版, 注意HEAD后面没有尖号^

c9ad690 HEAD@{0}: commit: main.c

7026f99 HEAD@{1}: commit: 输出结果

e950c89 HEAD@{2}: commit: 新增输入

c7bf91c HEAD@{3}: commit: 添加变量

cbd9e52 HEAD@{4}: commit: 删除print函数

45ea44d HEAD@{5}: commit: 添加了printf函数

0da06d8 HEAD@{6}: commit (initial): i

>git reflog  查看所有修改信息(所有版本)

》查看文件被修改的什么地方

】 》git diff 文件名

》如果显示绿色代表新增

》如果显示红色代表删除

远程仓库

SVN需要一个单独的服务器

Git不需要: 文件中、U盘中、云上、github、OSChina...

1.新建git远程仓库

》git init —bare

注意: 这个仓库仅仅是用于管理代码, 不参与开发

2.项目经理初始化项目

》2.1先克隆一份空得仓库到本地

git clone /Users/apple/Desktop/working/公司远程仓库

》2.2忽略不需要加入版本控制器的文件以及文件夹

.gitignore

注意: 配置忽略文件只需要到github上搜索.gitignore拷贝别人写好的代码即可

配置.gitignore一定要在和.git隐藏文件夹同一级的目录下

》2.3生成好.gitignore文件之后, 还需要将.gitignore文件添加到版本控制

git add  .gitignore

git commit .gitignore -m””

》2.4新建项目

》 source conrol—>commit  将代码提交到本地仓库

》source conrol—>push 将代码提交到远程仓库

git中默认就会创建一个分支, 这个分支叫做origin/master, 相当于svn中的trunk

专业人员只需要在git仓库的hooks文件夹中写一些指令, 就可以完成自动测试(压力测试、自动测试、集成测试、冒烟测试、。。。)

》 和SVN一样, 如果服务器仓库的代码被修改了, 我们再提交代码也会报错。

fetch first == out of data

总结:

git和svn最大的区别

》1.git每次修改新增都需要add

》2.git每台电脑都有一个仓库

》3.git是先提交到本地仓库, 再提交到远程仓库

新人服务器搭建

1.新建一个新人服务器

2.初始化仓库

git init --bare

3.添加一个新的远程仓库

source control —> master —>config —>remotes —>add —> add remote

4.将经理最新的代码提交到新人服务器

5.经理分配新人服务器的地址给新人

GIT的分支管理

》在本地代码库给项目打上一个标签

git tag -a v1.0 -m 'Version 1.0’

》查看当前标签

git tag

注意: 此时此刻打上的这个标签仅仅是一个本地标签。(和服务器没有关系)

》将标签添推送到远程代码库中

git push origin v1.0

1.开发

2.发布

3.保存稳定版本

4.继续开发

5.出现bug

6.分配员工到分支上修复bug

>员工从服务器下载最新代码

》员工利用git checkout v1.0指令快速切换到1.0版本

》根据提示:开启一个新的分支开始修复代码

git checkout -b 1.0bug_fix

7.合并修复后的代码到主线

8.备份稳定版本

通过Xcode将代码提交到github上, 把仓库放在github上

=======================================================

》1.注册一个github账号

》2.配置SSH Keys, 只要配置了SSH Keys就可以和github无缝衔接

》点击昵称来到个人主页

》 点击主页中的设置(setting)

》 点击SSH Keys

》点击 generating SSH keys

》1.检查本地的ssh keys

在“用户目录”下 ls -al ~/.ssh

2.如果文件夹不存在需要手动创建一个

mkdir .ssh

3.根据github的提示2生成ssh keys

在.ssh目录下执行 ssh-keygen -t rsa -C "your_email@example.com”

输入完成之后连续按下回车, 知道出现牛逼的图形位置

4.生成完公钥和私钥之后输入

ls -la查看是否生成成功   id_rsa(私钥) id_rsa.pub(公钥)

5.根据提示3获得公钥

pbcopy < ~/.ssh/id_rsa.pub

6.点击 setting —》 ssh key —>add ssh key

将刚才获取到得公钥添加进去

7.更具github第4步提示, 验证公钥

验证成功网页上的灰色圆点会变成绿色

8.拷贝到公钥之后打开github主页

》点击仓库(Repositories)

》再点击new来到github创建仓库界面

9.通过github提供的地址下载一个空得仓库到本地

》创建一个新的项目到本地仓库文件夹中

》利用Xcode提交代码到github

》注意: 要求输入用户名密码时候, 输入的是github上显示的昵称而不是登录账号

=======================================================

现实生活:

运动场 == 物理仿真器

跑步 == 物理仿真行为

人 == 仿真元素

// 1.创建物理仿真器

// 2.创建物理仿真行为

// 3.将物理仿真行为添加到仿真器中

1.可以将需要导航的位置丢给系统自带的APP进行导航

2.发送网络请求到公司服务器获取导航数据, 然后自己手动绘制导航

3.利用三方SDK实现导航(百度)

>当点击开始导航时获取用户输入的起点和终点

>利用GEO对象进行地理编码获取到地标对象(CLPlacemark )

>再利用获取到的地标对象(CLPlacemark)创建MKPlacemark

>利用MKPlacemark创建起点的item

>终点和起点逻辑一样

1.发送请求到苹果的服务器获取导航路线信息

2.根据服务器返回的路线信息自己绘制导航路线

百度地图在2.5以前是不支持64位手机

注意: 想要使用百度地图SDK必须成为百度的开发者, 并且创建自己的应用

>创建好应用之后就可以拿到访问百度地图的KEY

>将创建应用时填写的安全码填入到应用程序的bundle identifier中

应用程序中的bundle identifier必须和百度开发者网站上的安全吗一致

libbaidumapapi.a静态库==百度以及实现好的功能

注意: 静态库是区分真机和模拟器的, 如果在真机上使用模拟器的静态库是不可以运行的

1.> "_SCNetworkReachabilityCreateWithName", referenced from:

代表静态库中依赖的一些框架没有导入.如果静态库中用到了框架就必须导入

2.> "std::terminate()", referenced from:

但凡看到错误提示中提示两个冒号C++代码, 默认情况下Xcode创建的工程是不支持C++.

如何解决: 将工程中任意一个文件的后缀改为.MM即可

.c  C代码

.cpp C++代码

.m  C代码 + OC代码

.MM C代码 + OC代码 + C++代码

3.>Undefined symbols for architecture x86_64:

以后但凡看到这个错误, 一般是指用到的三方框架不支持64位手机

4.>注意:如果使用的Xcode6创建的工程, 想要成功的集成百度地图,还需要手动的添加一个Bundle display name

网易

>授权

>详情

新浪

判断网易是通过点击授权按钮跳转过来的,

还是通过点击详情按钮跳转过来的

SSO?

如果我们的手机上已经安装了需要分享的平台客户端, 会直接打开客户端要求用户授权, 而不需要用户输入账号密码

SSO?

如果我们的手机上已经安装了需要分享的平台客户端, 会直接打开客户端要求用户授权, 而不需要用户输入账号密码

如果控件有默认的内容(宽高), 我们只需设置autoalyout的X/Y, autolayout会自动计算出宽高

Xcode6将Storyboard变成豆腐干的目的:

在Xcode6之前, 如果要同时适配iPhone和iPad需要编写两个Storyboard

>Main_iPhone. Storyboard

>Main_iPad. Storyboard

能够在一个界面中同时配置iPhone和iPad

Xcode6d的images.xcassets可以和Storyboard一样, 可以指定图片在什么情况下显示

*代表Any 任意的

-代表压缩的

+正常的

iOS8开始, 苹果为了拉拢其它语言的程序员, 推出一门全新的牛逼的语言, swift. 长相和其它各种语言都极其相似. swift和其它语言一样提出了一个叫做命名空间的概念, 所以苹果取消了类前缀的设置.

but, 如果老项目继续维护, 那么设置类前缀还是必须的, 也就是说如果继续使用OC编码, 类前缀还是必须的

Xcode6开始, 苹果取消了PCH文件, 也就是说不推荐我们使用PCH文件.

Xcode6为了提高用户的隐私安全, 将应用程(main bundle)和沙河的位置(doc cache ..)改变了

随着项目的业务逻辑越来越复杂

随着项目越来越大

那么我们Storybard中得控制器就越来越多, 就越来越难以维护

可以将复杂的事情简单化

拆分

点击消息界面的 “详情按钮” 模态弹出详情界面(红色)

点击详情界面的”返回按钮”就让详情界面消失

如果控件有默认的内容(宽高), 我们只需设置autoalyout的X/Y, autolayout会自动计算出宽高

Xcode6将Storyboard变成豆腐干的目的:

在Xcode6之前, 如果要同时适配iPhone和iPad需要编写两个Storyboard

>Main_iPhone. Storyboard

>Main_iPad. Storyboard

能够在一个界面中同时配置iPhone和iPad

Xcode6d的images.xcassets可以和Storyboard一样, 可以指定图片在什么情况下显示

*代表Any 任意的

-代表压缩的

+正常的

iOS8开始, 苹果为了拉拢其它语言的程序员, 推出一门全新的牛逼的语言, swift. 长相和其它各种语言都极其相似. swift和其它语言一样提出了一个叫做命名空间的概念, 所以苹果取消了类前缀的设置.

but, 如果老项目继续维护, 那么设置类前缀还是必须的, 也就是说如果继续使用OC编码, 类前缀还是必须的

Xcode6开始, 苹果取消了PCH文件, 也就是说不推荐我们使用PCH文件.

Xcode6为了提高用户的隐私安全, 将应用程(main bundle)和沙河的位置(doc cache ..)改变了

随着项目的业务逻辑越来越复杂

随着项目越来越大

那么我们Storybard中得控制器就越来越多, 就越来越难以维护

可以将复杂的事情简单化

拆分

点击消息界面的 “详情按钮” 模态弹出详情界面(红色)

点击详情界面的”返回按钮”就让详情界面消失

AVAudioPlayer  只能播放本地音乐

AVPlayer     远程音乐

SVN(一次检出&二次检出)的相关教程结束。

《SVN(一次检出&二次检出).doc》

下载本文的Word格式文档,以方便收藏与打印。