Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Ninja
master
Nicola Paolucci!
Developer Advocate / Evangelist
with!
Save your
pirateninjazombie
Nicola Paolucci
@durdn
Bio pictures: the subtle pleasure of
embarrassing yourself in front of
hundreds of people
Lock your master’s fortress
1
2
Dear Ninja apprentice, here
you’ll learn:
Powers of invisibility
Solve conflicts with power...
1.Powers of invisibility
© http://www.amigosdosbichos.org/
1.Powers of invisibility
© http://www.amigosdosbichos.org/
Hide files from
git update-index 
--assume-unchanged
very useful with git-svn
Different than .gitignore, it hides commited ...
Hide files from
git update-index 
--no-assume-unchanged
Revert it with:
remember to add --no
List assumed unchanged files
git ls-files -v | grep ^h
Useful as alias (see alias list later)
Hide files in raw objects
actually writes into the object db
git hash-object -w <file>
CUSTOMARY
WARNING!
if you get in trouble, don’t
come to me :D
Treat this power with great care. !
And if you’re unsure, pl...
Delete branch or commits
and retrieve it later
git branch -D <branch>
git reset --hard HEAD~20
What is the reflog?
It’s a log of all the
places where your
HEAD has been
garbage collected
every
90 days
Recollect your goods
$ git reflog
!
00af1b3 HEAD@{2}: reset: moving to refexp
da5b154 HEAD@{3}: rebase finished: returning...
Don’t expire the reflog
[gc "refs/remotes/*"]
reflogExpire = never
reflogExpireUnreachable = never
If you hide stuff in obj...
If some traitor deleted files
git log -1 -- [path]
lists where a file was deleted
git log --diff-filter=D --summary
lists al...
2. Lock your master’s fortress
Always a balancing act
Security DevSpeed
Lock down your repo
# no rewriting history
denyNonFastForwards = true
!
# no deleting history
denyDeletes = true
!
# check...
Reject force push, Luke
atlss.in/update-paranoid
Git project has already an update
hook ‘update-paranoid’ that is
designed...
Reject force push, Luke
Impersonating Authors is easy
with .
$ git commit -m "I'm Luke"
$ git commit --author "Elvis <elvis@graceland.net>" 
-m "I...
Harden up by signing things
Sample gpg commands to get you started:
gpg --gen-key
Generate your GPG keys
gpg -k
List your ...
Store your signature in
Simple! Add a tag referencing your public key
gpg -a --export <keyid> | 
git hash-object -w --stdi...
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>
Ver...
git cat-file -p tims-key | gpg --import
Import a GPG key from a tag
Import other public keys
Always a balancing act
Security DevSpeed
3. Solve conflicts with power blows
A word on terminology
Current checked out
branch
!
!
!--ours
What do ours and theirs mean when
solving conflicts?
Any merge...
Basics for easy
conflict resolution
The common commands are:
$ git checkout --ours/--theirs <file>
Check back out our own/t...
Aliases for easy
conflict resolution
[alias]
ours = "!f() { 
git checkout --ours $@ && git add $@;
}; f”
!
theirs = ...
Add...
Where do I get that awesome alias?
atlss.in/git-aliases
rerere resolve!
Reuse Recorded Resolution will help you
when dealing with repetitive and similar merge
conflicts.
$ git con...
Sample output rerere
$ git add hello.rb
$ git commit
Recorded resolution for 'hello.rb'.
[master 68e16e5] Merge branch 'i1...
4. Cover your trackshttps://www.youtube.com/watch?v=D22gbXIx-CE
MASTER
FEATURE
What is a rebase?
It’s a way to replay commits, one by one,
on top of a branch
MASTER
FEATURE
What is a rebase?
It’s a way to replay commits, one by one,
on top of a branch
MASTER
FEATURE
What is a rebase?
It’s a way to replay commits, one by one,
on top of a branch
MASTER
FEATURE
What is a rebase?
It’s a way to replay commits, one by one,
on top of a branch
Don’t use!
Correct way to use rebase to update
a feature branch
What is a rebase?
MASTER
FEATURE
Correct way to use rebase to update
a feature branch
What is a rebase?
MASTER
FEATURE
What is a --interactive rebase?
PICK!
SQUASH
REWORD!
FIXUP
EDIT !
EXEC
It’s a way to replay commits, one by one,
deciding ...
--autosquash
$ git config --global rebase.autosquash true
Turns on the feature
Automatically modify the todo list of !
reb...
git commit -m “squash! …"
You can prepend commit messages with:
git commit -m “fixup! …"
git commit -m “reword! …"
etc…
Re...
CUSTOMARY
WARNING!
rebase rewrites history!
Treat this power with great care. !
Only rewrite history of local branches or…
http://travisjeffery.com/b/2012/02/search-a-git-repo-
like-a-ninja/!
Bonus: greppling like a Ninja
git grep is amazing
It searches your whole project at blazing speed.
Let’s make it more awesomer!
git config --global grep...
git grep is amazing
And the final touch, pack it in an alias
git config --global alias.g 
”grep --break --heading —line-num...
Much more on git
atlassian.com/git
Nicola Paolucci
@durdn
Thank you!
Q&A
Git Repository Management for Enterprise Teams
Free Git Code Hosting for Small Teams
Free Git Desktop client for Mac or Wi...
Ninja Git: Save Your Master
Upcoming SlideShare
Loading in …5
×

Ninja Git: Save Your Master

976 views

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 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
  • Be the first to comment

Ninja Git: Save Your Master

  1. 1. Ninja master Nicola Paolucci! Developer Advocate / Evangelist with! Save your
  2. 2. pirateninjazombie
  3. 3. Nicola Paolucci @durdn Bio pictures: the subtle pleasure of embarrassing yourself in front of hundreds of people
  4. 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. 5. 1.Powers of invisibility © http://www.amigosdosbichos.org/
  6. 6. 1.Powers of invisibility © http://www.amigosdosbichos.org/
  7. 7. Hide files from git update-index --assume-unchanged very useful with git-svn Different than .gitignore, it hides commited files
  8. 8. Hide files from git update-index --no-assume-unchanged Revert it with: remember to add --no
  9. 9. List assumed unchanged files git ls-files -v | grep ^h Useful as alias (see alias list later)
  10. 10. Hide files in raw objects actually writes into the object db git hash-object -w <file>
  11. 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. 12. Delete branch or commits and retrieve it later git branch -D <branch> git reset --hard HEAD~20
  13. 13. What is the reflog? It’s a log of all the places where your HEAD has been garbage collected every 90 days
  14. 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. 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. 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. 17. 2. Lock your master’s fortress
  18. 18. Always a balancing act Security DevSpeed
  19. 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. 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. 21. Reject force push, Luke
  22. 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. 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. 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. 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. 26. git cat-file -p tims-key | gpg --import Import a GPG key from a tag Import other public keys
  27. 27. Always a balancing act Security DevSpeed
  28. 28. 3. Solve conflicts with power blows
  29. 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. 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. 31. Aliases for easy conflict resolution [alias] ours = "!f() { git checkout --ours $@ && git add $@; }; f” ! theirs = ... Add these to .gitconfig
  32. 32. Where do I get that awesome alias? atlss.in/git-aliases
  33. 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. 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. 35. 4. Cover your trackshttps://www.youtube.com/watch?v=D22gbXIx-CE
  36. 36. MASTER FEATURE What is a rebase? It’s a way to replay commits, one by one, on top of a branch
  37. 37. MASTER FEATURE What is a rebase? It’s a way to replay commits, one by one, on top of a branch
  38. 38. MASTER FEATURE What is a rebase? It’s a way to replay commits, one by one, on top of a branch
  39. 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. 40. Correct way to use rebase to update a feature branch What is a rebase? MASTER FEATURE
  41. 41. Correct way to use rebase to update a feature branch What is a rebase? MASTER FEATURE
  42. 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. 43. --autosquash $ git config --global rebase.autosquash true Turns on the feature Automatically modify the todo list of ! rebase --interactive by annotating commits
  44. 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. 45. CUSTOMARY WARNING! rebase rewrites history! Treat this power with great care. ! Only rewrite history of local branches or…
  46. 46. http://travisjeffery.com/b/2012/02/search-a-git-repo- like-a-ninja/! Bonus: greppling like a Ninja
  47. 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. 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. 49. Much more on git atlassian.com/git
  50. 50. Nicola Paolucci @durdn Thank you!
  51. 51. Q&A
  52. 52. Git Repository Management for Enterprise Teams Free Git Code Hosting for Small Teams Free Git Desktop client for Mac or Windows

×