Your SlideShare is downloading. ×
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Ninja Git: Save Your Master
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Ninja Git: Save Your Master

375

Published on

Dear Ninja Git Apprentice, your training will be short but it will be dense and fierce. I will teach you how to lock down your master's fortress from tampering and infiltration, how to become …

Dear Ninja Git Apprentice, your training will be short but it will be dense and fierce. I will teach you how to lock down your master's fortress from tampering and infiltration, how to become invisible and hide data in a repository, how to resist any attacks and recover your committed and uncommitted files, how to be fast as a fox to cover your tracks and resolve conflicts. Save the master!

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
375
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
12
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Ninja master Nicola Paolucci! Developer Advocate / Evangelist with! Save your
  • 2. pirateninjazombie
  • 3. Nicola Paolucci @durdn Bio pictures: the subtle pleasure of embarrassing yourself in front of hundreds of people
  • 4. Lock your master’s fortress 1 2 Dear Ninja apprentice, here you’ll learn: Powers of invisibility Solve conflicts with power blows3 4 Cover your tracks
  • 5. 1.Powers of invisibility © http://www.amigosdosbichos.org/
  • 6. 1.Powers of invisibility © http://www.amigosdosbichos.org/
  • 7. Hide files from git update-index --assume-unchanged very useful with git-svn Different than .gitignore, it hides commited files
  • 8. Hide files from git update-index --no-assume-unchanged Revert it with: remember to add --no
  • 9. List assumed unchanged files git ls-files -v | grep ^h Useful as alias (see alias list later)
  • 10. Hide files in raw objects actually writes into the object db git hash-object -w <file>
  • 11. CUSTOMARY WARNING! if you get in trouble, don’t come to me :D Treat this power with great care. ! And if you’re unsure, please refrain from experiments!
  • 12. Delete branch or commits and retrieve it later git branch -D <branch> git reset --hard HEAD~20
  • 13. What is the reflog? It’s a log of all the places where your HEAD has been garbage collected every 90 days
  • 14. Recollect your goods $ git reflog ! 00af1b3 HEAD@{2}: reset: moving to refexp da5b154 HEAD@{3}: rebase finished: returning … da5b154 HEAD@{4}: pull: checkout da5b154dfa71… e10671f HEAD@{8}: pull origin master: checkout Just list the HEAD moves using the reflog and pick the one to restore
  • 15. Don’t expire the reflog [gc "refs/remotes/*"] reflogExpire = never reflogExpireUnreachable = never If you hide stuff in objects not referenced, be sure they won’t be garbage collected!
  • 16. If some traitor deleted files git log -1 -- [path] lists where a file was deleted git log --diff-filter=D --summary lists all deleted files
  • 17. 2. Lock your master’s fortress
  • 18. Always a balancing act Security DevSpeed
  • 19. Lock down your repo # no rewriting history denyNonFastForwards = true ! # no deleting history denyDeletes = true ! # check object consistency fsckObjects = true Edit .git/config in the [receive] section:
  • 20. Reject force push, Luke atlss.in/update-paranoid Git project has already an update hook ‘update-paranoid’ that is designed to reject history rewriting updates
  • 21. Reject force push, Luke
  • 22. Impersonating Authors is easy with . $ git commit -m "I'm Luke" $ git commit --author "Elvis <elvis@graceland.net>" -m "I'm elvis" commit a9f0967cba236465d6cb68247.. Author: Elvis <elvis@graceland.net> Date: Mon Apr 22 18:06:35 2013 -0500 ! I'm Elvis ! commit d6eb7572cbb4bdd8e2aaa5c90.. Author: Luke <luke@tatooine.com> Date: Mon Apr 22 18:04:54 2013 -0500 ! I'm Luke
  • 23. Harden up by signing things Sample gpg commands to get you started: gpg --gen-key Generate your GPG keys gpg -k List your keys gpg -a --export <keyid> Export your key
  • 24. Store your signature in Simple! Add a tag referencing your public key gpg -a --export <keyid> | git hash-object -w --stdin ! ! Store your public key in a raw object git tag nicks-key 187ysg Tag the raw object with a label
  • 25. git tag -s <tag_name> -m “message” Sign a tag with your GPG key Finally you can sign/verify tags git tag -v <tag_name> Verifies that the signature is valid
  • 26. git cat-file -p tims-key | gpg --import Import a GPG key from a tag Import other public keys
  • 27. Always a balancing act Security DevSpeed
  • 28. 3. Solve conflicts with power blows
  • 29. A word on terminology Current checked out branch ! ! !--ours What do ours and theirs mean when solving conflicts? Any merge/rebase coming in ! ! !--theirs
  • 30. Basics for easy conflict resolution The common commands are: $ git checkout --ours/--theirs <file> Check back out our own/their own version of the file $ git add <file> Add the change to the index will resolve the conflict
  • 31. Aliases for easy conflict resolution [alias] ours = "!f() { git checkout --ours $@ && git add $@; }; f” ! theirs = ... Add these to .gitconfig
  • 32. Where do I get that awesome alias? atlss.in/git-aliases
  • 33. rerere resolve! Reuse Recorded Resolution will help you when dealing with repetitive and similar merge conflicts. $ git config --global rerere.enabled true Turns it on and forget about it
  • 34. Sample output rerere $ git add hello.rb $ git commit Recorded resolution for 'hello.rb'. [master 68e16e5] Merge branch 'i18n' Auto-merging hello.rb CONFLICT (content): Merge conflict in hello.rb Resolved 'hello.rb' using previous resolution.
  • 35. 4. Cover your trackshttps://www.youtube.com/watch?v=D22gbXIx-CE
  • 36. MASTER FEATURE What is a rebase? It’s a way to replay commits, one by one, on top of a branch
  • 37. MASTER FEATURE What is a rebase? It’s a way to replay commits, one by one, on top of a branch
  • 38. MASTER FEATURE What is a rebase? It’s a way to replay commits, one by one, on top of a branch
  • 39. MASTER FEATURE What is a rebase? It’s a way to replay commits, one by one, on top of a branch Don’t use!
  • 40. Correct way to use rebase to update a feature branch What is a rebase? MASTER FEATURE
  • 41. Correct way to use rebase to update a feature branch What is a rebase? MASTER FEATURE
  • 42. What is a --interactive rebase? PICK! SQUASH REWORD! FIXUP EDIT ! EXEC It’s a way to replay commits, one by one, deciding interactively what to do with each
  • 43. --autosquash $ git config --global rebase.autosquash true Turns on the feature Automatically modify the todo list of ! rebase --interactive by annotating commits
  • 44. git commit -m “squash! …" You can prepend commit messages with: git commit -m “fixup! …" git commit -m “reword! …" etc… Rebase task list will be then prepopulated --autosquash
  • 45. CUSTOMARY WARNING! rebase rewrites history! Treat this power with great care. ! Only rewrite history of local branches or…
  • 46. http://travisjeffery.com/b/2012/02/search-a-git-repo- like-a-ninja/! Bonus: greppling like a Ninja
  • 47. git grep is amazing It searches your whole project at blazing speed. Let’s make it more awesomer! git config --global grep.extendRegexp true Turn on extended regular expressions git config --global grep.lineNumber true Include line numbers
  • 48. git grep is amazing And the final touch, pack it in an alias git config --global alias.g ”grep --break --heading —line-number" ! Make it group output like Ack
  • 49. Much more on git atlassian.com/git
  • 50. Nicola Paolucci @durdn Thank you!
  • 51. Q&A
  • 52. Git Repository Management for Enterprise Teams Free Git Code Hosting for Small Teams Free Git Desktop client for Mac or Windows

×