当前位置: 首页 > 编程日记 > 正文

【TortoiseSVN使用教程】

TortoiseSVN使用教程

TortoiseSVN是一个SVN的客户端

1.Checkout Repository 
       首 先要Checkout服务器端的Repository,所谓的Checkout就是指获得服务器端指定的Repository。存储的所有文件这个 Checkout和Visual Source Safe的Checkout意义完全不一样,VSS的Checkout指的是锁定某个文件,如果你以前使用过VSS,在学习Subversion时这个问 题一定要注意。
Checkout的具体方式是: 
       在客户端新建一个空目录,比如:F:\Project1在该目录上单击 右键,在弹出式菜单中选中SVN Checkout...,之后在“URL of Repository”文本框中填入你想要连接的Repository的地址,这个URL地址可以用浏览方式加入。对于在本教程第二节建立的 Repository,URL应该是“svn://xxx/project1”(xxx可以是服务器端主机名,也可以是服务器端的ip地址)。然后点 OK,会弹出一个认证对话框,输入在教程第三节设置的用户名和密码。点OK后就完成了对Repository的Checkout。比如:在服务器端 Repository中有一个a.txt文件,那么Checkout之后F:\Project1目录下也会出现一个a.txt文件。在本例中由于服务器端 的Repository还未添加任何文件,所以在客户端的F:\Project1下没有文件被Checkout。 
       执行Checkout除了会在F:\Project1产生Repository存储的文件及目录外,还会产生了一个“.svn”的隐含目录,该目录是由subversion管理的,不要删除或者手工改动其中的文件和目录。现在F:\Project1中的文件和目录就叫做Repository的“Working Copy”简写“WC”以后对Repository中文件和目录的修改,添加,删除的操作,都是通过对这个“Working Copy”的操作实现的。
Checkout 执行完后,会发现F:\Project1目录的图标的左下角附着了一个小的状态图标(当F:\Project1目录中的文件改变时,这个状态图标也会随之 变化),它表示F:\Project1是一个Repository的“Working Copy”,F:\Project1内的所有文件和目录也会有类似的状态图标。

2.添加文件 
       将 要添加的文件或者目录拷贝到F:\Project1下,然后在该文件或目录上单击右键,TortoiseSVN->Add,点OK。如果添加了不止 一个文件或目录,则鼠标不要在F:\Project1中点中任何文件,然后单击右键,TortoiseSVN->Add,就可以添加多个文件或目 录。
这时文件的状态图标会发生变化。Add命令只是告诉本地的“Working Copy”将该文件纳入版本管理,并没有将这个改变提交到服务器端,如果想要别人也看见你对Repository的修改,你需要在F:\Project1下单击右键,SVN Commit...,将你所做的修改提交到Repository。文件的状态图标也会更新。不管你在“Working Copy”内添加、修改、删除文件后,要想其他人也看见你的修改,都必须用Commit命令将所做修改递交到服务器端的Repository。

3.修改文件
       用文本编辑器或IDE对文件修改后,文件的状态图标会变化,然后单击右键,SVN Commit...提交修改,只有当执行Commit提交修改后,你所作的修改才会反映到服务器端的Repository中。

4.删除文件
       删除文件时,选中要删除的文件或目录,单击右键,TortoiseSVN->Delete,提交修改。注意千万不要用“Delete”键来删除文件,否则将无法提交你的修改。这一点对目录的删除来说尤为重要。

5.放弃修改
       当你添加、修改、删除文件后,决定放弃修改,你可以单击右键,TortoiseSVN->Revert,本地的“Working Copy”中的文件和目录会恢复到你修改前的状态。

6.获取Repository的最新版本
       当一个团队合作开发项目时,每一个人都在不断的对Repository进行更新,你需要不断的更新自己的“Working Copy”,
以获取项目最新的文件。当第一次获得最新Repository的文件时,我们用Checkout命令,前面已经介绍了,以后再获取最新文件时就不用Checkout了。而改用Update命令。

接着前面的例子,这时F:\Project1已经成为一个“Working Copy”了(通过执行Checkout命令),现在其他人已经对Repository进行了修改,我想将别人的修改反映到我的“Working Copy”中,具体的方法是:在F:\Project1目录上单击右键,SVN Update。这时F:\Project1中的文件就是最新的版本了。
       注意,如果当你的“Working Copy”中有被修改的文件,或者有被删除的文件,并且还未提交这些修改时,这些文件在执行Update过程中是不会被更新的。
       比如你修改了F:\Project1下a.txt文件,还未提交修改,那么,当你对F:\Project1进行Update时,a.txt文件是不会更新 为Repository上的a.txt文件的。所以如果想放弃当前的所有修改,并将F:\Project1下所有文件及目录更新到最新版本,应该先对F: \Project1执行Revert命令再执行Update命令。

7.subversion的版本控制模型
       当你用subversion进行版本控制时,Subversion会记录你对Repository进行的每一次修改(包括添加,修改,删除等等),每修改 一次Repository都会产生一个新的Revision(修订版本号),不同的Revision代表了不同时刻Repository的状态,因此我们 可以用这个Revision回朔任意时刻Repository的状态,就像时间机器一样,也就是说某一Revision就是Repository在某一时 刻的一个“快照”。
注意:Revision不是针对某一个文件或者目录,而是针对整个Repository而言的。每修改一次Repository,Revision 都会增加1。
Subversion的版本控制模型是一种叫做Copy-Modify-Merge(拷贝-修改-合并)的模型。
考虑这种情况:
       张三和李四是公司同一个部门的同事,他们共同维护一个文本文件a.txt,并且对该文件进行版本控制,因此他们把这个文件放到一个Repository上共同维护该文件。
       周一上午9点,张三和李四同时想对a.txt文件进行修改,于是他们同时从Repository上取得该文件的最新版本(Revision 10),然后进行修改。过了三分钟,张三首先完成了修改,他在该文件的第五行修改了一个单词的拼写(将Typo改为Type),于是张三对修改后的文件执行Commit命令,将修改提交到服务器端的Repository中。这时Repository的Revision变为11。六分钟过后,李四也完成了他的修改,他修改了该文件第十行上的一个单词拼写(将He改为She), 于是他也对修改后的文件执行Commit命令,这时Subversion 在提交修改时会发现,李四修改的文件是Revision10的a.txt文件,而不是最新的Revision 11的a.txt文件。于是,Subversion 提示李四在提交修改前,应该先将Working Copy更新到最新版本,李四执行Update命令将Working Copy更新到Revision 11,这时Subversion会提示已经完成合并,李四的a.txt文件的第五行的“Typo”已经变为了“Type”,
第十行还是“She”,就是说Subversion已经将张三的修改“合并”到李四的a.txt文件中了。之后,李四再执行Commit命令,就能将他对第十行的修改(将He改为She)提交到服务器端的Repository中了(生成Revision 12)。
       但是这种合并在某些情况下会变得复杂一些,
       比如:李四对a.txt文件的修改并不是第十行,而是与张三同样修改第五行的单词, 李四将“Typo”改为“Typr”,并且提交修改,这时Subversion会提示李四在提交修改前,应该先将Working Copy更新到最新版本,李四执行Update命令将Working Copy更新到Revision 11,这时Subversion将Revision11的a.txt文件与李四修改的a.txt文件进行合并时发现李四修改的同样是第五行,于是 Subversion就无法判断是李四的修改(“Tpyr”)正确还是张三的修改(“Type”)正确,因为他们都是在Revision10的a.txt 基础上作的修改。这种情况叫做Conflict(冲突),a.txt文件的图标会变成一个黄 色三角。这时,只能依靠李四自己去判断到底第三行应该修改为“Typr”还是“Type”。当李四确定修改之后,在a.txt文件上单击右 键,TortoiseSVN->Resolved告诉Subversion已经解决了Conflict。这时再执行Commit命令就能提交修改 (生成Revision 12)。Subversion 这种控制方式保证了你对文件所作的修改都是基于文件的最新版本。

8.“.svn”目录
       在客户端Working Copy的每一层目录中都会有一个“.svn”目录,该目录是Subversion进行管理用的目录。不要手动修改其中的文件。该目录存储了Working Copy的一个副本(实际存储副本的地方是F:\project1\.svn\text-base目录),
比 如:F:\Project1是一个Working Copy,该目录下有两个文件a.txt和b.txt还有一个子目录ccc,子目录ccc中还有一个d.txt文件。“.svn”目录中存储的是你最近一 次执行完Update或者Commit命令之后当前目录中文件的副本,比如:F:\project1\.svn\text-base中存储的a.txt和 b.txt是最近一次执行完Update或者Commit命令之后F:\project1下的a.txt和b.txt的拷贝。也就是说你所作的修改都是基 于“.svn”目录存储的那些文件。这种机制可以让我们在不连接网络的情况下,将Working Copy中的文件恢复到修改之前的状态。
Subversion 的Revert命令就是利用了这种机制来实现的。比如你修改了F:\project1\a.txt文件,这时你又改变了主意想放弃对该文件的修改,你可以 单击右键,TortoiseSVN->Revert,修改过的F:\project1\a.txt文件就会被F:\project1\.svn \text-base中a.txt文件的副本所替代,使得a.txt恢复到修改前的状态。Working Copy中每一个子目录下都会有一个“.svn”目录,并不是只有最上层目录才有“.svn”目录。所以,F:\project1\ccc下也有一个 “.svn”目录,该目录存储的是F:\project1\ccc\d.txt的副本(d.txt的副本位于F:\project1\ccc\.svn \text-base)。也就是说每个“.svn”目录只存储同级目录中的“文件”副本,而不存储“目录”副本。“.svn”目录存有许多重要的内容,所 以前面说在删除文件或目录时,必须用TortoiseSVN->Delete,而不能用“Delete”键来删除文件或目录,尤其是对于目录的删 除。

9.混合版本 
       Subversion 的Working Copy被设计成一种能够包含不同版本的文件共存的形式。比如F:\Project1是一个Working Copy,该目录下有两个文件a.txt和b.txt。执行Update命令,将Working Copy更新到最新版本(Revision 24)。这时,a.txt和b.txt的Revision都是24(其实对于单个文件来说并不存在Revision,Revision是对于整个 Repository而言的,这里所指的是Repository的Revision24所存储的a.txt和b.txt,但为了方便而采用这种描述方式, 请注意,下同)。之后,你的同事修改了a.txt,并且提交了修改,这时Repository的Revision就变成25了。注意,这时你没有再次执行 Update,因此你的Working Copy的Revision还是24。这时你修改了b.txt文件,并提交修改。因为Revision25并没有对b.txt文件进行修改,因此你对 b.txt文件的修改是基于b.txt文件最新的版本,所以不会出现Conflict。当你提交b.txt的修改后,产生Revision26。这时你会 发现你的Working Copy中的a.txt文件并不是Revision25中的a.txt文件,它还是Revision24的a.txt文件,而你的b.txt文件是 Revision26的b.txt文件。也就是说当你Commit时,你的Working Copy中只有你提交的那些文件是最新版本,而其他没有修改的文件并不会更新为最新版本。这样就造成了你的Working Copy由不同的Revision文件所组成(Revision24的a.txt文件和Revision26的b.txt文件)。前面说过在提交修改前必 须保证你是在文件的最新版本基础上修改,
如果在这种混合版本的情况下,

怎样才能知道当前Working Copy中的文件是否为最新版本?
       在前面所说的“.svn”目录中有一个文件名为“entries”的文件,该文件记录了当前Working Copy中的每一个文件的Revision,因此当你Commit时,Subversion会从该文件中取得你提交文件的Revision,再与 Repository的最新Revision一比较就可以知道你修改的文件是否基于该文件的最新版本。

10.文件的锁定
       前面说过Subversion的版本控制模型是一种叫做Copy-Modify-Merge(拷贝-修改-合并)的模型。该模型在对文本文件进行版本控制 时工作的很好,但是有些需要进行版本控制的文件并不是文本文件,比如说图像文件,这种模型在这种情况下就不能正常工作了,因为文本文件可以合并,而二进制 文件则无法合并。所以Subversion从1.2开始支持一种叫Lock-Modify-Unlock(锁定-修改-解锁)的版本控制模型。在 Windows下最常用的版本控制软件Visual Source Safe(VSS)就是采用这种模型。这种模型要求在对一个文件修改前首先要锁定这个文件,然后才能修改,这时,别人将无法对该文件进行修改,当修改完后 再释放锁,使其他人可以对该文件进行锁定,然后修改。锁定文件的方法是:TortoiseSVN->Get Lock...再点OK按钮,这时就完成了对文件的锁定。这时,如果其他人想对文件进行锁定时,Subversion会对他提示该文件已经被别人锁定。当 你修改完文件后,然后单击右键,SVN Commit...,将修改提交,默认情况下,提交的时候就会对该文件解锁,如果你想仍然锁定该文件,请在commit时弹出的对话框中选中keep lock复选框。

11.文件的附加属性
       在Subversion中,每个文件可以拥有一种叫做附加属性的东西。附加属性描述了该文件所拥有的一些特性。Subversion已经预定义了一些附加 属性(这里只是指Subversion已经定义了一些附加属性的“名称”,并不是指已经将这些属性附加在文件上了,比如默认情况下文本文件一开始不含任何 属性,直到人为的对该文件添加附加属性),并且你可以对文件添加自定义的属性。Subversion对待附加属性就像对待文件内容一样,当修改了一个文件 的附加属性(添加,改变,删除附加属性),即使没有对文件的内容进行修改,同样可以Commit该文件,就像更改了文件内容那样,Repository也 会生成新的Revision,所以从某种意义上来说,Subversion不区别对待文件的附加属性的修改和文件的内容的修改,文件的附加属性可以看成是 一种特殊的文件内容。Subversion预定义了若干个附加属性,这里只讨论“svn:needs-lock”属性,因为它与我们上面的文件锁定会产生 的一个问题有关。其他的属性可以参考Subversion自带的帮助文档。考虑这种情况,张三和李四同时想对一个图片文件a.jpg作修改,张三在修改时 先将该文件锁定,然后进行修改,同时李四也开始对该文件进行修改,但李四忘记了对非文本文件进行修改时应该先锁定该文件。张三首先对该文件修改完毕,于是 张三向服务器提交了他的修改。之后,李四也完成了修改,当他提交修改时,Subversion提示李四的文件版本不是最新的,在Commit之前应先更新 a.jpg到最新版本,由于图片文件无法合并,这就意味着张三和李四之间必定有一个人的修改会作废。应用“svn:needs-lock”属性可以避免这 个问题。当一个文件拥有“svn:needs-lock”属性时,该文件在没有锁定时,文件的图标是灰色的,表示该文件是一个只读文件(该文件的 Windows只读属性的复选框为选中),这个灰色的图标就会提醒想对该文件进行修改的人,在修改该文件之前应该首先锁定该文件。锁定该文件之后,文件的 只读属性就会去掉了,一旦释放掉锁,文件的图标又会变成灰色,文件也会变成只读的了。李四在这种情况下就会避免在没有锁定文件时对文件进行修改。对非文本 文件添加“svn:needs-lock”属性应该在将该文件第一次添加到Repository时就设置,当然,一个文件可以在任意时刻添加附加属性,这 样做是为了减少李四所遇到的那个问题发生的几率。

具体的方法是:
       首先将a.jpg文件拷贝到Working Copy中,然后在该文件上单击右键,TortoiseSVN->Add,告诉Subversion要将该文件纳入版本控制,接着在该文件上单击右 键并选中属性,在弹出的属性对话框中选中Subversion页。在下拉框中选中“svn:needs-lock”,并在下面的文本框中填入“*”(其实 这里填什么都无所谓,只要文件有“svn:needs-lock”附加属性就行),之后点Set按钮“svn:needs-lock”附加属性就设置好 了。然后执行Commit命令提交修改。这时当其他人执行Update时,a.jpg就会添加到他们的Working Copy中,并且文件的附加属性也会随文件一起被得到。可以看到a.jpg此时的图标就是灰色的,文件的Windows属性也是只读的。

12.回到以前的版本
       由于Subversion会记录你对Repository的每一次修改,因此能够很容易的获得Repository以前某一时刻的状态。比如:现在 Repository的最新Revision是56,这时我想看看Repository在Revision24时的状态,可以在本地的Working Copy中单击右键,TortoiseSVN->Update to Revision...,然后输入你想要回复到的Revision号,点OK按钮。回到以前的版本还有一种情况是我想将Repository的最新 Revision的状态与以前某一个Revision的状态一模一样,上面那种方法就不适合,上面的那种方法只是将本地的Working Copy回复到以前的状态,而服务器端的Repository并没有回到以前的状态。将Repository的最新Revison的状态回复到以前某个 Revision的状态具体的方法是: 

       先执行Update命令将Working Copy更新到最新的Revision,然后在Working Copy中单击右键,TortoiseSVN->Show Log,弹出的Log Messages窗口中会显示该Repository的所有Revision,选中最新的Revision,之后按住Shift键,再单击你想回复到的 Revision+1的那个Revision(比如Repository的最新Revision是30,你想将Repository的状态回复到 Revision16,那么就选中Revision30,再按住Shift键,选中Revision17,就是说选中Revision17到 Revision30之间的所有Revision)。然后在选中的Revision上单击右键,选中“Revert changes from these revision”。再点Yes按钮,就可以将Working Copy的状态回复到目标Revision。注意,此时只是Working Copy回复到目标Revision,之后应该用Commit提交修改,这样Repository最新状态就与目标Revision的状态一样了。这两种 回复到以前版本的方式截然不同,第一种方式是将整个Working Copy回复到某个Revision,也就是说这种方式Working Copy中的“.svn”目录所存的文件副本也与目标Revision的一模一样,如果这时你没有修改文件,你将不能执行Commit命令。而第二种方式 客户端Working Copy中的

“.svn”目录所存的副本始终是最新的Revision的文件副本(这里我们基于一个假设:在 Update之后没有其他人对Repository做修改)。这种方式就像是我们自己手工将Working Copy的文件状态修改为目标Revision,在修改之后提交修改一样。


13.查看修改
       有时我们对Working Copy的许多文件进行了修改,这些文件位于不同的子目录,我们就可以在Working Copy的最上层目录单击右键,TortoiseSVN->Check For Modifications,弹出的对话框就会显示你所做的所有修改明细。还有一种情况是我们的Working Copy已经很久没有执行Update命令,我们想看看Working Copy中有哪些文件已经发生修改了,这时就可以在Working Copy的最上层目录单击右键,TortoiseSVN->Check For Modifications,在弹出的对话框点击Check Repository按钮后,就会显示服务器端已经修改了的文件。该方法还有一个用途就是查看文件的锁定,当你想锁定一个文件时,你想先看看这个文件有没 有被别人锁定,点击Check Repository按钮会显示服务器端Repository所有被锁定的文件,如果你想锁定的文件不在这里面,那就说明该文件目前没有人锁定。

相关文章:

[ASP.NET MVC 小牛之路]10 - Controller 和 Action (2)

继上一篇文章之后,本文将介绍 Controller 和 Action 的一些较高级特性,包括 Controller Factory、Action Invoker 和异步 Controller 等内容。 本文目录 开篇:示例准备 文章开始之前,我们先来了解一下一个请求的发出到Action方法处…

Linux下遍历指定目录的C++实现

之前在 https://blog.csdn.net/fengbingchun/article/details/51474728 给出了在Windows遍历指定文件夹的C实现,这里给出在Linux下遍历目录的实现,Windows和Linux下的实现都是参考了OpenCV 2.x中的实现,OpenCV中的用法可参考https://blog.csd…

要活102年,阿里凭借的是什么?

由浅到深、由轻到重、由拥抱到创新,看似“风平浪静”的历史背后,中国互联网江湖的发展实则“波涛汹涌”。对于身处核心位置的科技巨头阿里巴巴而言,将如何更好地去实现“希望活 102 年”的愿景?凭借的究竟又是什么?作者…

Go基础知识学习(6) 接口

2019独角兽企业重金招聘Python工程师标准>>> Golang接口定义使用interface来声明,它相对于其他语言最大的特定就是接口定义和实现的关联性仅仅依赖接口的名字和声明,无需显式声明。 接口定义和实现 在下面这个例子中,定义了两个自…

多模态数据+知识图谱,这次你的疑难杂症有解了!

数据是AI的基础,不同行业领域的数据来源广泛、形式多样,其每一种来源或形式都可以看作是一种模态,例如视频、图片、语音以及工业场景下的传感数据,红外、声谱等。多模态数据的语义理解与知识表示让智能体能更深入地感知、理解真实…

Linux下通过gettimeofday函数获取程序段执行时间

在Linux下计算某个程序段执行的时间一般使用gettimeofday函数,此函数的声明在sys/time.h文件中。此函数接收两个结构体参数,分别为timeval、timezone.两个结构体的声明如下:struct timeval {time_t tv_sec; /* seconds */long tv_usec; /* mi…

matlab练习程序(Log Polar变换)

Log Polar就是所谓的极坐标变换,通过变换能将笛卡尔坐标系中的图像映射到极坐标系中。 确切的来说我这里不算是Log Polar,因为Log Polar是将图像从(x,y)映射到(log(r),theta),而我是将图像从(x,y&#xff0…

SiteMapPath基本用法

1、添加一个网站地图项 Web.sitemap项 2、在 Web.sitemap项的写法如下&#xff1a; <?xml version"1.0" encoding"utf-8"?><siteMap xmlns"http://schemas.microsoft.com/AspNet/SiteMap-File-1.0"><siteMapNode url"defa…

closurescallbacks

引用文章原文地址&#xff1a;&#xff08;声明&#xff1a;文章只为自己总结知识&#xff0c;内容东拼西凑&#xff0c;版权归以下作者所有。&#xff09; 1. Wikipedia: callback(computer science) 2. Implement callback routines in Java By John D. Mitchell, JavaWorld.…

吴恩达老师深度学习视频课笔记:卷积神经网络

计算机视觉&#xff1a;包括图像分类(image classification)、目标检测(object detection)、风格迁移(neural style transfer)等等。边缘检测示例&#xff1a;神经网络的前几层可以检测边缘&#xff0c;然后后面几层可能检测到物体的部分&#xff0c;接下来靠后的一些层可能检测…

COCO 2019挑战赛,旷视研究院拿下三项计算机识别冠军 | ICCV 2019

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;10月27日&#xff0c;两年一度的国际计算机视觉大会ICCV 2019&#xff08;InternationalConference on Computer Vision&#xff09;在韩国首尔开幕。作为ICCV 2019重头戏&#xff0c;COCO 是人工智能领域最具影响力的…

runners学习

runners是由salt-run命令调用的&#xff0c;一般我用的到就是jobs和manage模块。源代码是在./site-packages/salt/runners/下的。当然我们可以自定义runners。先谈谈jobs模块。包含active、lookup_jid、list_job、list_jobs、print_job五种方法。salt-run jobs.active ->返回…

Swift基础 - - 高德地图实践

高德地图开发需要自己到官网http://lbs.amap.com/console/ 注册一个ak&#xff0c;新建一个swift工程&#xff0c;然后在Info.plist中添加一个NSLocationAlwaysUsageDescription或者NSLocationWhenInUseUsageDescription。 高德地图的库以及依赖库加入到项目里面 需要的库如下…

Shell脚本示例代码

1. echo_printf_usage.sh: echo和printf的用法 #! /bin/bash# echo和printf的用法# echo是用于终端打印的基本命令.在默认情况下,echo在每次调用后会添加一个换行符 echo "hello, beijing" echo "$(pwd)" echo $(pwd) # 结果并不是希望得到的,将会输出: $…

「2019嵌入式智能国际大会」 399元超值学生票来啦,帮你豪省2600元!

2019 嵌入式智能国际大会即将来袭&#xff01;购票官网&#xff1a;https://dwz.cn/z1jHouwE物联网是继计算机、互联网和移动通信之后的又一次信息产业的革命性发展&#xff0c;在互联网和移动互联网高速发展的时代&#xff0c;几乎所有行业都有数据联网的需求。无论是国外的科…

ThinkPHP学习笔记之Model操作

2019独角兽企业重金招聘Python工程师标准>>> 1. 3种实例化model模型方法 a) new 命名空间GoodsModel(); b) D([“模型标志Goods”]) (之前版本会实例化自定义model对象&#xff0c;目前都实例化Model基类对象) i. 没有参数实例化一个Model对象、有参数也实例化一…

Ubuntu 14.04 64位上配置JDK操作步骤

1. 从 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载jdk-8u172-linux-x64.tar.gz; 2. 解压缩&#xff1a; tar -xvzf jdk-8u172-linux-x64.tar.gz 3. 创建/usr/jdk目录&#xff1a; sudo mkdir -p /usr/jdk 4. 将解压缩后的jd…

Swift语言实现代理传值

需求&#xff1a;利用代理实现反响传值&#xff08;以下例子采用点击第二个视图控制器中的按钮来改变第一个视图控制器中的Label的内容&#xff09; 一、创建RootViewController import Foundation import UIKitclass RootViewController:UIViewController,ChangeWordDelegate{…

亚马逊马超:如何使用DGL进行大规模图神经网络训练?

演讲嘉宾 | 马超&#xff08;亚马逊应用科学家&#xff09;整理 | 刘静 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;与传统基于张量&#xff08;Tensor&#xff09;的神经网络相比&#xff0c;图神经网络将图 (Graph) 作为输入&#xff0c;从图结构中学习潜在的知…

Python学习系列(六)(模块)

Python学习系列&#xff08;六&#xff09;(模块) Python学习系列&#xff08;五&#xff09;(文件操作及其字典) 一&#xff0c;模块的基本介绍 1&#xff0c;import引入其他标准模块 标准库&#xff1a;Python标准安装包里的模块。 引入模块的几种方式&#xff1a; i&#xf…

Ubuntu14.04 64位上配置终端显示git分支名称

之前在Ubuntu14.04上在终端上显示git分支名称基本上都使用oh-my-zsh&#xff0c;可以参考 https://blog.csdn.net/fengbingchun/article/details/77803322 &#xff0c;由于限制了权限&#xff0c;使得不能安装oh-my-zsh&#xff0c;显示错误如下&#xff1a;在 https://githu…

创建UITextField对象

//创建UITextField对象 UITextField * tf[[UITextField alloc]init];//设置UITextField的文字颜色tf.textColor[UIColor redColor];//设置UITextField的文本框背景颜色tf.backgroundColor[UIColor grayColor];//设置UITextField的边框的风格tf.borderStyleUITextBorderStyleRou…

non-local神经网络:通过非局部操作解决深度神经网络核心问题

译者 | 李杰出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;回想一下我们熟悉的CNN、RNN。如下图所示&#xff0c;这些神经网络模型都是基于局部区域进行操作&#xff0c;属于local operations。为了获得长距离依赖&#xff0c;也就是图像中非相邻像素点之间的关系&a…

fgets()用法笔记

为了避免缓冲区溢出&#xff0c;从终端读取输入时应当用fgets()代替gets()函数。但是这也将带来一个问题&#xff0c;因为fgets()的调用格式是&#xff1a; fgets (buf, MAX, fp)fgets (buf, MAX, stdin) buf是一个char数组的名称&#xff0c;MAX是字符串的最大长度&#xff0c…

iOS 上常用的两个功能:点击屏幕和return退出隐藏键盘和解决虚拟键盘

原文地址&#xff1a;http://blog.csdn.net/xiaotanyu13/article/details/7711954 iOS上面对键盘的处理很不人性化&#xff0c;所以这些功能都需要自己来实现&#xff0c; 首先是点击return和屏幕隐藏键盘 这个首先引用双子座的博客 http://my.oschina.net/plumsoft/blog/42545…

深度学习可解释性问题如何解决?图灵奖得主Bengio有一个解

作者 | Yoshua Bengio, Tristan Deleu等译者 | 刘畅&#xff0c;编辑 | Just出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;自 2012 年以来&#xff0c;深度学习的发展有目共睹&#xff0c;今年 3 月&#xff0c;为此做出巨大贡献的 Yoshua Bengio、Yann Lecun和Geo…

zepto打造一款移动端划屏插件

效果图 样式1 样式2 调用 正常情况下应该是后台生成的html代码&#xff0c;但还是写了一套操作tab页的方法 调用简便如下&#xff1a; <link rel"stylesheet" href"kslider.css" type"text/css"/> <script type"text/javascript&q…

swift使用xib绘制UIView

目标&#xff1a;用xib绘制一个UIView&#xff0c;在某个ViewController中调用。 三个文件&#xff1a;ViewController.swift DemoView.swift DemoView.xib 首先&#xff0c;可以专心将DemoView.xib画出来&#xff0c;别忘记DemoView.xib中UIView的一处设置 然后&#x…

吴恩达老师深度学习视频课笔记:深度卷积网络

Why look at case studies?&#xff1a;过去几年&#xff0c;计算机视觉研究中的大量研究都集中在如何把卷积层、池化层以及全连接层这些基本构件组合起来形成有效的卷积神经网络。找感觉最好的方法之一就是去看一些案例&#xff0c;就像很多人通过看别人的代码来学习编程一样…

测试工程师的好日子来啦?Testin发布AI测试产品,提升易用性和自动化效率

2019年10月26日&#xff0c;以"AI未来"为主题的第二届NCTS中国云测试行业峰会在北京国际会议中心正式开幕。在本次大会上&#xff0c;Testin 总裁徐琨正式发布测试业务Testin云测的全新AI产品iTestin。作为 Testin 人工智能战略中的重要一环&#xff0c;iTestin 融合…