38

Click here to load reader

Personal git workflow, for everyone!

Embed Size (px)

Citation preview

Page 1: Personal git workflow, for everyone!

PERSONAL GIT WORKFLOW... FOREVERYONE!

FOR BETTER, COLLABORATIVE DEVELOPMENTPresentation by Chris Russo of Savas Labs

Page 2: Personal git workflow, for everyone!

WHAT WE'LL COVERBrief discussion of what git is

Discuss the why of the proposed workflow

Look at the theory

Eff it, , step by step

Q&A

we'll do it live

Page 3: Personal git workflow, for everyone!

PREREQUESITESIT'S BEST IF YOU ALREADY...

use git for your development

know the git add, commit, push, and pull commands

take me, at most, 82.5% seriously

Page 4: Personal git workflow, for everyone!

WHAT IS GIT? is a distributed "SCMS" or "version control" software tool optimized forteam collaboration

documentation

deployment

git

Page 5: Personal git workflow, for everyone!

GIT STRENGTHS VS. OTHER SCMS TOOLSStaging area

Data integrity

Distributed

Page 6: Personal git workflow, for everyone!

WHAT ARE WE TRYING TO ACCOMPLISH?THE IDEA OF THE PROPOSED WORKFLOW ENSURES THAT YOU ARE...

backing up code frequently

sharing the best of your code with your peers regardless of what your journey looked like

Page 7: Personal git workflow, for everyone!

Worse yet

Page 8: Personal git workflow, for everyone!

WHAT DOES THE WORKFLOW ADDRESS?. Developers/perfectionists/humans have it.

You feel vulnerable

The pursuit of “something better”

Unrealistic expectations

Feeling “trapped”

Inconsistent backups due to #FoC.

Inefficient development due to #FoC. Preserve your possibly sloppy yet efficient developmentworkflow and share only the best!

Fear of Commitment

Page 9: Personal git workflow, for everyone!

Lack of .

You give yourself a code review!

WHAT DOES THE WORKFLOW ADDRESS?self-reflection

Page 10: Personal git workflow, for everyone!

STOP TALKING ALREADY!!! WHAT IS THEWORKFLOW?

1. Commit, commit, commit. Did you commit yet?

2. Push up to a personal, private repository

3. Polish, rewind history, and rewrite

4. Share away!

5. Rinse, repeat as needed

Page 11: Personal git workflow, for everyone!

SPECIFICS, THOUGH!1. git commit, git add, git commit, git add, git commit

2. git push [backup-private-repository] [WIP-feature-branch]

3. git reset [commit-before-wip-commits] --hard

4. git checkout [WIP-feature-branch] .

5. git reset HEAD

6. git add -p

7. git commit -v

8. git cat-file -p

9. git push [shared-repository] [SHARED-BRANCH]

10. ...

11. profit

Page 12: Personal git workflow, for everyone!

Yes.

I AM ANGRY! IS IT REALLY THAT SIMPLE?

Page 13: Personal git workflow, for everyone!

STEP 1COMMIT THE GOOD, THE BAD, THE UGLY

git show forgotten-buckets-feature ^ ^^+}++/**+ * Function to queue up text and email reminders from cron runs.+ */+function compost_customizations_queue_forgotten_bucket_emails() {++ // Retrieve all members who have been marked as a forgotten+ // bucket but have not yet been notified+ $query = new EntityFieldQuery();++ $query->entityCondition('entity_type', 'user')+ ->fieldCondition('field_active', 'value', 1);+ //->fieldCondition('field_reminded_about_forgotten_b', 'value', 0);++ $result = $query->execute();+ $user_uids = array_keys($result['user']);

|

TRC source commit on github.comGo back Go forward

Page 14: Personal git workflow, for everyone!

And push, push, push!

STEP 2FIND YOU A NICE, PRIVATE REPOSITORY

...THAT NOBODY KNOWS ABOUTgit remote -vbackup [email protected]:savaslabs/tilthy-rich-compost.git (fetch)backup [email protected]:savaslabs/tilthy-rich-compost.git (push)upstream [email protected]:chrisarusso/Tilthy-Rich-Compost-Website.git (fetch)upstream [email protected]:chrisarusso/Tilthy-Rich-Compost-Website.git (push)

Page 15: Personal git workflow, for everyone!

STEP 2.PEPA

PA, PUSH IT REAL GOOD!

Page 16: Personal git workflow, for everyone!

STEP 2.5

FINISH UP AND POLISH CODE IN LAST COMMITAdd helpful comments

Make sure isn't after you ( )

Test

Push up to your private repository

DCS Drupal Coding Standards

Page 17: Personal git workflow, for everyone!

POLISHED CODE+}++/**+ * Loop through and queue up reminder notifications to subscribers+ * who have not notified us of a collection that can be skipped+ */+function compost_customizations_queue_forgotten_bucket_emails() {++ // Retrieve all members who have been marked as a forgotten+ // bucket but have not yet been notified+ $query = new EntityFieldQuery();++ $query->entityCondition('entity_type', 'user')+ ->fieldCondition('field_active', 'value', 1)+ // We started this new system in 2015-July, so let's ignore any records+ // before we changed to field collections+ ->fieldCondition('field_forgotten_bucket', 'value', '0', '>=');

Was this

Page 18: Personal git workflow, for everyone!

STEP 2.668686MARK THE TREE

Page 19: Personal git workflow, for everyone!
Page 20: Personal git workflow, for everyone!

Disclaimer: upcoming deeper dive

Page 21: Personal git workflow, for everyone!

Note: Tree = ...

UNDERSTANDING THE COMMIT OBJECT

CAR-computer:trc chris$ git cat-file -p b464b45tree f2f767cefda3d283f0fb3b68fd4f377e554b7f57parent a313c886ac6f2f85d97679faae12dc78900d34c9author Chris Russo <[email protected]> 1436206446 -0400committer Chris Russo <[email protected]> 1436206446 -0400

Final commit after testing, clean up time!

f2f767cForward

Page 22: Personal git workflow, for everyone!

Note: This is the git project root

UNDERSTANDING THE TREE OBJECT

CAR-computer:trc chris$ git cat-file -p f2f767040000 tree 58c541257a7944223814aa69b13d0a73204995e9 assets040000 tree 6bbcedb9daddca2da40e994137a9922630a88fa7 civicrm040000 tree 49a4db16751992f17eb998cd8464bf7b31534165 drupalroot040000 tree 421e8ebc4a7eed08583b24cc20298cf8cc8426fd scripts

Page 23: Personal git workflow, for everyone!

Note: These are typical Drupal files in the drupal docroot

UNDERSTANDING A TREE OBJECT WITH BLOBS (FILES)

CAR-computer:trc chris$ git cat-file -p 49a4db1100644 blob a1211d6396d2c011ea756410658b1c6b60b2078c .gitignore100644 blob b7c9dc638c1072ab6fb97a00940016074df275d5 .htaccess100644 blob 5ba3523ade1dc77ae3ffe1de50795cb4b9193db6 CHANGELOG.txt100644 blob dc8a855fbbecf09f939dba807fa5ebc1d8a26a05 COPYRIGHT.txt100644 blob 95a873433350f02a4621124d054e531c83df984b INSTALL.mysql.txt100644 blob 8fe80433bd67d4659831ceaa729c534c70544c16 INSTALL.pgsql.txt100644 blob 8e57d60cc0d793862706f41dcfdcef5252fdb1e8 INSTALL.sqlite.txt100644 blob 6f02c05ae6dfd799a8a0566fccb54963ca9a595a INSTALL.txt100644 blob d159169d1050894d3ea3b98e1c965c4058208fe1 LICENSE.txt100644 blob f5cf6f893abdb884ae8b95536c86224bc196400e MAINTAINERS.txt100644 blob 60d3da592e9ca5e77a4d40f1cc87e9f326bcf1b8 README.txt100644 blob e870ff0f0ec39cb94b775e7689cbfec7a0a43afa UPGRADE.txt100644 blob 3ea2b20ace5146a5983dcebe6178fd5a53f00bd3 authorize.php100644 blob c6ce5317e88fda48a6543ebcbcc09ec93e9d99ac cron.php040000 tree 64ae554e8a2d34a1065f19781155defae2321eed includes100644 blob 8b831997815f521b150c5b0c27038f6b04e3cf40 index.php

Page 24: Personal git workflow, for everyone!

STEP 3ROLLBACK

Rollback code to before you made any of your updates. This is likely where master is, or at leastwas when you made your feature branch.

CAR-computer:drupalroot chris$ git branch -v --contains 96edd7c2a5b0baccc9fe3233c4482d0254a41386* forgotten-buckets-feature b464b45 Final commit after testing, clean up time!

CAR-computer:drupalroot chris$ git branch -v --contains 96edd7c2a5b0baccc9fe3233c4482d0254a41386* forgotten-buckets-feature b464b45 Final commit after testing, clean up time!

CAR-computer:drupalroot chris$ git branch -v --contains 96edd7c2a5b0baccc9fe3233c4482d0254a41386^* forgotten-buckets-feature b464b45 Final commit after testing, clean up time!

CAR-computer:drupalroot chris$ git branch -v --contains 96edd7c2a5b0baccc9fe3233c4482d0254a41386 ^forgotten-buckets-feature b464b45 Final commit after testing, clean up time!* master 808f61e Hide extra links for blog content type

Page 25: Personal git workflow, for everyone!

THE ROLLBACK CAR-computer:drupalroot chris$ git reset 96edd7c2a5b0baccc9fe3233c4482d0254a41386 ^ --hardHEAD is now at 3e4a0cc Remove bucket size from subscriber optionCAR-computer:drupalroot chris$ git statusOn branch masterYour branch is behind 'upstream/master' by 13 commits, and can be fast-forwarded.(use "git pull" to update your local branch)nothing to commit, working directory clean

Page 26: Personal git workflow, for everyone!

STEP 3.5CHECKOUT POLISHED CODE TO WORKING TREE

Now we'll bring back all the code we just worked on, but not the commits with them.

CAR-computer:tilthy-rich-compost chris$ git checkout forgotten-buckets-feature .CAR-computer:tilthy-rich-compost chris$ git statusOn branch masterYour branch is behind 'upstream/master' by 13 commits, and can be fast-forwarded.(use "git pull" to update your local branch)Changes to be committed:(use "git reset HEAD <file>..." to unstage)

new file: drupalroot/sites/all/modules/contrib/bcc/LICENSE.txtnew file: drupalroot/sites/all/modules/contrib/bcc/README.TXTnew file: drupalroot/sites/all/modules/contrib/bcc/bcc.infonew file: drupalroot/sites/all/modules/contrib/bcc/bcc.installnew file: drupalroot/sites/all/modules/contrib/bcc/bcc.modulenew file: drupalroot/sites/all/modules/contrib/field_collection/LICENSE.txtnew file: drupalroot/sites/all/modules/contrib/field_collection/README.txtnew file: drupalroot/sites/all/modules/contrib/field_collection/ctools/relationships/field_collection_from_field.incnew file: drupalroot/sites/all/modules/contrib/field_collection/field-collection-item.tpl.php

Page 27: Personal git workflow, for everyone!

STEP 3.848RESET STAGED FILES

We'll reset everything not with --hard so that nothing is staged

CAR-computer:tilthy-rich-compost chris$ git reset HEADUnstaged changes after reset:M drupalroot/sites/all/modules/custom/compost_customizations/compost_customizations.moduleCAR-computer:tilthy-rich-compost chris$ git statusOn branch masterYour branch is behind 'upstream/master' by 13 commits, and can be fast-forwarded.(use "git pull" to update your local branch)Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)

modified: drupalroot/sites/all/modules/custom/compost_customizations/compost_customizations.module

Untracked files: (use "git add <file>..." to include in what will be committed)

drupalroot/sites/all/modules/contrib/bcc/

Page 28: Personal git workflow, for everyone!

STEP 4MAKE ALL NEW COMMITS

use git add -p

break code into logical features/sections

Make nice commit messages

Page 29: Personal git workflow, for everyone!

NEW GIT HISTORYCAR-computer:tilthy-rich-compost chris$ git log 3706ca31771312646f0caf0356cbc9ee3b2f4533commit 3706ca31771312646f0caf0356cbc9ee3b2f4533Author: Chris Russo <[email protected]>Date: Mon Jul 6 14:21:20 2015 -0400

Notify subscribers for missed collections

Add a template file for email copyAdd logic to cron to loop through and mailusers after they've not notified usbut have not left their bucket out

Remove old paypal templates and librariesthat aren't being used

commit f79d6b54a3a7ee25cb391f0978abf85314113461Author: Chris Russo <[email protected]>

Page 30: Personal git workflow, for everyone!

STEP 4.5VERIFY TREES ARE EXACTLY THE SAME

CAR-computer:trc chris$ git cat-file -p 3706ca31771312646f0caf0356cbc9ee3b2f4533tree f2f767cefda3d283f0fb3b68fd4f377e554b7f57parent f79d6b54a3a7ee25cb391f0978abf85314113461author Chris Russo <[email protected]> 1436206880 -0400committer Chris Russo <[email protected]> 1436207673 -0400

Notify subscribers for missed collections

Add a template file for email copyAdd logic to cron to loop through and mailusers after they've not notified usbut have not left their bucket out

Remove old paypal templates and librariesthat aren't being used

Old Tree

Page 31: Personal git workflow, for everyone!

STEP 5PUSH TO SHARED REPOSITORYPAT YOURSELF ON THE BACK... AND HEAD TO ...

Page 32: Personal git workflow, for everyone!

THE DRUM CIRCLE

Page 33: Personal git workflow, for everyone!

... AND GET YOUR FACE PAINTED ...

Page 34: Personal git workflow, for everyone!

FRAGMENTSHit the next arrow...

... to step through ...

... a fragmented slide.

Page 35: Personal git workflow, for everyone!

FRAGMENT STYLESThere's different types of fragments, like:

shrink

highlight-red

highlight-blue

Page 36: Personal git workflow, for everyone!

SPEAKER VIEWThere's a . It includes a timer, preview of the upcoming slide as well as your speakernotes.

speaker view

Press the S key to try it out.

Page 37: Personal git workflow, for everyone!

PREGUNTAS?!

Page 38: Personal git workflow, for everyone!

Follow us por favor! Yes, no, maybe?... Yes!

Eh-tee-tee-pee double-u, double-u, double-u...

WE ARE

SAVAS LABS!

@Savas_Labs

savaslabs.com/