PodSearch

Under the Radar

Under the Radar 22: Version Control

 

00:00:00 ◼   ► welcome to under the radar a show about

00:00:01 ◼   ► independent iOS app development I'm

00:00:03 ◼   ► Marco Arment and I'm David Smith under

00:00:05 ◼   ► the radar is never longer than 30

00:00:07 ◼   ► minutes so let's get started so today we

00:00:09 ◼   ► wanted to talk about version control and

00:00:12 ◼   ► this is this is a great collaboration

00:00:15 ◼   ► tool and therefore the two of us who

00:00:19 ◼   ► work by ourselves are going to tell you

00:00:22 ◼   ► drawing on our vast experience about

00:00:25 ◼   ► using version control with all the

00:00:27 ◼   ► clever things you hear about with like

00:00:29 ◼   ► git and you can have merging and

00:00:31 ◼   ► branching strategies and rebasing and

00:00:33 ◼   ► all the things that thankfully I never

00:00:35 ◼   ► have to deal with because I tend to just

00:00:37 ◼   ► work by myself and I'm collaborating

00:00:39 ◼   ► with myself and so thankfully things

00:00:41 ◼   ► typically and like merge conflicts not a

00:00:44 ◼   ► big problem for me it turns out Hudson's

00:00:46 ◼   ► but still I think version control is a

00:00:48 ◼   ► very important part of like the

00:00:50 ◼   ► discipline of software engineering and

00:00:52 ◼   ► so it seemed like it was something that

00:00:54 ◼   ► was we worth discussing

00:00:55 ◼   ► even if obviously you know jokingly some

00:00:57 ◼   ► of some of them are collaborative parts

00:00:59 ◼   ► of it aren't as relevant for us I mean

00:01:01 ◼   ► for me like I have most of the same

00:01:03 ◼   ► situation in that I'm mostly

00:01:05 ◼   ► collaborating with nobody but there

00:01:07 ◼   ► there have been times where I've seen a

00:01:09 ◼   ► lot of the value of it Ferns I mean you

00:01:10 ◼   ► know I used to work at normal jobs where

00:01:12 ◼   ► I've had other people working with me so

00:01:13 ◼   ► we would do things there but that was

00:01:15 ◼   ► that was back in the subversion days and

00:01:17 ◼   ► it was much simpler and it was still

00:01:20 ◼   ► very small teams and these days you know

00:01:24 ◼   ► I mostly you know don't do any kind of

00:01:27 ◼   ► elaboration however I do have a couple

00:01:30 ◼   ► of open-source projects that I run and

00:01:32 ◼   ► and most of them get no activity

00:01:35 ◼   ► whatsoever but a few of them do get

00:01:37 ◼   ► third-party contributions and I have

00:01:39 ◼   ► done you know get-get pull requests and

00:01:42 ◼   ► merges and stuff like that and those

00:01:44 ◼   ► things so I have minimal experience

00:01:47 ◼   ► there and you and I actually just

00:01:50 ◼   ► started accidentally collaborating on on

00:01:52 ◼   ► something and I don't think that's even

00:01:53 ◼   ► worth mentioning what it is it's it's a

00:01:55 ◼   ► very very narrow need that both of us

00:01:57 ◼   ► happen to have and almost nobody else

00:01:59 ◼   ► does I committed to your codebase the

00:02:02 ◼   ► other day and that was like the first

00:02:04 ◼   ► time I've ever committed to someone

00:02:07 ◼   ► else's iOS codebase and I thought and

00:02:10 ◼   ► you said that was ever the first time

00:02:11 ◼   ► that anyone's ever committed to yours

00:02:12 ◼   ► right

00:02:13 ◼   ► it's been a very long time since like

00:02:15 ◼   ► 2011 2012 I think was the last time I

00:02:19 ◼   ► had I had any kind of collaboration so

00:02:21 ◼   ► yes it's it is very much a rare thing

00:02:23 ◼   ► but it was kind of fun like I was like

00:02:25 ◼   ► someone else it's like I have to do a

00:02:26 ◼   ► fetch and have like a pool rather than

00:02:28 ◼   ► just to push this is novel and exciting

00:02:31 ◼   ► yeah I don't know how I would deal with

00:02:33 ◼   ► that in my ABS I probably fix all the

00:02:36 ◼   ► all the style differences which is like

00:02:38 ◼   ► the huge faux pas to like restyle

00:02:40 ◼   ► someone else's commit but like version

00:02:43 ◼   ► control like there is a definitely

00:02:44 ◼   ► collaboration is an important part of

00:02:46 ◼   ► that and there are lots of different

00:02:48 ◼   ► ways to deal with that like obviously

00:02:50 ◼   ► like we're saying for us we don't do as

00:02:52 ◼   ► much from a collaboration perspective

00:02:53 ◼   ► but I've you know I've worked in

00:02:54 ◼   ► companies where it's an important thing

00:02:55 ◼   ► and there's lots of great mechanisms for

00:02:59 ◼   ► this now like this is something that I

00:03:00 ◼   ► think back to I think my first my first

00:03:01 ◼   ► version control system was CVS I think

00:03:04 ◼   ► yep and then I went to subversion and

00:03:06 ◼   ► then to get and in every time like the

00:03:09 ◼   ► tool itself gets better and less awkward

00:03:11 ◼   ► and less cumbersome and I think about

00:03:14 ◼   ► the things that are even things like

00:03:16 ◼   ► github or bitbucket or there's lots of

00:03:18 ◼   ► kind of these online backs or front ends

00:03:21 ◼   ► for the repository which makes them any

00:03:25 ◼   ► of these things so helpful and well I

00:03:27 ◼   ► don't do a lot of it whenever I've had

00:03:28 ◼   ► to do something like that where you have

00:03:30 ◼   ► like you submit a pull request and you

00:03:32 ◼   ► can have notes in code review and a lot

00:03:35 ◼   ► of these things are nice and clear and

00:03:36 ◼   ► obvious rather than just kind of sitting

00:03:38 ◼   ► there at the command line trying to work

00:03:41 ◼   ► out what's going on when someone else

00:03:43 ◼   ► submits code and it crashes into yours

00:03:46 ◼   ► and things are horrible and broken and

00:03:49 ◼   ► so you know can you can do some pretty

00:03:50 ◼   ► powerful things too like I remember back

00:03:52 ◼   ► with Mayor Lee it is a version control

00:03:54 ◼   ► where you had to like you would check

00:03:56 ◼   ► out specific files that you were going

00:03:58 ◼   ► to change and things like that that

00:04:01 ◼   ► would be very cumbersome and you'd be

00:04:02 ◼   ► like every now and then you'd go down

00:04:03 ◼   ► the hall and you know like ask Jim down

00:04:05 ◼   ► the hall hey are you done with that

00:04:07 ◼   ► header because I need to add something

00:04:09 ◼   ► to it for my part of the you know of

00:04:11 ◼   ► this app and things like that which you

00:04:13 ◼   ► know most modern version control systems

00:04:16 ◼   ► can just deal with in terms of Bill you

00:04:18 ◼   ► know you feel that if you add at the top

00:04:19 ◼   ► and he had it's the bottom it just goes

00:04:21 ◼   ► and that's fine and you know the

00:04:22 ◼   ► concerns be problematic if he's changing

00:04:24 ◼   ► something in one way and you're changing

00:04:25 ◼   ► it or another but

00:04:27 ◼   ► you know by and large collaboration is

00:04:29 ◼   ► much easier from a version control

00:04:31 ◼   ► perspective than it used to be because

00:04:34 ◼   ► you can just you have these nice visual

00:04:35 ◼   ► tools and you know mechanisms by which

00:04:38 ◼   ► you can you know each share and share

00:04:41 ◼   ► access into a repository yeah I mean

00:04:43 ◼   ► it's it is so nice to have you know

00:04:46 ◼   ► modern modern conveniences with these

00:04:48 ◼   ► things and modern advancements I mean

00:04:50 ◼   ► you know I - I never did the systems

00:04:52 ◼   ► where checkouts are exclusive to one

00:04:54 ◼   ► person but just basics of like

00:04:57 ◼   ► versioning and merging from it all these

00:04:59 ◼   ► systems are great and you know and

00:05:01 ◼   ► especially like branching became a lot

00:05:03 ◼   ► easier with git and then the DVCS model

00:05:06 ◼   ► and these things I mean it just it just

00:05:08 ◼   ► helps so much when you're working on a

00:05:10 ◼   ► team and also when you're working by

00:05:11 ◼   ► yourself and I think that's what we

00:05:12 ◼   ► gonna talk about too is like even when

00:05:14 ◼   ► you're working alone these systems

00:05:16 ◼   ► provide invaluable help and and I think

00:05:19 ◼   ► every developer this is actually I know

00:05:22 ◼   ► that not every developer who works for

00:05:25 ◼   ► themselves

00:05:26 ◼   ► does version control and I think not

00:05:28 ◼   ► doing it as a huge mistake

00:05:29 ◼   ► yes I don't even know how I mean that

00:05:31 ◼   ► just seems like that's like the wild

00:05:33 ◼   ► wild west where like are you like

00:05:34 ◼   ► copying folders like any time you know

00:05:37 ◼   ► like it's when you have like version 1

00:05:38 ◼   ► version 2 version 3 like that's that's

00:05:42 ◼   ► chilling yes use version control

00:05:44 ◼   ► whatever it is it doesn't like its 20s

00:05:46 ◼   ► it doesn't really matter which one you

00:05:48 ◼   ► choose like if you're a get person and

00:05:50 ◼   ► mercurial person if you want to use

00:05:51 ◼   ► subversion if you want to do something

00:05:52 ◼   ► else like that's fine but you have to

00:05:54 ◼   ► use something because I think at you

00:05:57 ◼   ► that's like the thing that you also can

00:05:58 ◼   ► keep in mind with version control is

00:06:00 ◼   ► like it's a powerful like development

00:06:02 ◼   ► tool like in the way that you and I like

00:06:04 ◼   ► we probably spend most of our

00:06:05 ◼   ► development time in Xcode or in some

00:06:08 ◼   ► ways and like textmate or something for

00:06:10 ◼   ► doing like web programming but the tool

00:06:15 ◼   ► it's the tool of version control is

00:06:17 ◼   ► pretty powerful one in terms of it being

00:06:20 ◼   ► a part of your development process and

00:06:22 ◼   ► allowing you to do things that would

00:06:24 ◼   ► otherwise be really awkward like I love

00:06:26 ◼   ► and get having like branching of being

00:06:28 ◼   ► able to be like I have this idea for a

00:06:32 ◼   ► way to kind of restructure something or

00:06:34 ◼   ► do a big refactor or take like take some

00:06:37 ◼   ► code and you know take it in a different

00:06:39 ◼   ► direction

00:06:39 ◼   ► and I can just branch off from like my

00:06:42 ◼   ► main thing try it for you know a few

00:06:45 ◼   ► days and if I end up it turns out to be

00:06:47 ◼   ► just this complete dead end I can sort

00:06:50 ◼   ► of just like throw that away and go back

00:06:52 ◼   ► to where I started from in a way that is

00:06:54 ◼   ► nice and clean and reliable and isn't

00:06:57 ◼   ► going to break something or if I need to

00:06:58 ◼   ► want to just like cherry-pick part of

00:07:00 ◼   ► that in I can do that in a controlled

00:07:02 ◼   ► way and also just to look at what I've

00:07:05 ◼   ► been doing like sometimes all you know

00:07:08 ◼   ► it's being able to look at the like in

00:07:11 ◼   ► some ways you'd think like the blame

00:07:12 ◼   ► part of version control if you work by

00:07:17 ◼   ► yourself and if you're not familiar like

00:07:18 ◼   ► blame in most version control systems

00:07:20 ◼   ► you can look at any line of code and see

00:07:22 ◼   ► who created it and when that was created

00:07:25 ◼   ► in the history of your project you know

00:07:27 ◼   ► and so this is the classic like if

00:07:28 ◼   ► someone breaks the build you can run

00:07:30 ◼   ► blame on it and see who broke it but

00:07:32 ◼   ► even for myself like when the names are

00:07:34 ◼   ► always me it's often really helpful to

00:07:36 ◼   ► be able to look back and be like why am

00:07:38 ◼   ► I doing this this way and I can go back

00:07:40 ◼   ► and see that comment interesting I added

00:07:42 ◼   ► this as you know at you know two years

00:07:44 ◼   ► ago when I was working on X feature and

00:07:46 ◼   ► that's often really really really

00:07:48 ◼   ► helpful to be able to look back and to

00:07:51 ◼   ► understand my own code even better and

00:07:54 ◼   ► even more so if it's you're

00:07:55 ◼   ► collaborating with with someone else and

00:07:58 ◼   ► even just to be able to like one thing I

00:08:00 ◼   ► always do F as it have in my development

00:08:02 ◼   ► cycle is I look I take the last commit

00:08:07 ◼   ► that like the version that I just

00:08:09 ◼   ► released and whenever I'm getting ready

00:08:11 ◼   ► to submit to the app store like the very

00:08:13 ◼   ► last step in before I hit like actual

00:08:15 ◼   ► archive and submit to the app store is I

00:08:18 ◼   ► always go and run a diff between the

00:08:21 ◼   ► last submitted version and my current

00:08:22 ◼   ► version of the code and I just go

00:08:24 ◼   ► through like sort of line by line in all

00:08:26 ◼   ► the changes and make sure that there's

00:08:28 ◼   ► nothing in there that jumps out it to me

00:08:30 ◼   ► is like whoa why is this still in here

00:08:33 ◼   ► that are like that doesn't seem right

00:08:35 ◼   ► and I've caught several bugs in my

00:08:37 ◼   ► development in my process that way by

00:08:39 ◼   ► having using version control as a tool

00:08:41 ◼   ► to help me write better code yeah I mean

00:08:44 ◼   ► that's the biggest value of it as

00:08:46 ◼   ► independent is that it's it's it's

00:08:48 ◼   ► giving you a tool that can show you what

00:08:51 ◼   ► you've changed and when you changed it

00:08:53 ◼   ► and possibly why you changed it but

00:08:55 ◼   ► that's like just knowing what has

00:08:57 ◼   ► changed whether it's what did I do

00:08:59 ◼   ► today to this one file so I know whether

00:09:01 ◼   ► to even commit this change or not or you

00:09:04 ◼   ► know what's that you know what has

00:09:05 ◼   ► changed in the entire app between this

00:09:09 ◼   ► version which I know worked in this way

00:09:11 ◼   ► and the current version which keeps

00:09:13 ◼   ► having this weird bug that I can't

00:09:14 ◼   ► figure out why it's happening you can go

00:09:16 ◼   ► you can see all right well here's

00:09:17 ◼   ► everything that's different between

00:09:18 ◼   ► these two so the bug is because of some

00:09:20 ◼   ► part of this you know and like it's it's

00:09:23 ◼   ► so it's so useful to know that stuff

00:09:24 ◼   ► everyone can get value out of that you

00:09:27 ◼   ► know it also it helps it helps even if

00:09:29 ◼   ► you have to work on multiple computers

00:09:30 ◼   ► or if you're working on you know for

00:09:32 ◼   ► like if you have a deployment on your

00:09:34 ◼   ► server and one locally and your

00:09:35 ◼   ► computer's you keep those synced up

00:09:37 ◼   ► properly and in a sane way I mean it's

00:09:40 ◼   ► it's just so great I I'm I'm still sure

00:09:43 ◼   ► I'm shocked that anybody still doesn't

00:09:45 ◼   ► use it but fortunately most people do

00:09:47 ◼   ► use I think most people have come around

00:09:48 ◼   ► to do it now so we're mostly mostly

00:09:51 ◼   ► saying in that way in an industry that's

00:09:52 ◼   ► insane and so many other ways we're

00:09:54 ◼   ► mostly saying in that way yeah and it

00:09:56 ◼   ► really helps in that regard that it's

00:09:59 ◼   ► also becomes so much easier to do like I

00:10:02 ◼   ► think of in Xcode like it has like

00:10:04 ◼   ► full-on version control built into it

00:10:06 ◼   ► like in terms of e not even like it's

00:10:08 ◼   ► weird snapshotting thing that it always

00:10:09 ◼   ► asks me when I'm refactoring a project

00:10:11 ◼   ► and it asked me do I want to make a

00:10:13 ◼   ► snapshot and I don't really know what

00:10:14 ◼   ► that means I really don't think I do but

00:10:17 ◼   ► it has it built in like it all of my

00:10:19 ◼   ► projects whenever I'm changing something

00:10:21 ◼   ► like it's really helpful in Xcode to

00:10:23 ◼   ► just see what's changed and like once I

00:10:25 ◼   ► change something it gets a little M icon

00:10:27 ◼   ► next to it that says it's modified or

00:10:28 ◼   ► for the additive fried file to it it's

00:10:30 ◼   ► there and so there's no reason not to be

00:10:33 ◼   ► aware of this type of thing

00:10:34 ◼   ► because the tooling in is in place to

00:10:37 ◼   ► make that just so easy and streamlined

00:10:40 ◼   ► that they could be a fool not to yeah

00:10:44 ◼   ► and what you know whether you do it on a

00:10:45 ◼   ► hosted service like github or bitbucket

00:10:47 ◼   ► or whether you do it just locally like

00:10:49 ◼   ► you know you can almost all these

00:10:51 ◼   ► systems you can have a local server if

00:10:53 ◼   ► you want to and not have it significant

00:10:55 ◼   ► like you know remote slash paid web

00:10:57 ◼   ► service but I recommend if if you can

00:11:00 ◼   ► swing it for you know regulatory reasons

00:11:02 ◼   ► and for for money reasons I recommend

00:11:05 ◼   ► just putting it on github or bitbucket

00:11:07 ◼   ► like put it put it on one of the big

00:11:08 ◼   ► hosts because it just it outsources a

00:11:11 ◼   ► class of problems that you don't need to

00:11:13 ◼   ► deal with anymore and also you get a

00:11:14 ◼   ► whole lot of convenience for having that

00:11:16 ◼   ► be on a hosted system you have the nice

00:11:18 ◼   ► web gooeys you have the ability to

00:11:20 ◼   ► access it from anywhere multiple

00:11:22 ◼   ► computers you have kind of this built-in

00:11:23 ◼   ► backup so it's yeah definitely hosts it

00:11:27 ◼   ► if you can and please please use version

00:11:30 ◼   ► control yeah and that's guessing too I

00:11:32 ◼   ► think then another kind of interesting

00:11:33 ◼   ► aspect to version control which is the

00:11:35 ◼   ► like the backup portion of it yeah like

00:11:38 ◼   ► both in terms of like what you're saying

00:11:40 ◼   ► where like it's another physical backup

00:11:41 ◼   ► like in the same way that you should

00:11:43 ◼   ► have probably a clone of your main

00:11:45 ◼   ► development harddrive running all the

00:11:47 ◼   ► time and like backup in that sense of

00:11:48 ◼   ► like being able to you know not have if

00:11:51 ◼   ► my computer dies that's suddenly like

00:11:54 ◼   ► I'm out of luck and that's it like the

00:11:56 ◼   ► only copy of my code was sitting on that

00:12:00 ◼   ► machine like that that that's terrifying

00:12:03 ◼   ► like you have to have it backed up in a

00:12:05 ◼   ► lot of ways because like the funny thing

00:12:08 ◼   ► about being doing the kind of work we do

00:12:10 ◼   ► like there's no sort of tangible the

00:12:14 ◼   ► only tangible outcome of our work is

00:12:16 ◼   ► like a collection of sort of like text

00:12:18 ◼   ► files and images sitting on our hard

00:12:20 ◼   ► drive and so like the amount of time and

00:12:22 ◼   ► energy and money that goes into creating

00:12:24 ◼   ► those we have to treat them like

00:12:26 ◼   ► incredibly carefully like if we were

00:12:29 ◼   ► it's like we were at coca-cola and we

00:12:31 ◼   ► have to keep you know I imagine like the

00:12:33 ◼   ► recipe for coca-cola is very well

00:12:35 ◼   ► protected and backed up and guarded to

00:12:37 ◼   ► make sure that they can keep making it

00:12:39 ◼   ► because if somehow like it got lost and

00:12:41 ◼   ► they didn't know the recipe anymore that

00:12:43 ◼   ► would be hugely problematic and so as

00:12:45 ◼   ► developers like our source code is that

00:12:47 ◼   ► thing like even if we have a binary you

00:12:51 ◼   ► know an old binary of our app like that

00:12:53 ◼   ► doesn't do us any good we can't change

00:12:55 ◼   ► that and so it's important to back it up

00:12:57 ◼   ► both in terms of that kind of backup and

00:12:59 ◼   ► then something else then I find it I've

00:13:01 ◼   ► found it so helpful for many times to is

00:13:04 ◼   ► it's having this like being able to go

00:13:07 ◼   ► through like so thick you have this

00:13:09 ◼   ► little time machine that you can go back

00:13:10 ◼   ► in time and say what was my Apple like

00:13:13 ◼   ► at a particular time and like you were

00:13:15 ◼   ► saying earlier this is great for

00:13:17 ◼   ► identifying bug like weird

00:13:20 ◼   ► and bugs worth like it worked in version

00:13:22 ◼   ► two but it doesn't work in version 3

00:13:24 ◼   ► like why is that and you can actually go

00:13:27 ◼   ► back and LOL it'll often end up doing is

00:13:30 ◼   ► you know exports the project from my

00:13:33 ◼   ► version control at a particular you know

00:13:35 ◼   ► milestone and you know change the bundle

00:13:37 ◼   ► identifier and i can run them both at

00:13:39 ◼   ► the same time and i can kind of go back

00:13:40 ◼   ► and forth and I can see why things are

00:13:43 ◼   ► different and that kind of snapshotting

00:13:46 ◼   ► is really helpful to be able to look

00:13:49 ◼   ► back and then even one of the things

00:13:50 ◼   ► that I've it's kind of more silly but I

00:13:52 ◼   ► love sometimes being able to go back to

00:13:56 ◼   ► like the verb like version 1 of a

00:13:57 ◼   ► product after it becomes very mature

00:13:59 ◼   ► both to kind of laugh at myself I just

00:14:02 ◼   ► kind of look at it but also just kind of

00:14:04 ◼   ► for nostalgia reasons of kind of looking

00:14:06 ◼   ► at it and it's kind of nice to have a

00:14:07 ◼   ► sense of like wow I've really come a

00:14:09 ◼   ► long way you know this app used to be so

00:14:12 ◼   ► simple and now it's it's it's so much

00:14:13 ◼   ► more robust and I like that's kind of

00:14:15 ◼   ► fun to have this backup of it that sort

00:14:19 ◼   ► of never goes away in that way like I

00:14:20 ◼   ► always like this is why I also version

00:14:22 ◼   ► control all my screenshots that I submit

00:14:24 ◼   ► to the app store yep you don't like like

00:14:26 ◼   ► they're in there for that same reason

00:14:27 ◼   ► that I sometimes is really fun or useful

00:14:29 ◼   ► or like I'm doing a retrospective post

00:14:31 ◼   ► you know like an app has the you know

00:14:33 ◼   ► and when one of my apps hits a milestone

00:14:34 ◼   ► like it's been you know it's oh it's

00:14:36 ◼   ► five years old like if it's hitting a

00:14:38 ◼   ► milestone it's kind of fun like do a

00:14:40 ◼   ► blog post or something like that to kind

00:14:42 ◼   ► of talk about it and show screenshots or

00:14:43 ◼   ► the icon from a long time ago like

00:14:45 ◼   ► version control is a great place to keep

00:14:47 ◼   ► those things so it's all in the same

00:14:49 ◼   ► place and it you know as time marches on

00:14:51 ◼   ► you can keep a nice accurate record of

00:14:54 ◼   ► what's changed alright our sponsor this

00:14:56 ◼   ► week is Braintree Braintree is code for

00:14:59 ◼   ► easy online payments they are a

00:15:01 ◼   ► full-stack payment platform and you know

00:15:04 ◼   ► why make payment integration more

00:15:06 ◼   ► difficult than it has to be brand tree

00:15:08 ◼   ► allows you to accept nearly any type of

00:15:09 ◼   ► payment from any device with just one

00:15:12 ◼   ► integration they support pave how

00:15:13 ◼   ► bitcoin venmo Apple pay Android pay

00:15:16 ◼   ► cards and they will support whatever is

00:15:18 ◼   ► next all with that one integration it's

00:15:20 ◼   ► flexible to your systems needs and

00:15:22 ◼   ► supports most programming languages so

00:15:24 ◼   ► whether using Java Ruby or Python you

00:15:27 ◼   ► will always have a range of server-side

00:15:28 ◼   ► and client-side SDKs available

00:15:31 ◼   ► the Braintree client code supports

00:15:33 ◼   ► Android iOS and

00:15:34 ◼   ► script and all this takes just ten lines

00:15:37 ◼   ► of code to implement Braintree makes

00:15:39 ◼   ► payments and your job a whole lot easier

00:15:42 ◼   ► learn more at Braintree payments comm

00:15:44 ◼   ► slash radar once again that's Braintree

00:15:47 ◼   ► payments comm slash radar thank you very

00:15:50 ◼   ► much to Braintree for sponsoring our

00:15:52 ◼   ► show and all of relay fm

00:15:54 ◼   ► so I think what might make sense for the

00:15:56 ◼   ► rest of the episode is to kind of talk

00:15:57 ◼   ► about how this actually what we would

00:16:00 ◼   ► like what we do in practice like what

00:16:02 ◼   ► the actual tools that we use what that

00:16:04 ◼   ► like goes around because I think there's

00:16:07 ◼   ► there's certainly a degree to which

00:16:08 ◼   ► version control can become a very like

00:16:12 ◼   ► personal thing and some people like

00:16:13 ◼   ► mercurial some people like it some

00:16:15 ◼   ► people maybe even still love subversion

00:16:17 ◼   ► or there's something new and fancier

00:16:18 ◼   ► that I'm not aware of but like the you

00:16:21 ◼   ► end up with these kind of preferences

00:16:22 ◼   ► and at least I know for myself like I

00:16:23 ◼   ► have kind of workflows and things that

00:16:25 ◼   ► I've built up over time and that are

00:16:28 ◼   ► part of this that maybe are helpful or

00:16:30 ◼   ► if you're looking for a different way of

00:16:31 ◼   ► doing it or different tools for it might

00:16:33 ◼   ► be helpful to discuss so what is your

00:16:35 ◼   ► typical like how do you actually

00:16:37 ◼   ► interact with your version control

00:16:38 ◼   ► system so on the server I just do it all

00:16:41 ◼   ► by command line and I use git and I

00:16:43 ◼   ► hooked on github which I would imagine

00:16:46 ◼   ► github is probably one of the biggest

00:16:48 ◼   ► reasons why people choose git and why

00:16:50 ◼   ► it's so popular because github is is

00:16:52 ◼   ► just so convenient in many ways and so

00:16:54 ◼   ► good in many ways and it is it isn't

00:16:56 ◼   ► perfect but it's it's very good I use

00:16:58 ◼   ► github again private everything I pay

00:17:00 ◼   ► for it it's fine it's it's been very

00:17:02 ◼   ► secure for me and totally fine and

00:17:04 ◼   ► honestly if somebody steals my source

00:17:07 ◼   ► code somehow I don't really worry about

00:17:09 ◼   ► that because source code is not very

00:17:11 ◼   ► valuable like if you get somebody's

00:17:13 ◼   ► source code to their entire app what do

00:17:15 ◼   ► you do with that like you can upload it

00:17:17 ◼   ► but that's illegal and they can easily

00:17:19 ◼   ► get it taken down so like you know you

00:17:21 ◼   ► can make your own app again also illegal

00:17:23 ◼   ► from that you can get it taken down so

00:17:25 ◼   ► like the actual value of stolen source

00:17:28 ◼   ► code isn't particularly high for

00:17:30 ◼   ► somebody's random iOS app so anyway back

00:17:33 ◼   ► to how I use it I use the command line

00:17:35 ◼   ► for almost everything I do in general in

00:17:38 ◼   ► development so MySQL I use the command

00:17:41 ◼   ► line interface to that if I'm doing

00:17:43 ◼   ► development with other server-side

00:17:46 ◼   ► demons like memcache or

00:17:47 ◼   ► Redis I will use the command line to

00:17:50 ◼   ► interface with those to set them up to

00:17:52 ◼   ► to do administrative tasks if I need to

00:17:54 ◼   ► ever get I usually don't do that anymore

00:18:00 ◼   ► git is so complicated on the command

00:18:02 ◼   ► line and so tedious on the command line

00:18:06 ◼   ► that I usually just use git tower as my

00:18:10 ◼   ► GUI which is a it's a Mac app it's some

00:18:14 ◼   ► price it doesn't matter it's worth

00:18:16 ◼   ► whatever price they charge it's worth it

00:18:18 ◼   ► I think it's like 50 bucks whatever it

00:18:19 ◼   ► is totally worth it yet because git is

00:18:23 ◼   ► incredibly complicated and it doesn't

00:18:26 ◼   ► need to be most in most use you can get

00:18:30 ◼   ► by and it's it's totally fine and you'll

00:18:32 ◼   ► be fine but sometimes you have to do

00:18:34 ◼   ► something crazy with it or you have a

00:18:36 ◼   ► weird error that you have to overcome

00:18:38 ◼   ► and anything involving branching merging

00:18:42 ◼   ► of branches certain advanced operations

00:18:44 ◼   ► like committing only part of what you've

00:18:46 ◼   ► changed or or discarding only part of

00:18:49 ◼   ► what you've changed you can do all these

00:18:51 ◼   ► things in the command line but it's so

00:18:54 ◼   ► obtuse to figure out how to do that on

00:18:56 ◼   ► get and many times things can be

00:18:58 ◼   ► multiple commands and many times they're

00:19:00 ◼   ► very error-prone if you do them manually

00:19:01 ◼   ► and you and you could actually do some

00:19:03 ◼   ► damage if you do it wrong so typically

00:19:06 ◼   ► now I just use get tower on the Mac and

00:19:09 ◼   ► I just don't do any kind of operations

00:19:11 ◼   ► like that on the server I'm exactly the

00:19:13 ◼   ► same I use guitar for pie like 99% of my

00:19:16 ◼   ► get it just sort of it works it's very

00:19:19 ◼   ► reliable it's straightforward and like

00:19:22 ◼   ► the way that they present it to I've

00:19:24 ◼   ► always found seem kind of works with my

00:19:26 ◼   ► head like sometimes I've tried some

00:19:29 ◼   ► other get clients and they can get very

00:19:32 ◼   ► like they're showing me too much like

00:19:35 ◼   ► they can get has all kinds of crazy

00:19:37 ◼   ► information and metadata and things

00:19:39 ◼   ► about especially when you have lots of

00:19:41 ◼   ► branches like things that are going on

00:19:43 ◼   ► and I they just hurt my head and like I

00:19:46 ◼   ► likened the way that I used the way that

00:19:47 ◼   ► I use get tower like it it's pretty

00:19:49 ◼   ► straightforward like I open it up I open

00:19:51 ◼   ► our repository it's like here's the

00:19:52 ◼   ► things that you've changed and would you

00:19:54 ◼   ► like to commit them and that's like most

00:19:56 ◼   ► of my process is that and if I want to

00:19:58 ◼   ► make a branch I just like pick the

00:20:00 ◼   ► commit I want to branch from

00:20:01 ◼   ► give it a name and now it's created and

00:20:04 ◼   ► so it does a very good job of showing

00:20:06 ◼   ► that to me in a way that's yeah it's

00:20:09 ◼   ► like it's completely it's one of those

00:20:10 ◼   ► essential tools like if I'm setting up a

00:20:12 ◼   ► new computer there's a like in that

00:20:14 ◼   ► first like five things that I will I

00:20:16 ◼   ► will download onto it one of them is

00:20:18 ◼   ► going to be good tower because I really

00:20:20 ◼   ► can't work productively without it which

00:20:23 ◼   ► is probably saying a lot yeah yeah I

00:20:25 ◼   ► mean again like I I really do try to

00:20:28 ◼   ► avoid GUI tools for for developer stuff

00:20:30 ◼   ► where there is a perfectly suitable

00:20:32 ◼   ► command line version but this is one of

00:20:34 ◼   ► those things where it's so worth it it's

00:20:36 ◼   ► it's it is so you know not only does it

00:20:38 ◼   ► save me a lot of time and it makes

00:20:40 ◼   ► certain operations you know less

00:20:41 ◼   ► error-prone that are complex but also it

00:20:44 ◼   ► just gives me a really good view of

00:20:46 ◼   ► what's going on like you know at most

00:20:48 ◼   ► what we mentioned before like a lot of

00:20:49 ◼   ► what we were talking about is like how

00:20:51 ◼   ► source control can can it can can show

00:20:54 ◼   ► you and help you track what you're

00:20:56 ◼   ► changing what you know what has changed

00:20:58 ◼   ► over time how things used to be or how

00:20:59 ◼   ► things are now and get tower is they

00:21:03 ◼   ► just do a really nice job of showing the

00:21:06 ◼   ► diffs showing the various commits and

00:21:08 ◼   ► what was in each commit showing branches

00:21:10 ◼   ► and letting you do that and it isn't I

00:21:12 ◼   ► mean there are certainly there's

00:21:13 ◼   ► something room for improvement in

00:21:14 ◼   ► particular i I think the sub-module area

00:21:18 ◼   ► is it could use some improvement but

00:21:20 ◼   ► that's most of the most of the areas

00:21:22 ◼   ► that I think tower could be improved

00:21:24 ◼   ► including sub-modules I think are at

00:21:27 ◼   ► least partially or or even mostly

00:21:29 ◼   ► because the underlying get feature is

00:21:32 ◼   ► itself complicated and finicky like

00:21:35 ◼   ► sub-modules suck everything about get

00:21:38 ◼   ► sub-modules is horrible and so I can

00:21:41 ◼   ► understand why the implementation of the

00:21:43 ◼   ► mint hour is also a little bit odd and a

00:21:45 ◼   ► little bit finicky but ultimately I

00:21:47 ◼   ► think if I'm going to be using git this

00:21:51 ◼   ► is the way to do it

00:21:52 ◼   ► yeah I agree and I think it's also

00:21:55 ◼   ► probably worth contrasting to you I do

00:21:57 ◼   ► use the version control integration in

00:22:00 ◼   ► Xcode quite a bit but it's for like

00:22:02 ◼   ► totally different things like like I use

00:22:06 ◼   ► the so a it's just useful to be able to

00:22:09 ◼   ► see what's changed and often what I'll

00:22:11 ◼   ► end up doing is if in the US I called

00:22:13 ◼   ► the Navigator view

00:22:15 ◼   ► like the bottom left part of the Xcode

00:22:18 ◼   ► browser you can say like show me only

00:22:20 ◼   ► files that have changed that have like

00:22:23 ◼   ► an active version control status and

00:22:25 ◼   ► that's really helpful often I find when

00:22:27 ◼   ► I'm like working on something and I can

00:22:28 ◼   ► kind of just see the files that are sort

00:22:31 ◼   ► of I've been working on and both it

00:22:33 ◼   ► collapses a big project into a nice

00:22:34 ◼   ► small list and it's also kind of just if

00:22:37 ◼   ► I see something that doesn't look right

00:22:38 ◼   ► like often I'll find like a nib file

00:22:40 ◼   ► that has changed for some reason that I

00:22:43 ◼   ► don't understand like I don't feel I

00:22:45 ◼   ► opened it up once and touched it and

00:22:47 ◼   ► then horrible things happen and being

00:22:49 ◼   ► able to be aware of that earlier in the

00:22:50 ◼   ► process it's helpful but most of what I

00:22:53 ◼   ► do is they're very helpful like version

00:22:55 ◼   ► control I don't even I'm sure they said

00:22:58 ◼   ► have fancy names but like where you can

00:23:00 ◼   ► compare inside of Xcode your current

00:23:03 ◼   ► version to a past version so it's like

00:23:06 ◼   ► if you're in the in the top right corner

00:23:07 ◼   ► of Xcode there's like the three views

00:23:09 ◼   ► there's like the regular view the

00:23:10 ◼   ► companion view and then the version

00:23:12 ◼   ► control view and in that I'm so often in

00:23:15 ◼   ► there when I'm like looking at code and

00:23:17 ◼   ► trying to see like what's changed how is

00:23:19 ◼   ► this different how did I used to do this

00:23:22 ◼   ► like if I have a problem that I used to

00:23:23 ◼   ► solve once before I go in there and

00:23:26 ◼   ► compare them and then like I was saying

00:23:28 ◼   ► earlier right off I would you know

00:23:29 ◼   ► surprisingly often for working just

00:23:31 ◼   ► myself I'll use blame so let's switch it

00:23:33 ◼   ► into blame mode and look through the

00:23:35 ◼   ► source file and say like you know when

00:23:38 ◼   ► did this change when do when did I start

00:23:40 ◼   ► doing it this way what was that around

00:23:42 ◼   ► and those kinds of tools and having them

00:23:45 ◼   ► like built right in to Xcode is really

00:23:49 ◼   ► useful like I go to tower regularly but

00:23:52 ◼   ► it's when I'm done with something or

00:23:53 ◼   ► when I'm getting ready to do a release

00:23:55 ◼   ► or like in these kind of big strategic

00:23:58 ◼   ► operations I love that Xcode has

00:24:01 ◼   ► integration at the tactical level we're

00:24:03 ◼   ► like I'm actually actively coding and in

00:24:06 ◼   ► that process I don't have to contact

00:24:08 ◼   ► switch to some other app to like look

00:24:09 ◼   ► this up I can very easily just be like

00:24:11 ◼   ► huh you know why am i doing it this way

00:24:13 ◼   ► when did this change and that sort of

00:24:16 ◼   ► thing and so I use those tools in Xcode

00:24:18 ◼   ► a lot but I hardly ever commit or any of

00:24:20 ◼   ► those types of operations you know from

00:24:22 ◼   ► Xcode it has them like I'm sure they're

00:24:24 ◼   ► there and you know it I'm glad they

00:24:26 ◼   ► exist in some way so that like out of

00:24:28 ◼   ► the box you can do

00:24:29 ◼   ► version control but in Xcode I find it

00:24:32 ◼   ► really helpful at that like basic like

00:24:34 ◼   ► the actual line of code level and then I

00:24:37 ◼   ► go to tower whenever I want to do like

00:24:39 ◼   ► actual operations like things that I

00:24:41 ◼   ► would go to a command line and type you

00:24:42 ◼   ► know get clone get branch get merged get

00:24:45 ◼   ► whatever I don't actually know what half

00:24:47 ◼   ► of them are because I just used Tower

00:24:49 ◼   ► instead so I didn't even know this

00:24:52 ◼   ► version view was here I just open it up

00:24:55 ◼   ► now and I'm like my mind is blown like

00:24:57 ◼   ► oh my god this is so useful yes so

00:24:59 ◼   ► someone has not been watching what's new

00:25:01 ◼   ► and developer tools sessions index WDC

00:25:04 ◼   ► for the last few years I think I think

00:25:06 ◼   ► we just discovered that live on air does

00:25:08 ◼   ► that surprise anybody I didn't read the

00:25:11 ◼   ► manual this is great this is this is

00:25:13 ◼   ► amazing all I would all I ever really

00:25:15 ◼   ► use an Xcode was the little M indicators

00:25:17 ◼   ► on the sidebar don't know what I've

00:25:18 ◼   ► changed well there you go now you know

00:25:20 ◼   ► that you can do some of these basic

00:25:22 ◼   ► operations live at Xcode and like I said

00:25:25 ◼   ► they're really helpful they're nice

00:25:28 ◼   ► it turns out turns at all right anything

00:25:33 ◼   ► else this week no I think that's it

00:25:35 ◼   ► mostly I guess just to say make sure

00:25:37 ◼   ► you're using version control please

00:25:38 ◼   ► please please make sure you're using

00:25:39 ◼   ► version control it's one of those things

00:25:41 ◼   ► that if you're not for and like

00:25:43 ◼   ► inversion everything like I version

00:25:45 ◼   ► stuff like I mean there's I don't do a

00:25:48 ◼   ► lot of like Photoshop work but when I do

00:25:50 ◼   ► like I just mean I just put my PS DS

00:25:52 ◼   ► into version control oh yeah and it

00:25:54 ◼   ► doesn't do all the cool fancy dipping

00:25:56 ◼   ► it's not fancy in that way but like I

00:25:58 ◼   ► don't care I I can always go back in

00:26:00 ◼   ► time I can always snapshot things like

00:26:02 ◼   ► whatever you're doing try and version

00:26:04 ◼   ► control it like I've version control my

00:26:05 ◼   ► blog I version control anything I can

00:26:07 ◼   ► because once you get into the discipline

00:26:10 ◼   ► and the habit of doing it like it's just

00:26:12 ◼   ► so much better and it's probably worth

00:26:14 ◼   ► saying I'm terrible about commit

00:26:15 ◼   ► messages because I'm just working by

00:26:17 ◼   ► myself

00:26:18 ◼   ► and it's hilarious like I in most of my

00:26:21 ◼   ► commit messages are often just like

00:26:22 ◼   ► stuff kind of works now yeah mmm this

00:26:25 ◼   ► seems to be better fix fix fix okay

00:26:28 ◼   ► that's enough like it cuz I'm still

00:26:31 ◼   ► creating snapshots like I'm not

00:26:33 ◼   ► necessarily communicating as well to my

00:26:35 ◼   ► future self which is maybe you know like

00:26:38 ◼   ► problematic too you know in some ways

00:26:40 ◼   ► but just having it

00:26:42 ◼   ► like just putting random gibberish in

00:26:44 ◼   ► there and just like you'd be better off

00:26:46 ◼   ► if you just say had get take a you know

00:26:48 ◼   ► take a commit snapshot once an hour

00:26:50 ◼   ► would be you know even if you didn't

00:26:52 ◼   ► want to do anything like having just

00:26:54 ◼   ► some kind of resource to be able to go

00:26:56 ◼   ► back in time is so valuable and I think

00:26:58 ◼   ► can make you such a better developer

00:27:00 ◼   ► especially when you use the Xcode

00:27:02 ◼   ► integration tools to understand how yes

00:27:04 ◼   ► if you watch the videos you can really

00:27:06 ◼   ► do some powerful things so I highly

00:27:08 ◼   ► recommend them all right thanks a lot

00:27:10 ◼   ► that's all the time we have this week so

00:27:12 ◼   ► thanks for listening everybody thanks to

00:27:14 ◼   ► our sponsor Braintree and we will see

00:27:15 ◼   ► you next week bye

00:27:19 ◼   ► I can't believe you didn't know those

00:27:20 ◼   ► were there how did you not know there

00:27:27 ◼   ► yeah that's there's a lot of Xcode I

00:27:30 ◼   ► haven't explored yet like there's only

00:27:34 ◼   ► there's only like in the default navbar

00:27:37 ◼   ► like there's only like six buttons

00:27:39 ◼   ► I just never click on those - yeah the

00:27:42 ◼   ► one nice - semi circles the Venn diagram

00:27:44 ◼   ► one the assistant editor I don't know

00:27:45 ◼   ► what that does either that one is mostly

00:27:48 ◼   ► just like useful for if you have an Abe

00:27:50 ◼   ► in one view and like the related file

00:27:52 ◼   ► and the other one okay like it's

00:27:54 ◼   ► designed to have two things compared to

00:27:56 ◼   ► like next to each other so that's useful

00:27:58 ◼   ► if you like dragging outlets or things

00:28:00 ◼   ► you know from who dragging outlets from

00:28:03 ◼   ► India file into a source file I use the

00:28:04 ◼   ► companion one but yeah I know there's

00:28:07 ◼   ► this whole world the version of version

00:28:09 ◼   ► control that's been waiting for you this

00:28:11 ◼   ► is this whole time I'm so glad we

00:28:15 ◼   ► captured that on