-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrss.xml
410 lines (401 loc) · 58 KB
/
rss.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Blog by Zach Whitten]]></title><description><![CDATA[Personal Blog of @zwhitten]]></description><link>https://zdub.io</link><generator>GatsbyJS</generator><lastBuildDate>Sun, 01 Dec 2019 19:51:12 GMT</lastBuildDate><item><title><![CDATA[Migrating from Jekyll to Gatsby]]></title><link>https://zdub.io/posts/transition-to-gatsby</link><guid isPermaLink="false">https://zdub.io/posts/transition-to-gatsby</guid><pubDate>Sat, 08 Dec 2018 00:00:00 GMT</pubDate><content:encoded><p><span
class="gatsby-resp-image-wrapper"
style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 864px;"
>
<a
class="gatsby-resp-image-link"
href="/static/69b63e5ad554c3a066e81fa07f5003c5/69bf2/dominic-dreier-340662-unsplash.jpg"
style="display: block"
target="_blank"
rel="noopener"
>
<span
class="gatsby-resp-image-background-image"
style="padding-bottom: 68.28703703703704%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAOABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAMEBf/EABYBAQEBAAAAAAAAAAAAAAAAAAABA//aAAwDAQACEAMQAAAB0kLjzbBEJ//EABoQAAMAAwEAAAAAAAAAAAAAAAABAgQRExL/2gAIAQEAAQUC7InIdV1JsS1k+j//xAAVEQEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAwEBPwEn/8QAFREBAQAAAAAAAAAAAAAAAAAAABL/2gAIAQIBAT8BpT//xAAaEAACAgMAAAAAAAAAAAAAAAAAARESIDEy/9oACAEBAAY/AtMipy8P/8QAGhAAAwEAAwAAAAAAAAAAAAAAAAERITFRYf/aAAgBAQABPyFMqVEShc9IBk0sO9sb3g//2gAMAwEAAgADAAAAEM/f/8QAFhEAAwAAAAAAAAAAAAAAAAAAEBFB/9oACAEDAQE/EEo//8QAFhEBAQEAAAAAAAAAAAAAAAAAAQAR/9oACAECAQE/EBNu/8QAHBABAAMAAgMAAAAAAAAAAAAAAQARITFxYYHh/9oACAEBAAE/EMM0NJFDLpqoHfyJVdvqIuN8RD8LT2XOME//2Q=='); background-size: cover; display: block;"
></span>
<picture>
<source
srcset="/static/69b63e5ad554c3a066e81fa07f5003c5/01472/dominic-dreier-340662-unsplash.webp 240w,
/static/69b63e5ad554c3a066e81fa07f5003c5/222bd/dominic-dreier-340662-unsplash.webp 480w,
/static/69b63e5ad554c3a066e81fa07f5003c5/177e8/dominic-dreier-340662-unsplash.webp 864w"
sizes="(max-width: 864px) 100vw, 864px"
type="image/webp"
/>
<source
srcset="/static/69b63e5ad554c3a066e81fa07f5003c5/3bc27/dominic-dreier-340662-unsplash.jpg 240w,
/static/69b63e5ad554c3a066e81fa07f5003c5/98431/dominic-dreier-340662-unsplash.jpg 480w,
/static/69b63e5ad554c3a066e81fa07f5003c5/69bf2/dominic-dreier-340662-unsplash.jpg 864w"
sizes="(max-width: 864px) 100vw, 864px"
type="image/jpeg"
/>
<img
class="gatsby-resp-image-image"
src="/static/69b63e5ad554c3a066e81fa07f5003c5/69bf2/dominic-dreier-340662-unsplash.jpg"
alt="random image"
title="random image"
loading="lazy"
/>
</picture>
</a>
</span></p>
<p>I decided to migrate this site from <a href="https://jekyllrb.com/" target="_blank" rel="nofollow noopener noreferrer">Jekyll</a> to <a href="https://www.gatsbyjs.org/" target="_blank" rel="nofollow noopener noreferrer">Gatsby</a>. I didn’t have a compelling technical reason for doing so, but since I was looking to upgrade the asthetic anyway I figured I’d give Gatsby a shot.
I don’t use Ruby too often these days, but do a fair amount of work in React and Redux so it does seem like Gatsby will prove to be a little easier to extend and modify. </p>
<p>Since the handful of posts I had were markdown already the migration was extremely easy. I pulled down a Gatsby blog template site (which already had the markdown rendering package included), and basically put my posts into the “gatsby” content directory structure. </p>
<p>I was able to strip down the template I chose by removing dependencies for things like Facebook, Algolia, and netlify. Nothing against those sites (well maybe <em>something</em> against FB) but I wasn’t interested in using them right now. It was also very easy to add <code class="language-text">npm</code> plugins for disqus and google analytics which was nice. </p>
<p>I’ll probably continue playing around with Gatsby and seeing what other plugins and packages the community has out there. Stay tuned!</p></content:encoded></item><item><title><![CDATA[Creating a Flutter Demo App]]></title><link>https://zdub.io/posts/flutter-demo</link><guid isPermaLink="false">https://zdub.io/posts/flutter-demo</guid><pubDate>Fri, 01 Jun 2018 00:00:00 GMT</pubDate><content:encoded><p><span
class="gatsby-resp-image-wrapper"
style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 864px;"
>
<a
class="gatsby-resp-image-link"
href="/static/73c48cab1669010150b6aba45a98837e/69bf2/paul-gilmore-708419-unsplash.jpg"
style="display: block"
target="_blank"
rel="noopener"
>
<span
class="gatsby-resp-image-background-image"
style="padding-bottom: 66.66666666666666%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAEEA//EABUBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAHWaidhCE//xAAaEAACAwEBAAAAAAAAAAAAAAACAwABExES/9oACAEBAAEFAha0h3ZZE13dLnu6mxT/xAAVEQEBAAAAAAAAAAAAAAAAAAAAEf/aAAgBAwEBPwGq/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAGxAAAgEFAAAAAAAAAAAAAAAAAAEREiAxM2H/2gAIAQEABj8C1pkUJ8gwlZ//xAAcEAEBAAEFAQAAAAAAAAAAAAABABEhMUFhcZH/2gAIAQEAAT8hGPyb2kGSLDx4kzySCct23//aAAwDAQACAAMAAAAQC9//xAAWEQEBAQAAAAAAAAAAAAAAAAAAEQH/2gAIAQMBAT8QylP/xAAXEQEAAwAAAAAAAAAAAAAAAAAAAREh/9oACAECAQE/EJxT/8QAGxABAAMAAwEAAAAAAAAAAAAAAQARITFBkWH/2gAIAQEAAT8QNoKxueIX87nIfIjTQ62vZobToNSwsWtXfYAZH//Z'); background-size: cover; display: block;"
></span>
<picture>
<source
srcset="/static/73c48cab1669010150b6aba45a98837e/01472/paul-gilmore-708419-unsplash.webp 240w,
/static/73c48cab1669010150b6aba45a98837e/222bd/paul-gilmore-708419-unsplash.webp 480w,
/static/73c48cab1669010150b6aba45a98837e/177e8/paul-gilmore-708419-unsplash.webp 864w"
sizes="(max-width: 864px) 100vw, 864px"
type="image/webp"
/>
<source
srcset="/static/73c48cab1669010150b6aba45a98837e/3bc27/paul-gilmore-708419-unsplash.jpg 240w,
/static/73c48cab1669010150b6aba45a98837e/98431/paul-gilmore-708419-unsplash.jpg 480w,
/static/73c48cab1669010150b6aba45a98837e/69bf2/paul-gilmore-708419-unsplash.jpg 864w"
sizes="(max-width: 864px) 100vw, 864px"
type="image/jpeg"
/>
<img
class="gatsby-resp-image-image"
src="/static/73c48cab1669010150b6aba45a98837e/69bf2/paul-gilmore-708419-unsplash.jpg"
alt="random image"
title="random image"
loading="lazy"
/>
</picture>
</a>
</span></p>
<p>I’ve been experimenting lately with <a href="https://flutter.io" target="_blank" rel="nofollow noopener noreferrer">Flutter</a> for building cross platform mobile applications, and I have to say so far I’m pretty impressed.</p>
<p> I had previously looked into React Native and Nativescript options. Both were/are great especially if you’re already a JavaScript developer (or want to be one). React Native is obviously more suited for developers who already have some familiarity with React. Nativescript likewise offers a pretty seamless transition for people already familiar with Angular. The most impressie thing about Nativescript to me was Expo which allows for loading your code onto an actual device without connecting to the computer. </p>
<h3 id="enter-flutter"><a href="#enter-flutter" aria-label="enter flutter permalink" class="anchor"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Enter Flutter…</h3>
<p>Flutter offers pretty much all of the same advantages of it’s javascript counterparts. Namely, true write once and run anywhere code. One big difference however is that Flutter doesn’t interact directly with native components. Flutter animates and draws all of it’s components separately which means that there is no JavaScript to native bridge required within the applications. </p>
<p>Flutter comes with dozens of components out of the box. It’s hotreload functionality allows for near instantaneous testing and debugging in the local simulators. Flutter uses the Dart programming language which could be a turn off to some, but I actually found it pretty easy to pick up. There were only a couple of instances where I had to consult the documentation to check the syntax. </p>
<p>As a test of the framework I created a simple “todo” list style application to track books that I have in my stack to be read. The application has multiple tab views with Lists of items which can be reordered, completed and/or deleted. It’s also backed by sqlite using a dart library. In a future post I’ll try to dive into the actual implementation of the test application.</p>
<p>All in all the process was super easy, and I had a fully functional “production” ready application in a fraction of the time it would have taken to implement in pretty much any of the other frameworks I have tried. </p>
<p>Feel free to check out the results on github:
<a href="https://github.com/zwhitten/media_queue" target="_blank" rel="nofollow noopener noreferrer">Media Queue - Flutter Application</a></p></content:encoded></item><item><title><![CDATA[Home-Assistant First Impressions]]></title><link>https://zdub.io/posts/home-assistant-first-impressions</link><guid isPermaLink="false">https://zdub.io/posts/home-assistant-first-impressions</guid><pubDate>Sun, 12 Nov 2017 00:00:00 GMT</pubDate><content:encoded><p><span
class="gatsby-resp-image-wrapper"
style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 864px;"
>
<a
class="gatsby-resp-image-link"
href="/static/b38100ef604873ca61c063a8999243da/69bf2/joao-marcelo-marques-791496-unsplash.jpg"
style="display: block"
target="_blank"
rel="noopener"
>
<span
class="gatsby-resp-image-background-image"
style="padding-bottom: 56.13425925925925%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAUCAwT/xAAWAQEBAQAAAAAAAAAAAAAAAAADAQL/2gAMAwEAAhADEAAAAdsklpo2Fpqf/8QAGRAAAgMBAAAAAAAAAAAAAAAAAAIQEhMh/9oACAEBAAEFAtkNULrC8j//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAWEQEBAQAAAAAAAAAAAAAAAAAAARH/2gAIAQIBAT8BjH//xAAUEAEAAAAAAAAAAAAAAAAAAAAg/9oACAEBAAY/Al//xAAcEAADAAEFAAAAAAAAAAAAAAAAAREhEDFBUXH/2gAIAQEAAT8hXBWJ+Fv5pV06sUrP/9oADAMBAAIAAwAAABAU3//EABgRAQEAAwAAAAAAAAAAAAAAAAEAITFR/9oACAEDAQE/EEDRY5f/xAAYEQACAwAAAAAAAAAAAAAAAAAAARFBcf/aAAgBAgEBPxCTs0f/xAAbEAEAAwEAAwAAAAAAAAAAAAABABEhQTFRkf/aAAgBAQABPxDCBPQbKVVWJxGzvyNBvfFzC9hbXZcts//Z'); background-size: cover; display: block;"
></span>
<picture>
<source
srcset="/static/b38100ef604873ca61c063a8999243da/01472/joao-marcelo-marques-791496-unsplash.webp 240w,
/static/b38100ef604873ca61c063a8999243da/222bd/joao-marcelo-marques-791496-unsplash.webp 480w,
/static/b38100ef604873ca61c063a8999243da/177e8/joao-marcelo-marques-791496-unsplash.webp 864w"
sizes="(max-width: 864px) 100vw, 864px"
type="image/webp"
/>
<source
srcset="/static/b38100ef604873ca61c063a8999243da/3bc27/joao-marcelo-marques-791496-unsplash.jpg 240w,
/static/b38100ef604873ca61c063a8999243da/98431/joao-marcelo-marques-791496-unsplash.jpg 480w,
/static/b38100ef604873ca61c063a8999243da/69bf2/joao-marcelo-marques-791496-unsplash.jpg 864w"
sizes="(max-width: 864px) 100vw, 864px"
type="image/jpeg"
/>
<img
class="gatsby-resp-image-image"
src="/static/b38100ef604873ca61c063a8999243da/69bf2/joao-marcelo-marques-791496-unsplash.jpg"
alt="random image"
title="random image"
loading="lazy"
/>
</picture>
</a>
</span></p>
<p>I had a spare Raspberry Pi 2 laying around, so I decided to give <a href="https://home-assistant.io/" target="_blank" rel="nofollow noopener noreferrer">home-assistant</a> a spin. Overall Home Assistant is very impressive. There are connectors for just about every type of “Smart Home” device you coul possibly want to connect. It has auto-discovery for certain types of devices, but most others require configuration changes to enable. </p>
<h3 id="installation"><a href="#installation" aria-label="installation permalink" class="anchor"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Installation</h3>
<p>On my pi 2 the installation was actually a little bit painful (time-wise). They do have a script available that does all of the heavy lifting like creating a separate user account to run home-assistant as, installing the necessary OS dependencies, pulling down the python packages needed, etc. The painful part was likely due to the low power nature of the pi 2, but it took over 4 hours for this process to complete for me. There were many points during the installation where I wasn’t sure if it had locked up or if it was still going because there was no progress indication. </p>
<h3 id="hope-you-like-yaml"><a href="#hope-you-like-yaml" aria-label="hope you like yaml permalink" class="anchor"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Hope you like YAML</h3>
<p>Most of the configuration Home Assistant supports has to be done through YAML configuration files. I have not gotten too deep into this yet besides enabling Z-Wave and getting a USB Z-Wave receiver and motion sensor connected. </p>
<p>They’re connected but not doing much yet. I didn’t find much documentation about how to configure things, but there are links to quite a few Github projects where people have provided example configurations. </p>
<p>I was also able to connect to the Weather Underground API to pull local weather information for my area. I haven’t yet gotten this data grouped into a useful UI component though. </p>
<p>I’m still going through the example files learning what’s possible and how to make it happen. </p>
<h3 id="still-todo"><a href="#still-todo" aria-label="still todo permalink" class="anchor"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Still TODO</h3>
<p>I’m planning to configure more complicated triggers and events based on the few Z-Wave devices I have. I’ll post again later to update on my progess so stay tuned!</p>
<p>I’d also like to delve into what configurations are available for grouping sensors and devices on the home screen. </p>
<p>There are also a number of plugins people have written I’d like to check out. One specifically was a floorplan addon that lets you visualize your house and where various sensors/devices are. <a href="https://github.com/pkozul/ha-floorplan" target="_blank" rel="nofollow noopener noreferrer">ha-floorplan</a></p>
<p>There are also instructions for setting up Home Assistant as a <a href="https://home-assistant.io/docs/ecosystem/tor/" target="_blank" rel="nofollow noopener noreferrer">hidden Tor service</a> which seems pretty awesome as well. </p></content:encoded></item><item><title><![CDATA[The Simplest Git Workflow]]></title><description><![CDATA[A step by step walk through of how to use git and with a straight forward workflow]]></description><link>https://zdub.io/posts/the-simplest-git-workflow</link><guid isPermaLink="false">https://zdub.io/posts/the-simplest-git-workflow</guid><pubDate>Sun, 01 Oct 2017 00:00:00 GMT</pubDate><content:encoded><p><span
class="gatsby-resp-image-wrapper"
style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 864px;"
>
<a
class="gatsby-resp-image-link"
href="/static/6d78eab0e19fb2b26796cabfaf9f2735/69bf2/giuseppe-mondi-801289-unsplash.jpg"
style="display: block"
target="_blank"
rel="noopener"
>
<span
class="gatsby-resp-image-background-image"
style="padding-bottom: 66.66666666666666%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAUGAgT/xAAWAQEBAQAAAAAAAAAAAAAAAAACAAH/2gAMAwEAAhADEAAAAWPQgwKlJsWf/8QAGxAAAgMAAwAAAAAAAAAAAAAAAQIAAxEQExT/2gAIAQEAAQUC9NcDBuAurpA77J//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAWEQEBAQAAAAAAAAAAAAAAAAAAERL/2gAIAQIBAT8B0r//xAAZEAACAwEAAAAAAAAAAAAAAAAAEQIgITH/2gAIAQEABj8C6N0ySP/EABwQAAICAgMAAAAAAAAAAAAAAAABETEhgVFhcf/aAAgBAQABPyHFZ6F0NBvoQi14yJh0yK5OD//aAAwDAQACAAMAAAAQmP8A/8QAFREBAQAAAAAAAAAAAAAAAAAAABH/2gAIAQMBAT8QV//EABYRAAMAAAAAAAAAAAAAAAAAAAEQIf/aAAgBAgEBPxAUn//EABoQAQADAQEBAAAAAAAAAAAAAAEAESFBMWH/2gAIAQEAAT8QpFavBwHneGK6J+xctqxoqAnI6u11qUw4n12f/9k='); background-size: cover; display: block;"
></span>
<picture>
<source
srcset="/static/6d78eab0e19fb2b26796cabfaf9f2735/01472/giuseppe-mondi-801289-unsplash.webp 240w,
/static/6d78eab0e19fb2b26796cabfaf9f2735/222bd/giuseppe-mondi-801289-unsplash.webp 480w,
/static/6d78eab0e19fb2b26796cabfaf9f2735/177e8/giuseppe-mondi-801289-unsplash.webp 864w"
sizes="(max-width: 864px) 100vw, 864px"
type="image/webp"
/>
<source
srcset="/static/6d78eab0e19fb2b26796cabfaf9f2735/3bc27/giuseppe-mondi-801289-unsplash.jpg 240w,
/static/6d78eab0e19fb2b26796cabfaf9f2735/98431/giuseppe-mondi-801289-unsplash.jpg 480w,
/static/6d78eab0e19fb2b26796cabfaf9f2735/69bf2/giuseppe-mondi-801289-unsplash.jpg 864w"
sizes="(max-width: 864px) 100vw, 864px"
type="image/jpeg"
/>
<img
class="gatsby-resp-image-image"
src="/static/6d78eab0e19fb2b26796cabfaf9f2735/69bf2/giuseppe-mondi-801289-unsplash.jpg"
alt="Random Image"
title="Random Image"
loading="lazy"
/>
</picture>
</a>
</span></p>
<h2 id="why"><a href="#why" aria-label="why permalink" class="anchor"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Why?</h2>
<p>I love git. It was a breath of fresh air coming from a heavier Version Control System at a previous job. Git makes coding dare I say, fun?
Git is extremely powerful. For people unfamiliar with Git it can seem daunting or confusing, either because they’re coming from another VCS or they’ve never used a VCS at all (Shouldn’t they be teaching <em>something</em> in schools these days?)</p>
<p>Below I’ll outline what I think is one of the simplest workflows you can use on your teams or in your own personal development. The goal is to avoid using some of the more advanced git features which can (when used incorrectly) get developers into trouble. </p>
<p><strong>Assumptions:</strong></p>
<ul>
<li>You have git installed and configured</li>
<li>There is a remote repository of some kind you want to work with</li>
<li>Your team doesn’t already have a policy in place about doing things like rebasing before merging into master, etc.</li>
</ul>
<h2 id="optional-setup"><a href="#optional-setup" aria-label="optional setup permalink" class="anchor"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Optional Setup</h2>
<p>If you don’t already have a remote repository setup with write access, you can easily fork an existing repository on github. </p>
<ol>
<li>Go to the github page for a project you’d like to contribute to, ex: <a href="https://github.com/github/gitignore" target="_blank" rel="nofollow noopener noreferrer">github/gitignore</a></li>
<li>In the top right corner click the <code class="language-text">fork</code> button. This creates a copy of the repository under your account that you will have full read/write access to. </li>
<li>On your own repository page click the <code class="language-text">Clone or Download</code> button to get the repository URL for use in the cloning step below.</li>
</ol>
<h2 id="getting-started"><a href="#getting-started" aria-label="getting started permalink" class="anchor"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Getting Started</h2>
<p>Great you’re still here! We’ll first want to pull down a git repository. As an example we’ll use github’s repo with a collection of gitignore files by language type. (If you created a fork in the optional setup replace the git URL below with the URL to your personal repository)</p>
<div class="gatsby-highlight" data-language="shell"><pre class="language-shell"><code class="language-shell"><span class="token function">git</span> clone https://github.com/zwhitten/gitignore.git</code></pre></div>
<p>Which should result in something like this:</p>
<div class="gatsby-highlight" data-language="shell"><pre class="language-shell"><code class="language-shell"> % <span class="token function">git</span> clone https://github.com/zwhitten/gitignore.git
Cloning into <span class="token string">'gitignore'</span><span class="token punctuation">..</span>.
remote: Counting objects: <span class="token number">6896</span>, done.
remote: Compressing objects: <span class="token number">100</span>% <span class="token punctuation">(</span><span class="token number">14</span>/14<span class="token punctuation">)</span>, done.
remote: Total <span class="token number">6896</span> <span class="token punctuation">(</span>delta <span class="token number">6</span><span class="token punctuation">)</span>, reused <span class="token number">11</span> <span class="token punctuation">(</span>delta <span class="token number">2</span><span class="token punctuation">)</span>, pack-reused <span class="token number">6880</span>
Receiving objects: <span class="token number">100</span>% <span class="token punctuation">(</span><span class="token number">6896</span>/6896<span class="token punctuation">)</span>, <span class="token number">1.37</span> MiB <span class="token operator">|</span> <span class="token number">1.67</span> MiB/s, done.
Resolving deltas: <span class="token number">100</span>% <span class="token punctuation">(</span><span class="token number">3686</span>/3686<span class="token punctuation">)</span>, done.
Checking connectivity<span class="token punctuation">..</span>. done.</code></pre></div>
<p>This will create a directory on your local machine called “gitignore”. The rest of the commands will be run from inside this directory so go ahead and go into it</p>
<div class="gatsby-highlight" data-language="shell"><pre class="language-shell"><code class="language-shell"> % <span class="token builtin class-name">cd</span> gitignore</code></pre></div>
<h2 id="working-on-changes-locally"><a href="#working-on-changes-locally" aria-label="working on changes locally permalink" class="anchor"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Working on changes locally</h2>
<p>By default git will be on the <code class="language-text">master</code> branch when you first open up the project. Once you know the bug or feature you will be working on, you will want to create a feature branch to do this work. Different teams have different conventions for how they like to name their branches. Some like to prefix their feature branches with “feature/” others don’t. For our simple scenario since we won’t actually be pushing our feature branch remotely it won’t matter <em>too</em> much.
The gitignore project I checked out contains .gitignore files which can be used in various project types to tell git to ignore specific files or directories. Maybe your team likes to use (but not check in) a series of files ending in “.xyz” in their Java projects and you think the entire github community could benefit from doing the same.</p>
<h3 id="create-a-local-branch"><a href="#create-a-local-branch" aria-label="create a local branch permalink" class="anchor"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Create a local branch</h3>
<ul>
<li>
<p>First we’ll create a feature branch for this change called <code class="language-text">ignore_xyz</code>:</p>
<div class="gatsby-highlight" data-language="shell"><pre class="language-shell"><code class="language-shell">% <span class="token function">git</span> checkout -b ignore_xyz
Switched to a new branch <span class="token string">'ignore_xyz'</span></code></pre></div>
<p>OR </p>
<div class="gatsby-highlight" data-language="shell"><pre class="language-shell"><code class="language-shell">% <span class="token function">git</span> branch ignore_xyz
% <span class="token function">git</span> checkout ignore_xyz
Switched to branch <span class="token string">'ignore_xyz'</span></code></pre></div>
<p>The first option is a shortcut that does the same thing as the second option: Creates the new branch with the specified name and then switches to it. </p>
</li>
</ul>
<h3 id="make-your-changes"><a href="#make-your-changes" aria-label="make your changes permalink" class="anchor"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Make your changes</h3>
<ul>
<li>Now that we’re on the feature branch we just created we can make our changes to the Java.gitignore file in the directory by adding “*.xyz” to the top of the file.
Git allows us to see what changes have been made on our branch by running:</li>
</ul>
<div class="gatsby-highlight" data-language="shell"><pre class="language-shell"><code class="language-shell"> % <span class="token function">git</span> status
On branch ignore_xyz
Changes not staged <span class="token keyword">for</span> commit:
<span class="token punctuation">(</span>use <span class="token string">"git add &lt;file>..."</span> to update what will be committed<span class="token punctuation">)</span>
<span class="token punctuation">(</span>use <span class="token string">"git checkout -- &lt;file>..."</span> to discard changes <span class="token keyword">in</span> working directory<span class="token punctuation">)</span>
modified: Java.gitignore
no changes added to commit <span class="token punctuation">(</span>use <span class="token string">"git add"</span> and/or <span class="token string">"git commit -a"</span><span class="token punctuation">)</span></code></pre></div>
<p>This is telling us that we’ve modified one file on our branch and even gives us hints about how to revert it or move forward with the change. </p>
<ul>
<li>We next add our changed file to the staging area which is git’s way of collecting changes to be put into a commit:</li>
</ul>
<div class="gatsby-highlight" data-language="shell"><pre class="language-shell"><code class="language-shell"> % <span class="token function">git</span> <span class="token function">add</span> Java.gitignore
% <span class="token function">git</span> status
On branch ignore_xyz
Changes to be committed:
<span class="token punctuation">(</span>use <span class="token string">"git reset HEAD &lt;file>..."</span> to unstage<span class="token punctuation">)</span>
modified: Java.gitignore</code></pre></div>
<p>Our change is now staged and ready to be committed to our feature branch.</p>
<ul>
<li>Commits require a message to be added. It’s a good idea (and helpful to anyone reviewing your change) to include a useful message that describes what your commit contains:</li>
</ul>
<div class="gatsby-highlight" data-language="shell"><pre class="language-shell"><code class="language-shell"> % <span class="token function">git</span> commit -m <span class="token string">"Adding xyz to Java.gitignore file"</span>
<span class="token punctuation">[</span>ignore_xyz 8eafff2<span class="token punctuation">]</span> Adding xyz to Java.gitignore <span class="token function">file</span>
<span class="token number">1</span> <span class="token function">file</span> changed, <span class="token number">1</span> insertion<span class="token punctuation">(</span>+<span class="token punctuation">)</span>
% <span class="token function">git</span> status
On branch ignore_xyz
nothing to commit, working tree clean</code></pre></div>
<p>Great! We successfully committed our change, but currently it only exists in our local feature branch. We’ll want to merge this into the master branch to share with everyone else. </p>
<h3 id="switch-back-to-master"><a href="#switch-back-to-master" aria-label="switch back to master permalink" class="anchor"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Switch back to <code class="language-text">master</code></h3>
<ul>
<li>
<p>We’ll switch back over to the master branch using the <code class="language-text">checkout</code> command. After you switch back you’ll notice that your change no longer exists in the file. Don’t worry! It’s still there on your feature branch. If you’re working with a remote repository that other people may have changed since you started working it’s also a good ideal to <code class="language-text">pull</code> the latest changes down:</p>
<div class="gatsby-highlight" data-language="shell"><pre class="language-shell"><code class="language-shell">% <span class="token function">git</span> checkout master
% <span class="token function">git</span> pull origin master
Already up-to-date.</code></pre></div>
<p>At this point your master branch should be up to date with the latest changes in the remote repo (the changes out on github), so we should be safe to merge our changes in. </p>
</li>
</ul>
<h3 id="merge-your-changes-to-master"><a href="#merge-your-changes-to-master" aria-label="merge your changes to master permalink" class="anchor"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Merge your changes to <code class="language-text">master</code></h3>
<p>We’ll use the <em>merge</em> comand to merge our feature branch into the <code class="language-text">master</code> branch, and assuming all goes well you should see something like: </p>
<div class="gatsby-highlight" data-language="shell"><pre class="language-shell"><code class="language-shell"> % <span class="token function">git</span> merge ignore_xyz
Updating 7792e50<span class="token punctuation">..</span>8eafff2
Fast-forward
Java.gitignore <span class="token operator">|</span> <span class="token number">1</span> +
<span class="token number">1</span> <span class="token function">file</span> changed, <span class="token number">1</span> insertion<span class="token punctuation">(</span>+<span class="token punctuation">)</span></code></pre></div>
<h2 id="pushing-changes-out"><a href="#pushing-changes-out" aria-label="pushing changes out permalink" class="anchor"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Pushing changes out</h2>
<p>Since you’ll want the world to see your changes, you will now push your local <em>master</em> branch out to the <em>master</em> branch on github. If you forked an existing repository up at the beginning this would be the <em>master</em> branch there on your own personal fork of the project.</p>
<div class="gatsby-highlight" data-language="shell"><pre class="language-shell"><code class="language-shell"> % <span class="token function">git</span> push origin master</code></pre></div>
<p>Since we pulled the latest just before we merged there hopefully shouldn’t be any conflicts or errors. If there are errors git is generally pretty good about telling you what happened. One source of errors could be that someone else pushed a change into the master branch between the time you updated and the time you tried to push your change. Re-pulling <em>master</em> and resolving any conflicts should take care of this. </p>
<h2 id="conflicts"><a href="#conflicts" aria-label="conflicts permalink" class="anchor"><svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Conflicts?!?!?</h2>
<p>With multiple developers working in the same code there’s always going to be a possiblity of a conflict. This just means that you and someone else have both edited a file at the same time and git isn’t sure how to include both changes. Back when we switched to our <code class="language-text">master</code> branch and pulled down the latest code we might have pulled down another developers changes to the same file we were working in. If this happens, when you try to merge you might see a message similar to:</p>
<div class="gatsby-highlight" data-language="shell"><pre class="language-shell"><code class="language-shell"> % <span class="token function">git</span> merge ignore_xyz
Auto-merging Java.gitignore
CONFLICT <span class="token punctuation">(</span>content<span class="token punctuation">)</span>: Merge conflict <span class="token keyword">in</span> Java.gitignore
Automatic merge failed<span class="token punctuation">;</span> fix conflicts and <span class="token keyword">then</span> commit the result.</code></pre></div>
<p>Someone else modified Java.gitignore too. If we open up the file now, git has indicated the areas which need our attention:</p>
<div class="gatsby-highlight" data-language="shell"><pre class="language-shell"><code class="language-shell"><span class="token operator">&lt;&lt;&lt;</span><span class="token operator">&lt;&lt;&lt;</span><span class="token operator">&lt;</span> HEAD
*.abc
<span class="token operator">==</span><span class="token operator">==</span><span class="token operator">==</span><span class="token operator">=</span>
*.xyz
<span class="token operator">>></span><span class="token operator">>></span><span class="token operator">>></span><span class="token operator">></span> ignore_xyz</code></pre></div>
<p>The area between the “HEAD” line and the ”======” line indicates the changes that we pulled in from the remote repository while the changes below the ”=======” line and the “ignore_xyz” line indicate our own changes. In this case, someone added ”<em>.abc” at the same location we added ”</em>.xyz”. Since we don’t want to mess up their work the solution would be to leave both lines in place. We then remove the ”&#x3C;&#x3C;&#x3C;&#x3C;”, ”======”, and ”>>>>” lines to let git know we’ve sorted it out. </p>
<div class="gatsby-highlight" data-language="shell"><pre class="language-shell"><code class="language-shell"> % <span class="token function">git</span> status
On branch develop
You have unmerged paths.
<span class="token punctuation">(</span>fix conflicts and run <span class="token string">"git commit"</span><span class="token punctuation">)</span>
<span class="token punctuation">(</span>use <span class="token string">"git merge --abort"</span> to abort the merge<span class="token punctuation">)</span>
Unmerged paths:
<span class="token punctuation">(</span>use <span class="token string">"git add &lt;file>..."</span> to mark resolution<span class="token punctuation">)</span>
both modified: Java.gitignore
no changes added to commit <span class="token punctuation">(</span>use <span class="token string">"git add"</span> and/or <span class="token string">"git commit -a"</span><span class="token punctuation">)</span></code></pre></div>
<p>Even though we’ve fixed the conflict we have to let git know by staging the combined file(s) and committing the results. </p>
<div class="gatsby-highlight" data-language="shell"><pre class="language-shell"><code class="language-shell"> % <span class="token function">git</span> <span class="token function">add</span> Java.gitignore
% <span class="token function">git</span> status
On branch develop
All conflicts fixed but you are still merging.
<span class="token punctuation">(</span>use <span class="token string">"git commit"</span> to conclude merge<span class="token punctuation">)</span>
Changes to be committed:
modified: Java.gitignore</code></pre></div>
<p>And of course we’ll want to provide a useful commit message to indicate that the new commit was the result of a merge:</p>
<div class="gatsby-highlight" data-language="shell"><pre class="language-shell"><code class="language-shell"> % <span class="token function">git</span> commit -m <span class="token string">"Merged Java.gitignore change for .xyz file extensions"</span>
% <span class="token function">git</span> push origin master</code></pre></div></content:encoded></item><item><title><![CDATA[Site Theme Switch]]></title><link>https://zdub.io/posts/site-theme-switch</link><guid isPermaLink="false">https://zdub.io/posts/site-theme-switch</guid><pubDate>Sun, 13 Aug 2017 00:00:00 GMT</pubDate><content:encoded><p><span
class="gatsby-resp-image-wrapper"
style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 864px;"
>
<a
class="gatsby-resp-image-link"
href="/static/8a416f23efe73cd91ffb5ade2ced48f7/69bf2/markus-gempeler-972977-unsplash.jpg"
style="display: block"
target="_blank"
rel="noopener"
>
<span
class="gatsby-resp-image-background-image"
style="padding-bottom: 66.66666666666666%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABAAD/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAUILvCIkf//EABoQAQACAwEAAAAAAAAAAAAAAAIAARESISL/2gAIAQEAAQUC7gu5tUGE3XgcP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABsQAAICAwEAAAAAAAAAAAAAAAABESECEmEx/9oACAEBAAY/AmsXahIs8ZrHZOqxH//EABwQAQEAAgIDAAAAAAAAAAAAAAERACFBUTFhkf/aAAgBAQABPyFAzvs8Zb7iwJM7PjcahE8jcBPTti5Wy5//2gAMAwEAAgADAAAAEIQv/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPxA//8QAFxEAAwEAAAAAAAAAAAAAAAAAAAERIf/aAAgBAgEBPxDUVH//xAAdEAEBAAIDAAMAAAAAAAAAAAABEQAhMUFRcZGx/9oACAEBAAE/EPBLJ1+85U3apFCce6v1jIbkpJT5MQ4+8HjTo1rDR8L3VUxJ1Se+3P/Z'); background-size: cover; display: block;"
></span>
<picture>
<source
srcset="/static/8a416f23efe73cd91ffb5ade2ced48f7/01472/markus-gempeler-972977-unsplash.webp 240w,
/static/8a416f23efe73cd91ffb5ade2ced48f7/222bd/markus-gempeler-972977-unsplash.webp 480w,
/static/8a416f23efe73cd91ffb5ade2ced48f7/177e8/markus-gempeler-972977-unsplash.webp 864w"
sizes="(max-width: 864px) 100vw, 864px"
type="image/webp"
/>
<source
srcset="/static/8a416f23efe73cd91ffb5ade2ced48f7/3bc27/markus-gempeler-972977-unsplash.jpg 240w,
/static/8a416f23efe73cd91ffb5ade2ced48f7/98431/markus-gempeler-972977-unsplash.jpg 480w,
/static/8a416f23efe73cd91ffb5ade2ced48f7/69bf2/markus-gempeler-972977-unsplash.jpg 864w"
sizes="(max-width: 864px) 100vw, 864px"
type="image/jpeg"
/>
<img
class="gatsby-resp-image-image"
src="/static/8a416f23efe73cd91ffb5ade2ced48f7/69bf2/markus-gempeler-972977-unsplash.jpg"
alt="random image"
title="random image"
loading="lazy"
/>
</picture>
</a>
</span></p>
<p><strong>Just a quick note to anyone who stumbles across the git history of this site.</strong></p>
<p>When I first started this blog I used the <a href="https://github.com/pages-themes/slate" target="_blank" rel="nofollow noopener noreferrer">slate</a> theme since it was suppored by github pages. Out of the box this is great since it gave a clean interface with basically zero work; however, making even simple changes required a lot more work than I thought they should. </p>
<p>The current iteration of Jekyll obscures a lot of what’s happening with the themes and overriding styles required basically pulling down the git repo of the theme, including the various layouts and styles, and then making the tweaks I desired. </p>
<p>I was not a fan of this, so I refactored most of the styling to use <a href="https://getbootstrap.com/" target="_blank" rel="nofollow noopener noreferrer">bootstrap</a> instead. The look of the site is virtually unchanged, but my piece of mind is much improved. </p></content:encoded></item><item><title><![CDATA[Eventually I will have real posts!]]></title><description><![CDATA[Just getting started]]></description><link>https://zdub.io/posts/eventually-i-will-have-real-posts</link><guid isPermaLink="false">https://zdub.io/posts/eventually-i-will-have-real-posts</guid><pubDate>Sun, 14 May 2017 00:00:00 GMT</pubDate><content:encoded><p><span
class="gatsby-resp-image-wrapper"
style="position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 864px;"
>
<a
class="gatsby-resp-image-link"
href="/static/ef96ddfc6e79c8bf2d6559c324231dd2/69bf2/dawid-zawila-279998-unsplash.jpg"
style="display: block"
target="_blank"
rel="noopener"
>
<span
class="gatsby-resp-image-background-image"
style="padding-bottom: 66.66666666666666%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAABQACA//EABUBAQEAAAAAAAAAAAAAAAAAAAID/9oADAMBAAIQAxAAAAFbgFudEoaR/8QAGhAAAwEAAwAAAAAAAAAAAAAAAAECBAMREv/aAAgBAQABBQKvI5kaRy6KdvVQ9N9//8QAFxEBAAMAAAAAAAAAAAAAAAAAAAERIv/aAAgBAwEBPwGoZf/EABYRAQEBAAAAAAAAAAAAAAAAAAAhIv/aAAgBAgEBPwHSv//EABkQAAEFAAAAAAAAAAAAAAAAABAAAiExYf/aAAgBAQAGPwKS3FQ//8QAGhAAAwEAAwAAAAAAAAAAAAAAAAERMUFRgf/aAAgBAQABPyFlihXDqFYxooXHw9M5w//aAAwDAQACAAMAAAAQ8A//xAAXEQEBAQEAAAAAAAAAAAAAAAABABEh/9oACAEDAQE/EHqNk//EABcRAAMBAAAAAAAAAAAAAAAAAAABETH/2gAIAQIBAT8QWGU//8QAHBABAAICAwEAAAAAAAAAAAAAAQARIWExUZGh/9oACAEBAAE/EH0I6F1bLyjrUe7PZTKQQc5iEKhXf5E4Q65n/9k='); background-size: cover; display: block;"
></span>
<picture>
<source
srcset="/static/ef96ddfc6e79c8bf2d6559c324231dd2/01472/dawid-zawila-279998-unsplash.webp 240w,
/static/ef96ddfc6e79c8bf2d6559c324231dd2/222bd/dawid-zawila-279998-unsplash.webp 480w,
/static/ef96ddfc6e79c8bf2d6559c324231dd2/177e8/dawid-zawila-279998-unsplash.webp 864w"
sizes="(max-width: 864px) 100vw, 864px"
type="image/webp"
/>
<source
srcset="/static/ef96ddfc6e79c8bf2d6559c324231dd2/3bc27/dawid-zawila-279998-unsplash.jpg 240w,
/static/ef96ddfc6e79c8bf2d6559c324231dd2/98431/dawid-zawila-279998-unsplash.jpg 480w,
/static/ef96ddfc6e79c8bf2d6559c324231dd2/69bf2/dawid-zawila-279998-unsplash.jpg 864w"
sizes="(max-width: 864px) 100vw, 864px"
type="image/jpeg"
/>
<img
class="gatsby-resp-image-image"
src="/static/ef96ddfc6e79c8bf2d6559c324231dd2/69bf2/dawid-zawila-279998-unsplash.jpg"
alt="Random Image"
title="Random Image"
loading="lazy"
/>
</picture>
</a>
</span></p>
<p>Slowly but surely making progress. Who would have guessed having an infant in the house would slow things down so much? </p></content:encoded></item></channel></rss>