Tag: git

CUNY代码

该程序 去年春季学期(2016年春季),我加入了名为#CUNYCodes的投资组合开发计划。 该计划旨在帮助对从头开始开发应用程序感兴趣的技术专业人士或个人,使他们能够学习,磨练和展示自己的技能。 最重要的是,它允许刚毕业的毕业生或即将成为研究生的毕业生在10个星期的时间内拥有更多的实践经验。 我加入#CUNYCodes主要是为了培养我的社交技能,此外,我还学习了iOS开发! 因此,我希望能够将我刚刚学到的东西应用于一个项目,而不是一个单独的项目! 我知道我的弱点是能够清晰地交流我仍在努力的思想过程; 因此,通过加入,我可以在这方面进行工作。 与您自己创建某物与与他人创建某物有所不同:交流。 事情可能变得如此复杂! 特别是当一群人来自不同的背景,不同的编程经验以及最重要的是不同的思维过程时! 现在,回到#CUNYCodes! 在#CUNYCodes,有具有软件工程师背景的导师; 因此,基本上总会有人能够指导您进行您正在从事的项目。 此外,它不仅是一个构建投资组合的程序,而且还将提供现实世界中使用的知识和工具。 我记得当我加入时,并不是每个人都知道Scrum是什么以及如何使用版本控制系统,甚至什么是版本控制。 此外,每周都会有来自不同技术背景的演讲者来演讲,讲述他们的经验以及从成为新手到成为现在的人的转变。 我觉得这对于刚毕业的毕业生来说是一个很好的见解,并激发我们改善自己。 我的经验和隐藏的宝石 老实说,我是最后加入#CUNYCodes的人之一。 我被安排在一个团队中,该团队正在开发名为Hidden Gems的iOS应用。 该应用程序可满足旅行者或对根据其当前位置查找本地场所和事件感兴趣的任何人。 我加入的团队共有5人。 我们每个人都有不同的技能和各种编程经验。 另外,已经有一些布局组件组合在一起。 但是,尚未设置后端。 由于我们大多数人都对学习如何设置AWS服务器和安装LAMP堆栈感兴趣,因此我们所有人都在做同一件事-学习如何安装AWS和LAMP。 现在,我们所有人都知道如何设置后端。 从那里,我们最终将任务分配给谁在前端,谁将在后端工作。 我们决定在前端使用Swift,而我们做到了。 当我第一次加入时,我提到过要在后端工作。 但是,我认为可以肯定地说我是满座的。 我最初开始为iOS应用程序创建REST api。 但是最后,我在前端工作,为Hidden Gems创建了各种功能,其中一些使用了Foursquare API。 我们如何管理项目是使用Scrum每周进行冲刺。 我们使用Pivotal Tracker分发了我们的任务和目标。 问题 是的,我为此创建了一个部分! 并没有任何真正的问题-就在我开发Swift 1.2时,而团队中的大多数人还是在Swift 2上。因此,存在着巨大的冲突,但是我们还是设法使它工作了。 我希望Apple的语言不会依赖于操作系统。 我没有升级到Swift 2,因为我不想升级操作系统。 大声笑。 无论如何,下一个大问题是我的一些队友似乎从未使用过git或任何版本控制系统,或者不知道如何使用它。 到底 令人惊讶! 我们将我们的应用程序整合在一起,并且经过10周的努力(对于我来说可能是6个)可以进行演示。 感谢隐藏的宝石团队以及我们的导师John […]

Kin-与.pbxproj合并的头痛药

这是“ 全部与工具有关 ”周期 的第一篇文章 。 所以, 很久以前…我已经找到了 合并冲突经常给我们带来很多乐趣。 通常,您的SourceTree报告如下所示: 在这种快乐的情况下,您可以合并pbxproj。 在我的整个职业生涯中使用不同的合并工具,最终得到了http://www.barebones.com/products/TextWrangler/-友好而性能卓越的文本编辑器。 但是,主要问题是验证。 Kin可以理想地满足对手动合并结果进行验证的要求。 我的合并结果最近: 到目前为止,我做了什么? 根据我的直觉,刚刚解决了四个冲突。 重新开始合并可能是浪费时间的选择,但是我确实有亲戚。 su-macbook-2e23:some_dir petr $ cd path_to_project / su-macbook-2e23:path_to_project petr $ kin ANTLR运行时和生成的代码版本不一致:4.6!= 4.5.2 ANTLR运行时和生成的代码版本不一致:4.6!= 4.5.2 错误:第4078:207行的输入’wrapsLines’不匹配,期望为’}’ 错误:行13742:4输入’LastTestingUpgradeCheck’不匹配,期望’LastUpgradeCheck’ 错误:第13743:4行的输入’LastUpgradeCheck’不匹配,期望为’}’ 太完美了吧? 我可以在4078和13743行上手动找到错误吗? 我相信不会 使用pip-Python软件包管理器,安装很简单。 用法很简单: 导航到项目目录 输入“ kin” 解决冲突,建立成功的时间有一些🍻

Pod自动更新脚本

为什么要开发此脚本 当我们在iOS领域中开发一些Pod组件时,我们必须在终端上键入那么多git和pod命令。 如果Pod项目很大,并且运行pod lib lint和pod repo push将花费大量时间,则还必须更新.podspec文件和push标签中的pod版本。 这是一个非常无聊且机械化的过程。 该脚本将使您摆脱此过程。 该脚本包含哪些操作 1.在.podspec文件中制作小版本加一个,例如,将s.version = “0.1.1”更改为s.version = “0.1.2”或将s.version = “1.2.15”更改为s.version = “1.2.16”或s.version = “10.22.0.15”到s.version = “10.22.0.16” ,无论您的版本是什么样,它都会更新版本号的最后一位。 2.运行pod lib lint 。 如果您的Pod项目依赖于其他私有资源,则可以在脚本顶部对其进行配置。 在Github和GitLab上运行良好。 至于BitBucket,您可以尝试一下。 如果您发现它不起作用,请让我知道。 3.运行一系列git操作,例如git add,git commit,git push,git tag,git push-标签。 4.运行pod repo push 使用情况 1.将auto.py添加到您的pod项目中,并确保它与.podspec文件位于同一目录中。 如果您认为有必要,可以将此python脚本文件添加到.gitignore 。 2.打开auto.py文件,并在顶部对其进行配置。 像这样的截图 您可以在sources数组中添加从属源,但是不需要添加https://github.com/CocoaPods/Specs.git 。 3.打开终端,导航到poedspec和此脚本文件所在的目录。 4.在终端上运行python auto.py命令。 它会自动更新您的Pod项目版本并将其自动推送到原始位置。 如果失败,则必须检查并确保您的podspec配置正确。 下载 […]

使用SwiftLint作为Git预推钩

SwiftLint是由Realm的优秀人员开发的开源工具,可帮助维护Swift代码标准并强制用户适应最佳的编码规则和实践。 使用SwiftLint,您可以编写自己的代码规则并强制团队遵循它们。 SwiftLint不仅可用于CocoaPods,还可以使用命令行工具AppCode,Atom甚至Fastlane进行应用。 它甚至支持多个swift版本,并直接挂钩到SourceKit,因此随着swift的发展,它将继续有效。 就像其他版本控制系统一样,Git还提供了一种为过程中的某些特定事件触发一些自定义脚本的方法。 这些事件主要分为两个池,客户端和服务器端。 客户端挂钩由与提交,推送和合并相关的动作触发,这些动作可以进一步处理事前和之后的事件,而服务器挂钩与与网络相关的事件(如接收提交等)更相关-服务器端可以利用与提交,合并和推送相关的事件钩。 挂钩确实非常强大,因为我们知道开发人员在将有价值的代码推送到服务器之前必须确保很多事情,因此挂钩可以帮助您定义一些脚本,这些脚本可以防止您推送错误的未格式化代码甚至运行测试用例。 挂钩可以通过多种方式安装: 进行符号链接时,可以使用存储库本身来推动它们。 它们可以放在仓库的git文件夹中。 可以将它们安装为在所有存储库上全局工作。 (2.9以上版本) 我们将在本文中介绍第三种方法。 1.更新Git(如果尚未更新) Xcode确实在您的机器上安装了Git,但是如果您仍然想检查和更新git版本,也可以按照以下步骤进行: 打开终端并检查您的git版本(已更新) $ git –versiongit版本2.15.1(Apple Git-101) 备份Apple Git $ sudo mv / usr / bin / git / usr / bin / git-apple 如果尚未安装Homebrew $ / usr / bin / ruby​​ -e“ $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)” 更新酿造 $ brew更新&& brew升级 最后安装Git并进行符号链接,并确保检查其版本 […]

在使用git flow和持续集成的同时确保唯一的内部版本号

在iOS世界中,您希望保持内部版本号唯一(CFBundleVersion)。 将应用程序提交到appStore时,Apple将检查您之前是否尚未提交具有相同编号的版本。 内部版本号也必须大于您以前的内部版本号。 否则,苹果将拒绝它。 那么,当使用git分支模型时,如何保持该数字不变? 您显然可以手动跟踪内部版本号并自己增加,但是我觉得这很麻烦。 您可以编写一个脚本,该脚本每次在xCode中构建时都会破坏您的内部版本号,但是根据我的经验,当您有多个开发人员在各自的分支上构建不同的发行版时,这些脚本就开始崩溃。 因此,今天我将带您完成一个将内部版本号保存在中央位置的过程,以便在创建新内部版本时始终可以确保内部版本号是唯一的。 首先,您需要选择哪个分支将保留事实。 在这个例子中,我将使用develop。 创建新版本时,第一个任务是检查最新版本号并增加它。 # the truth for the current bundle version is on develop, switch branch and get the number # but first save the branch we are currently on to be able to come back BUILD_GIT_BRANCH=$(git rev-parse –abbrev-ref HEAD) # switch branch git checkout develop # […]

Github集成-为什么SashiDo使用GitHub

我们看到您喜欢在SashiDo中设置Cloud Code 多么容易和直接 。 但是您是否知道与GitHub的集成实际上有多酷和有用? 作为开发人员,我们每天都在使用GitHub,但您可能还没有想到可以充分利用SashiDo和GitHub共同提供的各种可能性。 首先,让我解释一下SashiDo为什么选择将其服务与GitHub集成-我们相信使用MBaaS服务非常有用,但有时您需要对代码进行更多控制-这就是GitHub来提供帮助的地方🙂最好的基于Web的Git存储库托管服务,可帮助您更好地管理代码。 因此,让我们从有用的部分开始。 完成云代码的设置后,您可以访问私有存储库。 您会看到两个文件夹:“ cloud”和“ public”。 第一个文件夹保留了根文件,我们将其导入到SashiDo的云中。 如果要运行它,请不要更改名称。 另外两个文件保留了简单云代码和高级云代码的示例。 如果要在SashiDo上托管应用程序网站,则可以在“公共”文件夹中添加html,css,js文件或图像。 另外,这是放置前端文件,javascript库等的地方。 这些是SashiDo提供的主要服务的基础。 如何掌握GitHub提供的强大功能取决于您,以掌握您的代码。 如果您是Git概念的新手,请放心,使用它非常容易,尤其是在基本级别上。 但是,我们的建议是使用友好的GitHub桌面。 利用分支机构 有时,随着工作的进行,您会提出关于如何开发某些东西的不同想法,而您并不确定结果应该是什么。 事情很快就会变得一团糟,您可以轻松地了解项目的不同版本。 答案就是将SashiDo与GitHub集成。 Git概念中最酷的事情之一是,它使您有机会创建可以使用的多个分支-每个分支都是一个单独的版本。 我们的建议是至少在两个分支上工作(正式版为“ master”,在进行中为“ development”)。 如果您正在与其他人一起从事同一项目,这也可以解决您的问题-只需创建自己的分支并可以随意进行试验和提交更改,就可以放心,除非您准备好对分支进行审查,否则请不要合并。与您合作的人。 完成实验和测试后,每个分支都可以与“主”合并。 关于存储库,请保存您的SashiDo的项目-请注意“ master”分支。 当您将更改推送到“ master”分支时,SashiDo会自动将代码部署到您的应用程序正在使用的服务器上。 但是,您不需要任何其他工具即可在SashiDo上管理和部署您的云代码🙂请记住,每次推送到master分支都会触发部署。 因此,如果不确定是否要更改“主”,则只需将其推送到其他分支即可。 一段时间后,当您准备好并确定自己的代码时,只需将其与“ master”分支合并即可。 添加合作者 SashiDo与GitHub集成中最酷的事情之一就是您可以邀请协作者(您的同事或自由职业者),以便您可以安全地一起构建项目。 您的回购是私人的,因此只有您可以选择邀请对象。 您可以决定是否在同一分支上工作。 每次您或您的协作者在代码中提交更改时,您都可以决定是将其放入代码中还是忽略它们。 Git很聪明,并且万一代码版本中有可疑的东西,合并不会发生,并且系统会确切地向您显示错误所在,以便您采取措施使其正常运行。 这样,您可以始终跟踪是否有冲突更改,因此最终版本中不会出现任何混乱。 不要抛出混乱的代码-将其隐藏起来! 通常,当您在处理项目的一部分时,事情处于混乱状态,您想要切换分支以进行其他工作,而您还没有准备好提交。 推动半完成工作不是很好,但是您也不想失去已经完成的工作。 有一个非常有用的命令-git stash可以解决问题。 当您要再次继续处理代码时,它将保存您的代码。 只是一个很酷的提示-当您从其他计算机存放时要小心-重新应用工作可能会遇到问题。 如果应用程序尝试更改自修改以来的文件,则会收到合并冲突,并且必须找到一种解决方法。 有一个更简单的选项可以再次测试隐藏的更改-您可以运行git […]

管理跨多个分支和计划的应用程序版本的核心数据模型迁移

优点:简单且非常适合具有简单数据模型的小型项目,或者具有很少因发布而变化的数据模型。 对于非常小的项目团队(也可以由一个人来管理所有事情)来说,它也很棒。 缺点:难以管理大型团队或数据模型经常更改或团队规模较大的复杂项目。 如果需要数据模型更新作为热修复程序或在项目的更高分支上,则该更新将必须“波纹化”所有下游分支。 此外,在功能分支上进行更新然后合并回主分支可能会与活动开发中的其他功能冲突。 在整个过程中合并更新可能需要大量的手动工作,并将更新手动合并到许多Core Data模型文件中。 这项工作可能非常令人困惑,难以遵循,并且犯下一个很小的,未引起注意的错误的风险很高,该错误将来会使生产发布应用程序中毒。 选项2)每个发行版本都有其自己的Core Data模型版本文件,因此Beta,Develop和Alpha都具有不同的模型版本说明符。 每个功能分支都共享其父分支的模型,并且不添加模型版本文件。 功能分支仅修改现有模型版本文件。 优点:具有比选项1更大的可伸缩性。一次仅需一次将更改迁移到上游,而在选项1中,可能需要通过几个模型更新文件来使更改产生变化。 数据模型未版本化,可以直接链接到应用程序的特定版本。 更可预测和可理解。 确定数据模型问题以及从错误中恢复要容易得多。 缺点:必须与客户和其他团队成员进行沟通(禁止上空),因为每次更新数据模型时,都必须删除并重新安装开发应用程序以合并新的数据模型。 我在网上找到的所有资源都只提到了如何将核心数据模型从一个版本迁移到另一个版本,这与上面的选项1最相似,但是在过去的几个月中,随着项目的发展,选项1的弊端真正开始了付出代价 从那时起,我发现遵循选项2带来的麻烦最少,并使Core Data模型的git合并非常直接且相对简单。

与`Komondor` it的钩针

git-hooks 他のバージョンコントロールロスシと同じように,Gitにも特定のアクションが発生した时にスクリプトを叩く方法があります。 。 上记の通り,git操作をトリガーにして任意のスクリプトを実行する机能です。プロジェクト内。 便利な反面,git-hooks自体をgit管理できないので,チームで共有・保守するとなると考える必要があります。 (オレオレスクリプトを用意するなどの策はありますが..) git-hooksの共有・拡张をサポートするのがをgit-hooksマネージャーです。overcommitやhuskyあたりが有名どころです。 大队 完全可配置和可扩展的Git挂钩管理器–旅/过量使用 github.com 打字/沙哑 🐶吊钩变得容易。 通过在GitHub上创建一个帐户来为typicode / husky开发做出贡献。 github.com huskyを例に见てみると, $ npm installなどを起点にhooksを自动设置してくれます。 奥塔/科蒙多 Swift项目的Git Hooks🐩。 通过在GitHub上创建一个帐户为orta / Komondor开发做出贡献。 github.com Komondorは危险の作者としても有名なortaさんが作成したSwift制のgit-hooksマネージャーです(dander / swift内でも利用されている)。 mondKomondor(コモンドール)はハンガリー原产の护畜用犬种らしいです🐩🇭🇺 Swift Package Manager(SPM)を起点を挂钩を设置し,任意のスクリプトをgit操作に纽づけます。 安装 READMEにinstall手顺等载っていますが,改めて解说していきます。ここでは,SPMのプロジェクトを例に手顺を示します。 // swift-tools-version:4.2import PackageDescriptionlet package = Package( 名称:“ XXX”, 产品:[…], 依赖项:[ .package(网址:“ https://github.com/orta/Komondor.git”,来自“ 1.0.1”), .package(网址:“ https://github.com/nicklockwood/SwiftFormat.git”,来自“ 0.37.1”) ], 目标:[…] } […]

约定

一旦有多个开发人员从事一个项目,您就会遇到麻烦。 沟通是开发人员工作的100%。 我们使用自己的语言(在会议,一对一,聊天等),肢体语言甚至我们的代码进行交流。 有趣的是,我们传达的是意图,而不是言语本身。 事实证明,接收方可以决定消息的含义,而不是发送方。 因此,我们必须尽力确保接收端能够理解我们试图传输的意图。 改善通信的一种选择是通过约定。 它们以许多不同的方式提供帮助,但最常见的是在相同情况下具有相同含义。 开始于其他项目? 如果结构具有约定,则可以更快地找到访问方式。 使用相同的术语传达对功能的更改会有所帮助。 在本文中,我们将介绍几种类型的约定,这些约定将成为您日常生活的一部分。 代码约定 每个人都听说过代码约定。 它们帮助开发人员找到进入项目的方式或更快地了解代码。 如果所有内容都以相同的样式编写,则突然之间与您之前阅读的代码或您昨天编写的代码没有太大不同。 有很多不同的代码约定和意见,所以我不建议使用特定的约定和意见。 只需选择一个并坚持下去即可。 确保团队中的每个人都遵守他们。 最好的方法是使用自动格式化程序。 关于Swift,有swiftformat。 遗憾的是,它还没有配置文件,必须通过命令行参数启动。 但是它工作得很好。 强制执行代码约定的另一个工具是swiftlint。 它只有几个自动格式选项,但是它提供了其他有趣的配置来强制一种代码风格。 提交约定 确保不丢失任何代码,并确保我们使用版本控制系统的团队合作。 这些工具试图通过锁定文件以进行更改或显示合并冲突来限制错误,以防多个开发人员更改同一文件。 提交我们的代码后,我们给其他开发人员留下了一条信息,供他们快速了解我们所做的事情,而他不必阅读更改就是代码。 提交消息比大多数开发人员认为的重要。 如果您搜索了几个小时的更改,您将欣赏到结构良好且有意义的提交消息。 由于提交消息又有不计其数的不同约定,所以我不建议您这样做。 但是我倾向于使用这个: : 这似乎包含一些开销,并且我的同事鄙视诸如更改类型之类的信息。 但是,让我们仔细看看我的建议。 票证:这是此更改影响的票证名称。 它不一定是此票证的唯一更改,但是如果我们要查找的是确切的要求,则需要该票证。 类型:我想知道此更改是由于功能,错误修正,某种必要的工作还是任何其他原因引起的。 您可以在“角度提交消息格式”中找到一些有关类型的建议。 不少人可能会对这种类型的误导性感到担忧。 如果开发人员没有分开提交,情况就是这样。 在我看来,这甚至可以帮助他学会这样做。 简介:这包含更改的意图,而不是开发人员所做的精确更改。 因此,与其编写“添加一些文件并将其更改为执行此操作或那样操作”,不如编写“此添加功能1”或“这将在注销后解决崩溃问题”。 使用这种消息,将改善您的意图交流。 结论 如您所见,有很多方法可以通过约定改善我们的沟通。 明确的意图有很长的路要走。 对于我们的项目,默认情况下,我们将遵循swiftlint建议的代码约定。 此外,将使用上述提交消息格式。 下一个:Git Hooks 上一篇:开发者机器

CocoaPods插件开发入门

2013年发布的CocoaPods插件成为功能强大且优雅的工具,可通过有用的调整和命令来扩展CocoaPods。 我们已经构建了一个简单的CocoaPods插件,该插件可在团队成员之间同步git hook,并希望分享我们的开发经验,以便您可以根据自己的需要制作一个。 CocoaPods插件是Ruby gem,您需要安装Ruby和CocoaPods才能开始开发插件。 要开始开发新插件,您还需要通过运行以下命令安装cocoapods-plugins gem: $ gem install cocoapods-插件 为了演示和调试,让我们使用git仓库创建一个新的Xcode项目: Xcode>文件>新建>项目>单视图应用程序,不要忘了选中“ 创建git存储库”或通过运行以下命令手动创建它: $ git init 现在我们可以将Pod添加到我们的项目中: $ pod init 或使用我们制作的演示项目来开发cocoapods-githooks插件。 现在是时候通过运行来创建我们的新插件了 $ pod插件创建了githooks 在本教程中,我们使用与插件相同的名称。 除非您将无法发布具有相同名称的插件,否则不会有任何区别。 此命令为CocoaPods插件创建样板。 .gemspec文件是我们插件的主要配置文件。 所有spec字段都是自描述的(您可以在此处查看我们插件的gemspec),但是我想指出一件事: 默认情况下, spec.files引用git存储库索引和工作树中的所有文件。 但是,如果您尝试在git中没有文件的情况下构建gem,则将得到一个空的.gem文件,没有警告或错误。 我的建议是将spec.files的值设置为Dir [‘lib / ** / *’] ,它将引用lib目录中的所有文件。 将spec.files行替换为 spec.files = Dir [‘lib / ** / *’] Gemfile包含执行关联所需的所有gem依赖项 Ruby代码。 有关更多信息,请查看Bundler文档。 Rakefile包含测试规范的参考, spec文件夹包含测试规范。 有关Rake的更多信息,请访问Rake官方仓库。 […]