Edison's NoteSsss

Everything about me

Category: Code

理解Git工作流

From: http://heikezhi.com/2011/08/04/understanding-the-git-workflow/

如果你不了解Git背后的设计初衷,那么你正处在危险境地,当然有很多参数可以强迫Git按照你的意愿行事,但这并不是Git被设计的工作方式,这就好比你可以把改锥当锤子使用,并且它也可以完成工作,但这对改锥没什么好处。

下面就让我们来看一个最常见的Git工作流是如何变得没法收拾的。

首先从Master创建一个新分支,在这个分支上完成你的工作,然后将它合并回Master分支。

大多数情况下这不会有什么问题,你都会得到你预期的结果,这是因为在你创建新分支之后,Master的代码已经发生了变化。但是有一天,你合并了一个新特性到Master,不过这次Master的代码并没有发生变化,所以同以往不同,这次Git直接将Master指向了你的特性分支上的最后一个Commit,也就是“fast forwards”(见图),而不是创建一个合并commit。

不幸的是,你的新特性分支可能会包含一些checkpoint commits,这些小的commit保证了你的工作不会意外丢失,但是也让你的代码进入了相对不稳定的状态,现在你已经无法从Master的稳定commit中区分这些不稳定的commit了,一旦需要回滚,你很容易就会陷入灾难之中。

当然你可以添加一条规则:“只要是合并新特性时,都必须使用-no-ff来强制生成一个新的commit。”这样问题就解决了,于是你继续往下走。

直到有一天你在Production发现了一个严重的bug,你需要追踪这个bug是何时被引入的,于是你试图通过bisect来找出答案,但却总是找到那些checkpoint commit,于是你放弃了,并开始手动检查。

最终你将Bug定位到了某个单独的文件上,你想通过blame来查看过去48小时这个文件发生的变化,但是你发现这是不可能的,因为blame报告这个文件已经有几个星期没人碰过了,事实证明blame报告的是你最初的commit,而不是合并时的,你的第一个checkpoint commit在几周之前改变了这个文件,但是这个改变直到今天才被合并进来。

-no-ff标识就这样神奇的破坏了bisect和blame,就像你将改锥当做锤子一样。

重新考虑版本控制

版本控制系统的出现是为了解决2个问题

第一个问题就是帮助你更好的编写代码,你需要同你的团队成员同步代码,并且备份你的工作,通过Email发送压缩文件明显不是个靠谱的办法。

第二个问题就是配置管理,这主要是针对并行开发的管理,比如你需要在开发下一个大版本的同时,继续修复当前production版本存在的bug,配置管理也可以用来查找变更,但是这对于诊断Bug用处不是很大。

通常来说,这两个目的是矛盾的。

当你为一个新特性开发原型时,你应该不断的添加checkpoint commit,尽管如此,这些commit通常会破坏测试。

在一个理想的世界中,你的版本历史中的每次变更都应该是简明并且稳定的,不应该有checkpoint commit这种东西来制造噪音,也不应该有巨无霸,比如10,000行代码的commit,干净的提交历史让你可以很容易的撤销变更,或是在分支之间使用cherry-pick,干净的提交历史也让后期的代码检查和分析变得更简单。尽管如此,维护一个干净的提交历史记录却意味着你需要等待一切都变得完美之后再进行提交。

那么我们应该选择哪种策略呢?经常性的提交,还是保证提交历史干净整洁?

如果你是在一个产品还未发布的2人创业公司工作,干净的提交历史对你带来的好处非常有限,你可以把所有的commit都扔到Master,并在任何你需要的时候进行部署。

然后随着变更的增加,以及团队规模或是你的用户基数的增长,你需要工具和技术来确保所有事情都是经过检查的,这通常包括自动化测试,代码检查,以及干净的提交历史。

特性分支看起来是个不错的选择,它们解决了最基本的并行开发问题,但是在你写代码的时候,你迟早会开始考虑最后的集成问题。

当你的项目变得足够大时,简单的分支/提交/合并策略就变得不再奏效了,作坊式的开发时代已经结束了,你需要一个干净的提交历史。

Git的革命性就在于它很好的同时解决了这2个问题,让你在分支上开发新特性时,可以随时提交你的任何变更,并且在随后合并时,你依然可以得到一个干净的提交历史,如果这是你想要的,那么你就应该遵从Git的默认设置。

Git工作流

考虑下这两种类型的分支:公共和私有

公共分支保存着这个项目的权威历史,在公共分支上,每个提交都应该是简明,原子的,并且提交信息应该准确表达变更,同事应该尽可能的保证提交是线性的,并且是永久的,公开的分支包含Master以及Release分支。

而私有分支是属于你自己的,它就相当于你解决问题时候用到的草纸。

将私有分支存在本地是最安全的,如果你需要在你的工作电话和家庭电脑之间同步,最好告诉你的同事你推送的是一个私有分支,以防止他们在这个分支上进行开发。

永远不要把你的私有分支直接合并到任何公共分支上,而应该先使用reset,rebase,squash merges或者commit amending这样的工具清理你的分支。

你可以把自己想象成一个作家,并且将每个commit看做是一本书的章节,作家不会发布第一版手稿,Michael Crichton说过,“好书不是写出来的——而是改出来的”。

如果你使用的是其它系统,你可能会觉得修改历史是不可能的,所有提交就像刻在了石头上一样,是不可改变的,按照这个逻辑,那我们就应该在文本编辑器中禁用撤销功能。

实用主义者一般会直到事情变得不可收拾之时才会注意到问题的存在,对于配置管理来说,我们关心的是全局的变更,checkpoint commit仅仅只是为了方便撤销而保存的缓冲而已。

如果你认为你的公共历史是干净的,那么fast-forward合并不仅很安全,而且很可取,他们保证版本历史是线性的并且非常容易追踪。

而-no-ff参数唯一的作用就是“文档”,有人或许会使用merge commit的消息来表示最后一次合并到production代码中的版本信息,但是这是不对的,你应该使用tag。

根据我修改的代码量,以及修改的时间跨度,还有这个分支偏离Master的程度,我设定了3中基本的工作流。

短期开发

大多数情况都是这样,我通过squash merge来完成清理工作。

假设我创建了一个特性分支,并在接下来的一个小时做了许多checkpoint 提交。

git checkout -b private_feature_branch
touch file1.txt
git add file1.txt
git commit -am “WIP”

在我完成我的工作之后,我会运行下面的命令来完成合并:

git checkout master
git merge –squash private_feature_branch
git commit -v

然后花上一分钟详细的写上这次变更的注释。

大改动

有时一个特性可能需要几天才能够完成,并且包含许多小的提交。

这时我认为我的改动将会被打碎成许多更小的改动,所以squash在这种情况下就拍不上用场了(作为我的一条经验法则,我会问自己”这样有利于代码检查吗?“)

如果我的checkpoint commit包含逻辑上的递增,我可以使用rebase的互动模式。

互动模式非常强大,你可以使用它来编辑老的commit,分割它们,重新排序,在某些情况下,你还可以压缩(squash)它们。

我会在特性分支上执行:

git rebase –interactive master

它会打开一个编辑器,每一行包含一个commit,有SHA1以及commit的message,并且每个commit后面还会跟随一个可以执行的命令列表。

默认情况,每个commit都使用‘pick’,这不会改变commit。

pick ccd6e62 Work on back button
pick 1c83feb Bug fixes
pick f9d0c33 Start work on toolbar

我将这个操作改成了squash,这就会将第二个commit压缩到第一个commit中。

pick ccd6e62 Work on back button
squash 1c83feb Bug fixes
pick f9d0c33 Start work on toolbar

当我保存并关闭之后,会出现一个新的文本编辑器提示我为这些合并后的commit填写一个commit message,然后一切就绪。

废弃旧分支

如果我的特性分支已经存在了太久时间,并且我需要合并几个分支到我的特性分支以保证它是最新的,这样事情就变得错综复杂了,这时你可以很容易的获取原始的diff并创建一个干净的新分支。

git checkout master
git checkout -b cleaned_up_branch
git merge –squash private_feature_branch
git reset

现在我就有了一个新的分支,既有最近的Master上的commit,又有我上一个分支上的工作,现在我可以手动添加并提交我的变更了。

总结

如果你没有遵从Git的默认设置,那么你应该问问自己为什么?

你应该保证公共历史是永久的,原子的,并且易于追踪,而将私有分支看做是临时的,可丢弃的。

因此,理想的工作流应该是:

  1. 从一个公开分支创建一个似有分支。
  2. 经常新的在似有分支上提交你的工作
  3. 一旦你的代码已经完美了,那么清除它的历史
  4. 合并干净的分支到你的公共分支

特别感谢@joshaber以及@jbarnette提供反馈。

————–
本文翻译自”Understanding the Git Workflow”,作者:Benjamin Sandofsky,翻译:@yuanyiz

objective-c 之歌 最简单最快速的objective-c教程

刚才随便乱看看到的 看起来很有趣 就转来记录一下

转自:http://iammr.7.blog.163.com/blog/static/4910269920093914452407/

C没有类
这让人很疲惫
对象的说法很时髦
不就是继承封装组合人人会
右走是C++,这个大众都熟悉它
左走就是objective-c,躲在僻静僻静的麦金塔
本是同根生的C
如何高举面向对象的大旗
求同存异标新立异且听一一细分清

对象的C
是不同的C
类的处理与众不同重点要区分

不重复是我的口头禅
任何时候我只说一次告诉你我的地盘
[@begincommand] | @end就是我的指示
@interface classname 声明类
@implementation classname 实现类
@protocol interfacename 声明接口
就是这么简单,你的一定要明白

我先声明对成员变量和方法的关系有远近
成员变量大大括在我的怀
关系远近 public / protected / private 来区分
若不声明全默默受着保护
静态成员变量请不要放在此
成员方法我不太爱
前面拴着绳子置于类的变量列表外
减号就是普通函数
加号就是静态函数莫怪
函数的声明有点怪
我要一眼叫出名,包括函数名和参数名
其余的类型括起来,我有空再来慢慢看
函数名和参数名之间用:分隔开
多个参数的函数那就是更怪
逗号其实不是我的爱
后续的每个参数分隔用空白
每个参数形式如 标签:(参数类型)参数名
其实只要把函数名看作是第一个参数标签
你就能领悟其中的奥妙并在调用时喜爱
成员方法太多我才懒得区分亲疏远近
它们一律都是公之于众要好好的干活
谁若不服胆敢出头犯上
就踢出头文件打入冷宫永世不能露面试试看
所有的成员方法都是虚函数
改则重载,不改就继承
不用任何标记请放心大胆随便使用

对象的类,在继承层次上考虑才显得重要
所有的类最终都继承于NSObject
因为它给你创建自己生命的方法

不继承于NSObject的只能是接口protocol
它没有成员变量只有方法
它只有声明不用实现
这点和java很相似

当然类还有一些绝活可以让你开开眼
可以动态的扩充一个类 而不总是用继承
@interface CClassA(Category)|@end
@implementation CClassA (Category)|@end
源代码外包含该 类的头文件
就可以使用该Category中的方法

也可以动态的替换一个类
但是只限于用继承类来替换基类功能
[CInheritClass poseAsClass: [CBaseClass class]];
声明之后用基类创建的对象实际上行为都是继承类

所以一个类的完整声明如下:
@interface CClassA(Category): CBaseClass<IA,IB…>
类别,基类,接口一一具全
加上静态 虚函数
所有特性和C++均可对应
再加上所独有的特性
这一特性编译类语言很少有
设计得当完全可以实现动态调用dll切换功能

类的定义和使用,也有点怪
想想看一个对象的生命周期,该是如何办
创建很是别扭
这样就定义了一个类对象,
CClassName* pA = [[CClassName alloc] init];
能且只能返回对象指针
释放分为两种
自动释放声明后 [pA autorelease]; 以后可以不管
否则就必须配对 [pA release];
注意类的构造函数init可以捕获
但是析构函数却没有这点很让人意外

使用类也有多种情况
调用成员方法用中括号 int nRtn = [pA method:param1];
而静态成员方法不需要对象 int nRtn = [CClassName method];
调用成员变量还是C格式 pA->m_nCount = 1;

所有的类,都可以对应一个id类型
用来引用一个对象               id cur = sq;
或者用来引用一个对象指定的接口 id<IA> cur = sq;
然后就可以调用该对象的方法和指定接口方法

source insight快捷键及使用技巧

退出程序                             : Alt+F4

重画屏幕                             : Ctrl+Alt+Space

完成语法                             : Ctrl+E

复制一行                             : Ctrl+K

恰好复制该位置右边的该行的字符       : Ctrl+Shift+K

复制到剪贴板                         : Ctrl+Del

剪切一行                             : Ctrl+U

剪切该位置右边的该行的字符           : Ctrl+;

剪切到剪贴板                         : Ctrl+Shift+X

剪切一个字                           : Ctrl+,

左边缩进                             : F9

右边缩进                             : F10

插入一行                             : Ctrl+I

插入新行                             : Ctrl+Enter

加入一行                             : Ctrl+J

从剪切板粘贴                         : Ctrl+Ins

粘贴一行                             : Ctrl+P

重复上一个动作                       : Ctrl+Y

重新编号                             : Ctrl+R

重复输入                             : Ctrl+

替换                                 : Ctrl+H

智能重命名                           : Ctrl+’

关闭文件                             : Ctrl+W

关闭所有文件                         : Ctrl+Shift+W

新建                                 : Ctrl+N

转到下一个文件                       : Ctrl+Shift+N

打开                                 : Ctrl+O

重新装载文件                         : Ctrl+Shift+O

另存为                               : Ctrl+Shift+S

显示文件状态                         : Shift+F10

激活语法窗口                         : Alt+L

回到该行的开始                       : Home

回到选择的开始                       : Ctrl+Alt+[

到块的下面                           : Ctrl+Shift+]

到块的上面                           : Ctrl+Shift+[

书签                                 : Ctrl+M

到文件底部                           : Ctrl+End, Ctrl+(KeyPad) End

到窗口底部                           : (KeyPad) End (小键盘的END)

到一行的尾部                         : End

到选择部分的尾部                     : Ctrl+Alt+]

到下一个函数                         : 小键盘 +

上一个函数                           :   小键盘 –

后退                                 : Alt+,, Thumb 1 Click

后退到索引                         &nbs
p; : Alt+M

向前                                 : Alt+., Thumb 2 Click

转到行                               : F5, Ctrl+G

转到下一个修改                       : Alt+(KeyPad) +

转到下一个链接                       : Shift+F9, Ctrl+Shift+L

回到前一个修改                       : Alt+(KeyPad) –

跳到连接(就是语法串口列表的地方)     : Ctrl+L

跳到匹配                             : Alt+]

下一页                               : PgDn, (KeyPad) PgDn

上一页                               : PgUp, (KeyPad) PgUp

向上滚动半屏                         : Ctrl+PgDn, Ctrl+(KeyPad) PgDn, (KeyPad) *

向下滚动半屏                        : Ctrl+PgUp, Ctrl+(KeyPad) PgUp, (KeyPad) /

左滚                                 : Alt+Left

向上滚动一行                         : Alt+Down

向下滚动一行                         : Alt+Up

右滚                                 : Alt+Right

选择一块                             : Ctrl+-

选择当前位置的左边一个字符           : Shift+Left

选择当前位置右边一个字符             : Shift+Right

选择一行                             : Shift+F6

从当前行其开始向下选择               : Shift+Down

从当前行其开始向上选择               : Shift+Up

选择上页                             : Shift+PgDn, Shift+(KeyPad) PgDn

选择下页                             : Shift+PgUp, Shift+(KeyPad) PgUp

选择句子(直到遇到一个 . 为止)        : Shift+F7, Ctrl+.

从当前位置选择到文件结束             : Ctrl+Shift+End

从当前位置选择到行结束               : Shift+End

从当前位置选择到行的开始             : Shift+Home

从当前位置选择到文件顶部             : Ctrl+Shift+Home

选择一个单词                         : Shift+F5

选择左边单词                         : Ctrl+Shift+Left

选择右边单词                         : Ctrl+Shift+Right

到文件顶部                           : Ctrl+Home, Ctrl+(KeyPad) Home

到窗口顶部                           : (KeyPad) Home

到单词左边(也就是到一个单词的开始)   : Ctrl+Left

到单词右边(到该单词的结束)           : Ctrl+Right

排列语法窗口(有三种排列方式分别按1,2,3次)        : Alt+F7

移除文件                             : Alt+Shift+R

同步文件                             : Alt+Shift+S

增量搜索(当用Ctrl + F 搜索,然后按F12就会转到下一个匹配)      : F12

替换文件                             : Ctrl+Shift+H

向后搜索                             : F3

在多个文件中搜索                     : Ctrl+Shift+F

向前搜索                             : F4

搜索选择的(比如选择了一个单词,shift+F4将搜索下一个)    : Shift+F4

搜索                                 : Ctrl+F

浏览本地语法(弹出该文件语法列表窗口,如果你光标放到一个变量/函数等,那么列出本文件该变量/函数等的信息)    : F8

浏览工程语法                         : F7, Alt+G

跳到基本类型(即跳到原型)             : Alt+0

跳到定义出(也就是声明)       &
nbsp;       : Ctrl+=, Ctrl+L Click (select), Ctrl+Double L Click

检查引用                             : Ctrl+/

语法信息(弹出该语法的信息)           : Alt+/, Ctrl+R Click (select)

高亮当前单词                         : Shift+F8

语法窗口(隐藏/显示语法窗口)          : Alt+F8

关闭窗口                             : Alt+F6, Ctrl+F4

最后一个窗口                         : Ctrl+Tab, Ctrl+Shift+Tab 

几个较常用的快捷键
默认情况下,SI已经定义了很多非常实用的快捷键:
F5
指定行号,实现行跳转,在遇到编译错误的时候,能特别方便的找到出错行。
Shift+F8
高亮显示指定标识,快速浏览标识的使用情况。
Ctrl+鼠标点击标识
直接跳转至标识定义处。
Ctrl+F
本文件内查找。
F3
本文件查找结果的上一个。
F4
本文件查找结果的下一个。
F7
打开Browse Project Symbols窗口,快速浏览工程内标识定义。
Ctrl+M
创建或查找书签,方便下次找回此位置。

Source Insight技巧收集
1、背景色选择
    要改变背景色Options->preference->windows background->color设置背景色
2、解决字符等宽对齐问题。
    SIS默认字体是VERDANA,很漂亮。这网页上应该也是用的VERDANA字体。但由于美观的缘故,VERDANA字体是不等宽的。比如下面两行
    llllllllll
    MMMMMMMMMM
    同样10个字符,长度差多了.用VERDANA来看程序,有些本应该对齐的就歪了。解放方法是使用等宽的字体,但肯定比较丑。比较推荐的是用Courier New。
3、解决TAB键缩进问题
    Options-> Document Options里面的右下角Editing Options栏里,把Expand tabs勾起来,然后确定。OK,现在TAB键的缩进和四个空格的缩进在SIS里面看起来就对齐咯
4、SI中的自动对齐设置:
    在C程序里, 如果遇到行末没有分号的语句,如IF, WHILE, SWITCH等, 写到该行末按回车,则新行自动相对上一行缩进两列。
    Option->Document option下的Auto Indient中Auto Indient Type有三种类型 None,Simple,Smart。个人推荐选用Simple类型。
5、向项目中添加文件时,只添加特定类型的文件(文件类型过滤器)
    编辑汇编代码时,在SIS里建立PROJECT并ADD TREE的时候,根据默认设置并不会把该TREE里面所有汇编文件都包含进来
    只加了.inc和.asm后缀的,.s后缀的没有。而且用SIS打开.s的文件,一片黑白没有色彩,感觉回到DOS的EDIT时代了……
    解决方法是在Options->Document Options里面,点左上的Document Type下拉菜单,选择x86 Asm Source File,
    然后在右边的File filter里*.asm;*.inc;的后面加上*.s;接着CLOSE就可以了。
    上面问题解决了,但注意加入*.s后还需要重新ADD TREE一遍才能把这些汇编加到PROJECT里面。
6、添加文件类型
    用户可以定义自己的类型,Options->Document Options->add type,定义文件类型名以及文件名后缀。
    勾选include when adding to projects在添加目录下文件到工程是该类文件就会添加进SI的工程。
    如果需要将所有文件添加进SI的工程,可以定义一种文件类型*.*。
7、恢复ctrl+a的全选功能
    通过关键词save 找到save all,更改为ctrl+shift+a,通过关键词select找到select all,更改为ctrl +a
Source Insight常用的快捷键:
    Ctrl+= :Jump to definition
    Alt+/ :Look up reference
    F3 : search backward
    F4 : search forward
    F5: go to Line
    F7 :Look up symbols
    F8 :Look up local symbols
    F9 :Ident left
    F10 :Ident right
    Alt+, :Jump backword
    Alt+. : Jump forward
    Shift+F3 : search the word under cusor backward
    Shift+F4 : search the word under cusor forward
    F12 : incremental search
    Shift+Ctrl+f: search in project
    shift+F8 : hilight word
Source Insight的窗口操作:
    project window Ctrl+O打开
    symbol window Alt+F8打开和关闭
    Contex Window 自定义键打开和关闭
    Relation Window 自定义键打开 先锁定再刷新联系
在Source Insight中添加自定义功能的步骤如下:
1.Source Insight中,Options->Custom Commands…->Add…,New Command name 随便写,我的是”Edit with Vim”
2.Run中写入: “C:Program FilesVimvim63gvim.exe” –remote-silent +%l %f
意思是在当前已经打开的gvim窗口里面打开当前的文件,并且跳转到指定行
%l为当前的行号,%f为文件名
使用 –remote-silent 的作用是,如果已经打开了对应文件,就不会打开第二次,而是在已经打开的文件里跳转到对应行
3.还是同一个对话框里面,选择Keys->Assign New Key…->按F12,如果你已经将F12设置给其他命令,选择其他的按键就行了
下面是一些常用自定义功能:( CUSTOM COMMANDS )
打开资源管理器并选中当前文件
ShellExecute open explorer /e,/select,%f
查看log
“C:Program FilesTortoiseSVNinTortoiseProc.exe” /command:log /path:%f /notempfile /closeonend
diff
“C:Program FilesTortoiseSVNinTortoiseProc.exe” /command:diff /path:%f /notempfile /closeonend
取得锁定(check out)
“C:Program FilesTortoiseSVNinTortoiseProc.exe” /command:lock /path:%f /notempfile /closeonend
提交(check in)
“C:Program FilesTortoiseSVNinTortoiseProc.exe” /command:commit /path:%f /notempfile /closeonend
更新(update)
“C:Program FilesTortoiseSVNinTortoiseProc.exe” /command:update /path:%f /notempfile /closeonend
更新整个目录(update all)
“C:Program FilesTortoiseSVNinTortoiseProc.exe” /command:update /path:*.* /notempfile /closeonend
取消锁定(undo check out)
“C:Program FilesTortoiseSVNinTortoiseProc.exe” /command:revert /path:%f /notempfile /closeonend
在ultriEdit中编辑
“C:Program FilesUltraEdit-32/uedit32” %f
在vim中编辑并定位到当前行
“C:Program FilesVimvim63gvim.exe” –remote-silent +%l %f
汇总其他小技巧:
让{ 和 } 不缩进:
Options->Document Options->Auto Indent->Indent Open Brace/Indent Close Brace
hao space: SourceInsight 小技巧
1、按住”ctrl”, 再用鼠标指向某个变量,点击一下,就能进入这个变量的定义。
2、今天把一个用sourceinsight排版整齐的C文件,偶然用VC打开一看,全乱了。研究了半天,发现SI对每个字符的宽度不太一致。
    请教同事发现选上”view –> draft view”, 就可以让每个字符的宽度一致了。快捷键是 “Alt + F12”
3、”shift+F8″ 标亮所有文本中光标所在位置的单词
4、跳到某一行:”ctrl + g”
Source Insight是阅读和编写代码的好东东,基本上也算
得上是经典之作了,虽然还有一点点小bug,不过对于我们这些C程序员来说可是一旦拥有别无所求。下列小技巧是在工作中同事整理总结的,对提高工作效率多少有点帮助,其中有些是对应于SVN的,没有使用SVN做版本管理的人就不要白费力气了。
ShellExecute open explorer /e,/select,%f
        /*作用是在资源管理器中打开当前编辑文件并选中*/
        /*可以设置快捷键如ctrl+e,这样能很方便的在资源管理器打开对应的文件,并进行tortoiseSVN的相关操作*/
X:Progra~1TortoiseSVNinTortoiseProc.exe /command:log /path:% /notempfile /closeonend
        /*使用前注意更改对应的bin安装路径*/
        /*作用是直接查看当前文件的svn log*/
        /*可以设置快捷键如ctrl+l*/
X:Progra~1TortoiseSVNinTortoiseProc.exe /command:diff /path:% /notempfile /closeonend
        /*使用前注意更改对应的bin安装路径*/
        /*作用是直接查看当前文件和基准版本的比较*/
        /*可以设置快捷键如ctrl+d*/
                                       Source Insight中的文件过滤器
遇到在新建工程的时候,需要加入一些除了.c .h 等之外的文件,比如.s,.scf ,Makefile和ReleaseNotes等文件,而每次新建工程的时候,即使取消了shown only known document types,和在点击Add All之后选择了Recusively add lower sub-directories ,也还是不能正常识别这类文件,也就不能加入进工程,只能我们自己手动双击添加到工程中,如果文件少还无所谓,但是包含了很多子文件夹的大工程,这样实在不可行。
百度了下,终于发现解决办法了:
打开Source Insight,在新建工程之前,进入
Options -> Document Options… Alt-T    -> 点击Document Type的下拉框,然后选择Make File,在右边的File Filter中,在原先的*.mak后面加上一个分号,即多个不同过滤规则以分号间隔开,再加上*makefile,变成 *.mak;*makefile,并且选中Include when adding to projects,这样,以后再新建工程的时候,就可以识别makefile或Makefile了(好像此处Source Insight并不区分大小写)。
类似的原理,给其他你想要加入的不同的类型的文件,分别加入到原先的一些文件类型后面,注意要用分号隔开,或者直接新建一个文件类型,然后写上对应的顾虑规则,比如
点击 Add Type,填入新文件类型的名字Scatter File,File Filter中写上*.scf,注意再选中下面的Include when adding to projects,这样就建立了一个新的文件类型, 以后新建工程加入文件时候,系统就能够识别后缀是scf的文件了。
当然感兴趣的,还可以对你新建立的文件类型进行一些格式化设置。包括Parsing,Tab等等设置。

© 2017 Edison's NoteSsss

Theme by Anders NorenUp ↑