1、sourceTree的简介
sourceTree是一个拥有可视化界面,容易上手的Git客户端,也是一个轻量级的版本控制系统工具。可支持创建,提交,clone,push,pull,merge等操作。
2、sourceTree的基本使用
(1)拥有一个git账户,可供建立自己的远程仓库。
(2)下载sourceTree客户端,利用https网址对远程仓库进行clone。
(3)在sourceTree中点击“在finder中显示”,上传自己的项目到远程仓库。
3、对sourceTree使用需要注意的一些事项
(1)在提交的时候需要对提交的内容进行一个描述解释,以便在查看项目时知道自己对项目做出了那些修改。
(2)克隆(clone):从远程仓库url加载一个与远程仓库一样的本地仓库。
提交 (commit):将暂存文件上传到本地仓库(我们在Finder中对本地仓库做修改后一般都得先提交一次,在推送)
检出(checkout):切换不同分支
添加(add):添加文件到缓存区
移除(remove):移除文件至缓存区
暂存(git stash):保存工作现场
拉取(pull):从远程仓库获取信息并同步至本地仓库,并且自动执行合并(merge)操作,即pull = fetch + merge
推送(push):将本地仓库同步至远程仓库,一般推送(push)前先拉取(pull)一次,确保一致
分支(branch):创建/修改/删除分支
标签(tag):给项目添增标签
工作流(Git Flow):团队工作时,每个人创建属于自己的分支(branch),确定无误后提交到master分支
终端(terminal):可以输入git命令行
(3)最好每天一提交代码,不要等整个需求开发完成之后再进行提交和push,这样很容易产生奇葩冲突。
冲突时
可视化模式
<<<<<<< HEAD
...content on current branch...
=======
...content on incoming branch...
>>>>>>> change (or the name of whatever your incoming branch is)
从 <<<<<<< HEAD 到 ======= 那行之间的就是当前分支上的内容(自己修改的)。
从 ======= 到 >>>>>>>
你的传入分支名
之间的就是传入分支上的内容(git上的东西)
SourceTree 读取文件的时候,可以跳过红色标注的行,因为它们已经被删了。绿色标注的那些是新添加的
还可以启动外部合并工具来解决冲突。它们通常会让你选择某一个版本,或者两者都选。目前 SourceTree 好像并不支持这个功能
4、sourceTree中遇到的各种冲突以及解决方案
(1)你和别人同时修改了同一个类文件
解决方法:上传代码时,会提示你产生冲突的符号。第一种情况:产生的冲突不会影响需求,这时可以直接删除冲突或者直接用自己的版本解决冲突;第二种情况:产生的冲突对需求有影响,这时你需要和你的小伙伴商量,删除无用的代码,然后上传代码。
分析:左尖括号和等号之间的内容是本地仓库的,等号和右尖括号之间的内容是远程仓库的。这是两个地方的内容明显不一样,这时我们就需要统一一个版本,然后在上传到远程服务器。
(2)你和别人同时修改了同一个文件夹
解决方法:在Finder中找到工程目录,右击显示包内容。
找到project.pbxproj文件,双击打开。
搜索存在的冲突,并且删掉。搜索内容为“>>>>>”,“<<<<<”,“======”。
(3)在同一个文件夹下创建类文件引发的冲突
<<<<<< ======之间的内容表示自己本地仓库的内容,>>>>>> ======= 之间的内容表示远程仓库的内容
如果只删除冲突符号,即表示本地创建的类文件和远程已经创建好的类文件同时保留;如果删除<<<<<< ======之间的内容,即表示去掉本地仓库创建的类文件,保留远程创建好的类文件;如果删除>>>>>> =======之间的内容,即表示去掉远程创建好的类文件,保留本地创建的类文件;如果>>>>>> ======= 和 <<<<<< ======之间都有删除,即保留自己需要的文件,去掉多余创建的类文件
分析:这是针对同一个文件夹下,如果两个人同时在该文件夹下创建文件引发的冲突。这时你会看到远程服务器中已经创建一个SACell的类文件,本地仓库创建的是Person类文件。
(4)
删除文件的时候会出现的冲突是:类似于创建的时候, 只是删除的时候 <<<<<===之间是没有东西的 而=====>>>>>之间是你的类文件的所有东西的, 要删除指定文件 就直接删除相对应的那段描述. 如果删除的时候没删除===》》》》之间你要删除的那个类的相关文件 ,是运行不起来的 .<回滚到想要的指定版本>
如果只是删除冲突符号,cow文件不会彻底删除,但是可以正常运行。
分析:先对A文件夹下的a文件移动到B文件夹下,提交至远程之后,再由另外一个小伙伴对a文件进行删除。在处理这类冲突的时候,我们从配置文件可以看出:本地已经没有a文件了,但是在远程服务器中却依然存在。这时,如果你只是删除冲突符号,就会产生a文件不能彻底删除的情况。想要彻底删除就需要对 ====和<<<<<之间的内容都删除,这样就会得到想要的结果。
(5)在一个已有文件夹中创建一个类文件,提交至远程服务器。然后另外一个人直接删除该文件夹,从而引发的冲突
分析:远程会存在删除的这个文件夹,但是本地是不存在的。这时就需要把配置文件中的创建的文件夹也删掉。
(6) 两个人先后添加一个同名的文件夹,出现了冲突,找到对应的<<<<<<======>>>>>>>冲突处。根据上面,找到自己创建的类或者文件,找对应文件的描述,删除
分析:和文件冲突类似,保留想要的文件夹即可。
(7) 先对一个文件进行删除,提交到远程之后。另外一个人对该文件的路径进行了变更,此时也会产生冲突。
分析:远程中已经没有该文件,如果想要继续持有该文件,就需要先删掉引起冲突的所有文件。再进行本地配置,这样就可以了。
(8)对拉取下来且产生冲突的内容进行重置,本地会将其他人所做的提交舍弃,且无法找回,若将重置结果推送至远端,则会在远端将其他人所做的提交重置;
(9) 别人创建一个文件夹并在该文件夹中添加类的时候,在你还没有拉取的时候同样创建了文件夹和类文件的时候,会出现冲突,并且将==<<>>这些都删除后,pbxproj文件仍会有错,项目无法打开。
10、A在Empty文件夹下创建X文件,提交后,B也在Empty文件夹下创建相同名字的X文件,拉取产生的冲突。这种冲突要充分考虑到两个文件如何保留和两个文件中的内容怎么保留的问题。建议是自己可以把本地实体目录下的这个X文件复制出来在电脑上,然后再.pbxproj文件里的冲突区域,把PBXbuliderfile 区域、Empty group 和PBXFileRefrence中本地的X文件标识描述删掉。然后再根据内容来把自己本地X文件内容添加到拉去到的远端的X文件,保证完整性
4、针对配置文件(*.pbxproj)的理解。
Xcode工程文件采用的是老式风格的plist文件,它使用花括号来组织结构化的数据。在针对每一个文件都会有一个十六进制书写唯一编码。
在工程中主要包含一下元素类型:
根节点
属性 | 类型 | 值 | 注释 |
archiveVersion | 数字 | 1 | 默认值 |
class | 列表 | 空 | |
objectVersion | 数字 | ||
objects | 字典 | 对应于每一个唯一标示的一个值 | 唯一标示就是唯一标示码 |
rootObject | 引用 | 一个元素的引用 |
PBXBuildPhase :一个抽象的构建阶段,最终需有对应到具体化的构建对象
PBXAppleScriptBuildPhase
PBXCopyFilesBuildPhase:构建阶段复制文件信息
PBXFrameworksBuildPhase:用于framework构建的链接阶段,它是由唯一编码,isa,buildActionmask,files,runOnlyForDeploymentPostprocessing组成
PBXHeadersBuildPhase
PBXResourcesBuildPhase:构件阶段需要复制的资源文件
PBXShellScriptBuildPhase:用于构件复制资源的shell脚本
PBXSourcesBuildPhase:构建阶段中编译源文件
PBXContainerItemProxy : 目标对象的容器,它是由唯一标示码,isa,containerPortal,proxyType,remoteGlobalIDString,remoteInfo键值对组成
PBXFileElement
:抽象类型,对应具体化的文件和group组元素
PBXFileReference:用于跟踪项目引用的每一个外部文件,包含所有的.h和.m文件。
PBXFileReference:用于跟踪项目引用的每一个外部文件,包含所有的.h和.m文件。
PBXGroup:用于工程的每一个文件夹
PBXVariantGroup:对不同地区资源文件的引用管理
PBXTarget
PBXAggregateTarget:不同构建目标的集合
PBXLegacyTarget
PBXNativeTarget:对应声称可执行的二进制程序或库文件的本地构建目标对象
PBXProject :工程,对应构建可执行的二进制目标程序或库
PBXTargetDependency :目标的外部依赖管理
XCBuildConfiguration :构建配置元素
XCConfigurationList :构建配置相关元素的列表