SlideShare a Scribd company logo
photo: https://cdn.pixabay.com/photo/2014/10/01/17/59/
my-little-pony-468916960720.jpg
logs are magic!
john sj anderson | @genehack | lfnw 2017 | 7 may 2017
1 — LFNW 2017 – 7 May 2017 – @genehack
photo: https://cdn.pixabay.com/photo/2014/10/01/17/59/
my-little-pony-468916960720.jpg
why git workflows
& commit structure
should matter to you
john sj anderson | @genehack | lfnw 2017 | 7 may 2017
2 — LFNW 2017 – 7 May 2017 – @genehack
hi, i'm john.
a/k/a @genehack
3 — LFNW 2017 – 7 May 2017 – @genehack
In my day job, I'm the VP of Technology for Infinity, a small
IT consultancy.
vp, tech
infinity
interactive
4 — LFNW 2017 – 7 May 2017 – @genehack
I wanted to give this talk because I love revision control. I've kept my home directory under
revision control for over a decade, I maintain a Perl git wrapper module, and I wrote this thing
called GitGot to automate batch ops across multiple Git repos (but that's a different talk)
i ❤
revision
control5 — LFNW 2017 – 7 May 2017 – @genehack
I liked CVS...
cvs6 — LFNW 2017 – 7 May 2017 – @genehack
I liked SVN a bit more...
svn7 — LFNW 2017 – 7 May 2017 – @genehack
Hell, I even liked RCS
rcs8 — LFNW 2017 – 7 May 2017 – @genehack
Actually, that's a lie -- I don't think
anybody liked RCS.
Anybody here remember RCS?
Anybody still using RCS?
rcs9 — LFNW 2017 – 7 May 2017 – @genehack
And now we have git
git10 — LFNW 2017 – 7 May 2017 – @genehack
I love git. Git makes me happy
i ❤ git
11 — LFNW 2017 – 7 May 2017 – @genehack
How many people have used git at least once?
How many people feel comfortable in git?
How many people would call themselves git
"experts"?
quick
poll!
12 — LFNW 2017 – 7 May 2017 – @genehack
So, if you're not at least a little familiar with git, this talk is probably not going to that
interesting -- most of the stuff I'm going to talk about does apply to all revision control
systems, but my examples and recommendations are all git-based
what this
talk isn't13 — LFNW 2017 – 7 May 2017 – @genehack
I'm also not going to be claiming to dispense any universal
truths in this talk...
nouniversal
truths14 — LFNW 2017 – 7 May 2017 – @genehack
I'm not even going to try to convince you that anything I'm telling you is a "best practice".
Pretty much anything I advocate in here, I'm sure people will be able to come up with an
example where I'd say, "yeah, for that, don't do it"
not even
"best
practices"15 — LFNW 2017 – 7 May 2017 – @genehack
So what is this talk about then?
what this
talk is16 — LFNW 2017 – 7 May 2017 – @genehack
Opinionated commentary on some aspects of using
revision control systems...
some
opinions
17 — LFNW 2017 – 7 May 2017 – @genehack
...based on things I've seen over the past mumble years making
extensive use of revision control on personal, open source, and
commercial software projects
photo modified from http://i2.kym-cdn.com/photos/images/original/
001/044/247/297.png
backed up with
experience
18 — LFNW 2017 – 7 May 2017 – @genehack
Some of this stuff may be more important for larger projects
with multi-person teams ...
maybe more
important for
larger projects
19 — LFNW 2017 – 7 May 2017 – @genehack
...but it's also important if you've just started a project that you're thinking might grow into
something bigger. Having a solid project history from the get-go can make it a lot easier
for contributors to come on board and start pitching in
but also good for projects
that aspire to be
bigger20 — LFNW 2017 – 7 May 2017 – @genehack
maybe more
relevant for
coding projects
21 — LFNW 2017 – 7 May 2017 – @genehack
but also
applicable for
doc or config repos
22 — LFNW 2017 – 7 May 2017 – @genehack
Eventually we're going to talk about how to make better use
of the history in your repos ...
making better
use of history
23 — LFNW 2017 – 7 May 2017 – @genehack
...but first, we're going to talk about ways to make better
history
making
better
history24 — LFNW 2017 – 7 May 2017 – @genehack
For all these things, there are a few common elements
prerequisites
25 — LFNW 2017 – 7 May 2017 – @genehack
For maximum value, you're going to want to apply them
consistently
consistency
26 — LFNW 2017 – 7 May 2017 – @genehack
Make them into habits
habits
27 — LFNW 2017 – 7 May 2017 – @genehack
They're pretty much all the type of thing that if you do them
all the time...
do it all
the time28 — LFNW 2017 – 7 May 2017 – @genehack
...you eventually will just do them without thinking too much
about it
then you
don't have
to think
about it29 — LFNW 2017 – 7 May 2017 – @genehack
or even better, if you're the right kind of twisted...
even
better30 — LFNW 2017 – 7 May 2017 – @genehack
...you'll automate things. for example, i periodically run some scripts to find repos in a
"dirty" state, or that have local commits that haven't been pushed to a remote, and then
clean them up
automate
it
31 — LFNW 2017 – 7 May 2017 – @genehack
so, moving on to how to make better history
how to
make
better
history
32 — LFNW 2017 – 7 May 2017 – @genehack
if you're going to talk about git, you almost have to talk about workflows. potentially one
of the more contentious aspects of starting a new project is deciding what your workflow
is going to be
workflows
33 — LFNW 2017 – 7 May 2017 – @genehack
workflows can range from the very simple -- just a single branch in
a local-only repo, just adding commits onto the HEAD of that branch
photo credit: modified by https://www.flickr.com/photos/appleboy/
5488984566/in/photostream/
no remote
no branches
master only
34 — LFNW 2017 – 7 May 2017 – @genehack
or you can have that basic setup, but with a remote that you push things to every so
often. this is basically the simplest possible branching workflow -- when you have
local commits you haven't pushed to the remote yet, that's (if you squint, a bit) a
branch
photo credit: modified from https://www.flickr.com/photos/appleboy/5488387469/in/
photostream/
local master
no branches
& periodic pushes
35 — LFNW 2017 – 7 May 2017 – @genehack
all the way up to fairly complicated workflows like git
flow, where you have multiple branches in flight at any
given point.
anybody using git flow, or anything equivalent?
photo credit: https://www.flickr.com/photos/appleboy/
5488984404/in/photostream/
git flow
36 — LFNW 2017 – 7 May 2017 – @genehack
some
notable
antipatterns37 — LFNW 2017 – 7 May 2017 – @genehack
squashed
branches
38 — LFNW 2017 – 7 May 2017 – @genehack
fast
forward
merges39 — LFNW 2017 – 7 May 2017 – @genehack
this is basically doing extra work to mimic what a fast
forward merge probably would have done
rebase
before
merge40 — LFNW 2017 – 7 May 2017 – @genehack
all
destroy
history41 — LFNW 2017 – 7 May 2017 – @genehack
all
destroy
history
needlessly
42 — LFNW 2017 – 7 May 2017 – @genehack
a linear
commit
history
is a lie43 — LFNW 2017 – 7 May 2017 – @genehack
a linear
commit
history
is a lie
(probably)
44 — LFNW 2017 – 7 May 2017 – @genehack
instead
45 — LFNW 2017 – 7 May 2017 – @genehack
some good
patterns46 — LFNW 2017 – 7 May 2017 – @genehack
branch
47 — LFNW 2017 – 7 May 2017 – @genehack
branch
for
errythang48 — LFNW 2017 – 7 May 2017 – @genehack
(specifics
will vary)49 — LFNW 2017 – 7 May 2017 – @genehack
have a
release
branch50 — LFNW 2017 – 7 May 2017 – @genehack
release may be master
release may be another branch
51 — LFNW 2017 – 7 May 2017 – @genehack
(again,
specifics
will vary)
52 — LFNW 2017 – 7 May 2017 – @genehack
merging to
the release
branch is
a release53 — LFNW 2017 – 7 May 2017 – @genehack
(ideally,
automatically)
54 — LFNW 2017 – 7 May 2017 – @genehack
make all
merges
non-FF55 — LFNW 2017 – 7 May 2017 – @genehack
an aside
56 — LFNW 2017 – 7 May 2017 – @genehack
~/.gitconfig
57 — LFNW 2017 – 7 May 2017 – @genehack
git config --global merge.ff false
git config --global pull.ff only
58 — LFNW 2017 – 7 May 2017 – @genehack
[merge]
ff = false
[pull]
ff = only
59 — LFNW 2017 – 7 May 2017 – @genehack
maximal
historical
information60 — LFNW 2017 – 7 May 2017 – @genehack
keep it
clean61 — LFNW 2017 – 7 May 2017 – @genehack
~/.gitconfig
aliases
62 — LFNW 2017 – 7 May 2017 – @genehack
[alias]
br = branch
ci = commit -v
co = checkout
st = status
63 — LFNW 2017 – 7 May 2017 – @genehack
clean up
remote
branches
64 — LFNW 2017 – 7 May 2017 – @genehack
git push origin --delete <branch>
65 — LFNW 2017 – 7 May 2017 – @genehack
nuke = push origin --delete
66 — LFNW 2017 – 7 May 2017 – @genehack
clean up
orphaned
remote-tracking
branches67 — LFNW 2017 – 7 May 2017 – @genehack
git remote prune origin
68 — LFNW 2017 – 7 May 2017 – @genehack
prune = remote prune origin
69 — LFNW 2017 – 7 May 2017 – @genehack
find
unmerged
branches
70 — LFNW 2017 – 7 May 2017 – @genehack
git branch --no-merged master
71 — LFNW 2017 – 7 May 2017 – @genehack
git branch --no-merged --remote master
72 — LFNW 2017 – 7 May 2017 – @genehack
unmerged = branch --no-merged
unmerged-remote = branch --no-merged --remote
73 — LFNW 2017 – 7 May 2017 – @genehack
keep it
clean74 — LFNW 2017 – 7 May 2017 – @genehack
one final
note on
branches75 — LFNW 2017 – 7 May 2017 – @genehack
branch
names76 — LFNW 2017 – 7 May 2017 – @genehack
a branch
equals
a ticket77 — LFNW 2017 – 7 May 2017 – @genehack
the ticket id
should be in
the branch name
78 — LFNW 2017 – 7 May 2017 – @genehack
along with
something
for the
humans79 — LFNW 2017 – 7 May 2017 – @genehack
put the number
at the end of
the branch name
80 — LFNW 2017 – 7 May 2017 – @genehack
good:
fix-login-864
81 — LFNW 2017 – 7 May 2017 – @genehack
meh:
fix-864
82 — LFNW 2017 – 7 May 2017 – @genehack
bad:
864-crap
83 — LFNW 2017 – 7 May 2017 – @genehack
!!!:
foobar
84 — LFNW 2017 – 7 May 2017 – @genehack
just.
don't.
85 — LFNW 2017 – 7 May 2017 – @genehack
when merging
include the
branch name86 — LFNW 2017 – 7 May 2017 – @genehack
default message
works nicely
87 — LFNW 2017 – 7 May 2017 – @genehack
Merge branch <name>
88 — LFNW 2017 – 7 May 2017 – @genehack
maximal
historical
information89 — LFNW 2017 – 7 May 2017 – @genehack
to review
90 — LFNW 2017 – 7 May 2017 – @genehack
don't squash
91 — LFNW 2017 – 7 May 2017 – @genehack
don't fast forward
92 — LFNW 2017 – 7 May 2017 – @genehack
don't rebase before merge
93 — LFNW 2017 – 7 May 2017 – @genehack
don't destroy your history
94 — LFNW 2017 – 7 May 2017 – @genehack
use branches
95 — LFNW 2017 – 7 May 2017 – @genehack
use a release branch
96 — LFNW 2017 – 7 May 2017 – @genehack
use no-ff to make merge commits
97 — LFNW 2017 – 7 May 2017 – @genehack
keep your repo clean
98 — LFNW 2017 – 7 May 2017 – @genehack
let's get
more
granular
99 — LFNW 2017 – 7 May 2017 – @genehack
structuring
individual
commits100 — LFNW 2017 – 7 May 2017 – @genehack
a commit
equals
one "change"101 — LFNW 2017 – 7 May 2017 – @genehack
important:
at each commit
the software
must work102 — LFNW 2017 – 7 May 2017 – @genehack
git bisect
103 — LFNW 2017 – 7 May 2017 – @genehack
smaller >> bigger
104 — LFNW 2017 – 7 May 2017 – @genehack
whitespace
& formatting
105 — LFNW 2017 – 7 May 2017 – @genehack
always
go in
distinct commits106 — LFNW 2017 – 7 May 2017 – @genehack
remember!
107 — LFNW 2017 – 7 May 2017 – @genehack
revision
is also a
thing108 — LFNW 2017 – 7 May 2017 – @genehack
what you
eventually
push109 — LFNW 2017 – 7 May 2017 – @genehack
!=110 — LFNW 2017 – 7 May 2017 – @genehack
your
commits
while
working
111 — LFNW 2017 – 7 May 2017 – @genehack
develop a habit of using checkpoint commits instead of the
stash
savepoints
112 — LFNW 2017 – 7 May 2017 – @genehack
every
working
micro
step
113 — LFNW 2017 – 7 May 2017 – @genehack
single "change"
10-15 commits
114 — LFNW 2017 – 7 May 2017 – @genehack
git add --patch
115 — LFNW 2017 – 7 May 2017 – @genehack
git add -p
116 — LFNW 2017 – 7 May 2017 – @genehack
editor
support117 — LFNW 2017 – 7 May 2017 – @genehack
magit
fugitive118 — LFNW 2017 – 7 May 2017 – @genehack
magit
119 — LFNW 2017 – 7 May 2017 – @genehack
don't push
first drafts
120 — LFNW 2017 – 7 May 2017 – @genehack
tell a
story
121 — LFNW 2017 – 7 May 2017 – @genehack
git rebase -i
122 — LFNW 2017 – 7 May 2017 – @genehack
may be useful
to preserve
dead ends123 — LFNW 2017 – 7 May 2017 – @genehack
photo credit https://pbs.twimg.com/media/
CPlr0tQWcAAZPjf.jpg
...as a
warning
for others
124 — LFNW 2017 – 7 May 2017 – @genehack
commit
messages125 — LFNW 2017 – 7 May 2017 – @genehack
ticket
numbers
in the subject
126 — LFNW 2017 – 7 May 2017 – @genehack
(at the end)
127 — LFNW 2017 – 7 May 2017 – @genehack
you can customize
the template for
the commit message
128 — LFNW 2017 – 7 May 2017 – @genehack
if you get to this point, you're also going to want to script
the repo setup process
git config --local commit.template ./.template
# edit .template to add whatever you want...
129 — LFNW 2017 – 7 May 2017 – @genehack
examples
130 — LFNW 2017 – 7 May 2017 – @genehack
good:
make login form use POST instead of GET [#864]
131 — LFNW 2017 – 7 May 2017 – @genehack
meh:
fixed form [#864]
132 — LFNW 2017 – 7 May 2017 – @genehack
bad:
#846 fix
133 — LFNW 2017 – 7 May 2017 – @genehack
!!!:
foo
134 — LFNW 2017 – 7 May 2017 – @genehack
( °□°
135 — LFNW 2017 – 7 May 2017 – @genehack
this
is why
daddy drinks
136 — LFNW 2017 – 7 May 2017 – @genehack
to review
137 — LFNW 2017 – 7 May 2017 – @genehack
1 commit == 1 change
138 — LFNW 2017 – 7 May 2017 – @genehack
photo credit https://imgs.xkcd.com/comics/git_commit.png
and https://xkcd.com/1296/
commit
messages
matter!
139 — LFNW 2017 – 7 May 2017 – @genehack
when in doubt make it
smaller
140 — LFNW 2017 – 7 May 2017 – @genehack
segregate
formatting
changes141 — LFNW 2017 – 7 May 2017 – @genehack
use
checkpoint
commits
as savepoints
142 — LFNW 2017 – 7 May 2017 – @genehack
don't push
first drafts
143 — LFNW 2017 – 7 May 2017 – @genehack
revise to
tell a
story144 — LFNW 2017 – 7 May 2017 – @genehack
or at least make yourself look
smart145 — LFNW 2017 – 7 May 2017 – @genehack
using
history
better146 — LFNW 2017 – 7 May 2017 – @genehack
jfri147 — LFNW 2017 – 7 May 2017 – @genehack
just
friggin'
read
it148 — LFNW 2017 – 7 May 2017 – @genehack
~/.gitconfig
(again)
149 — LFNW 2017 – 7 May 2017 – @genehack
color
support150 — LFNW 2017 – 7 May 2017 – @genehack
[color]
branch = auto
diff = auto
grep = auto
interactive = auto
showbranch = auto
status = auto
ui = auto
151 — LFNW 2017 – 7 May 2017 – @genehack
[color "status"]
added = green bold
changed = red bold
untracked = cyan bold
152 — LFNW 2017 – 7 May 2017 – @genehack
git blame
153 — LFNW 2017 – 7 May 2017 – @genehack
git blame -w -M
154 — LFNW 2017 – 7 May 2017 – @genehack
[alias]
praise = blame
155 — LFNW 2017 – 7 May 2017 – @genehack
editorintegration156 — LFNW 2017 – 7 May 2017 – @genehack
git blame -L <line>,<line> <file>
git log -L <line>,<line>:<file>
157 — LFNW 2017 – 7 May 2017 – @genehack
git blame -L 1,1 index.html
158 — LFNW 2017 – 7 May 2017 – @genehack
git blame -L 10,50 index.html
159 — LFNW 2017 – 7 May 2017 – @genehack
git blame -L 20,+10 index.html
160 — LFNW 2017 – 7 May 2017 – @genehack
git log -L 1,1:index.html
161 — LFNW 2017 – 7 May 2017 – @genehack
git log -L 10,50:index.html
162 — LFNW 2017 – 7 May 2017 – @genehack
git log -L 20,+10:index.html
163 — LFNW 2017 – 7 May 2017 – @genehack
git log -S <string>
164 — LFNW 2017 – 7 May 2017 – @genehack
git log --follow
165 — LFNW 2017 – 7 May 2017 – @genehack
git lg
166 — LFNW 2017 – 7 May 2017 – @genehack
log --graph --abbrev-commit --date=relative --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'
167 — LFNW 2017 – 7 May 2017 – @genehack
168 — LFNW 2017 – 7 May 2017 – @genehack
--graph
169 — LFNW 2017 – 7 May 2017 – @genehack
--abbrev-commit
170 — LFNW 2017 – 7 May 2017 – @genehack
--date=relative
171 — LFNW 2017 – 7 May 2017 – @genehack
SHA in red,
branch name (if any) in yellow,
commit subject,
date,
author
`--pretty=format:
'%Cred%h%Creset
-%C(yellow)%d%Creset
%s
%Cgreen(%cr)
%C(bold blue)<%an>%Creset'`
172 — LFNW 2017 – 7 May 2017 – @genehack
173 — LFNW 2017 – 7 May 2017 – @genehack
takeaways!
174 — LFNW 2017 – 7 May 2017 – @genehack
history
is
important175 — LFNW 2017 – 7 May 2017 – @genehack
it's probably
worth more
of your time176 — LFNW 2017 – 7 May 2017 – @genehack
both
creating it
and
using it
177 — LFNW 2017 – 7 May 2017 – @genehack
don't just stop
when the
software
works178 — LFNW 2017 – 7 May 2017 – @genehack
software
development
is hard179 — LFNW 2017 – 7 May 2017 – @genehack
be kind
to others180 — LFNW 2017 – 7 May 2017 – @genehack
be kind
to your
future
self181 — LFNW 2017 – 7 May 2017 – @genehack
thanks!
lfnw organizers &
volunteers
linus & others for git
YOU!
182 — LFNW 2017 – 7 May 2017 – @genehack
183 — LFNW 2017 – 7 May 2017 – @genehack
questions?
(ps: please fill out the talk eval form!)
184 — LFNW 2017 – 7 May 2017 – @genehack

More Related Content

PDF
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
PDF
#speakerlife
PDF
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
PDF
Logs Are Magic! Why git workflows & commit structure should matter to you
PDF
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
PPTX
Git One Day Training Notes
PDF
Getting Git Right
PDF
Logs are-magic-devfestweekend2018
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
#speakerlife
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
Logs Are Magic! Why git workflows & commit structure should matter to you
Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You
Git One Day Training Notes
Getting Git Right
Logs are-magic-devfestweekend2018

Similar to Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You (20)

PDF
Introduction to Git (even for non-developers!)
PDF
Git essentials
PDF
Vincit Teatime 2015.2 - Otto Kekäläinen: Don't be a git
PPTX
MakingGitWorkForYou
PPTX
PPTX
PDF
Git best practices workshop
PPTX
Git Repository for Developers working in Various Locations
PPT
PPTX
Git_new.pptx
PPT
Fundamentals and basics of Git and commands
PDF
PDF
Git collaboration
PDF
Advanced Git Tutorial
PDF
Improving your workflow with git
PPT
KEY
Use git the proper way
ODP
How to use git without rage
PDF
Git the Docs: A fun, hands-on introduction to version control
PDF
Git intermediate workshop slides v1.4
Introduction to Git (even for non-developers!)
Git essentials
Vincit Teatime 2015.2 - Otto Kekäläinen: Don't be a git
MakingGitWorkForYou
Git best practices workshop
Git Repository for Developers working in Various Locations
Git_new.pptx
Fundamentals and basics of Git and commands
Git collaboration
Advanced Git Tutorial
Improving your workflow with git
Use git the proper way
How to use git without rage
Git the Docs: A fun, hands-on introduction to version control
Git intermediate workshop slides v1.4
Ad

More from John Anderson (20)

PDF
#speakerlife
PDF
Introduction to Git (even for non-developers)
PDF
A static site generator should be your next language learning project
PDF
Do you want to be right or do you want to WIN?
PDF
An Introduction to Git (even for non-developers)
PDF
You got chocolate in my peanut butter! .NET on Mac & Linux
PDF
A static site generator should be your next language learning project
PDF
Old Dogs & New Tricks: What's New with Perl5 This Century
PDF
Introduction to Git for Non-Developers
PDF
A Modest Introduction To Swift
PDF
A static site generator should be your next language learning project
PDF
JSON Web Tokens Will Improve Your Life
PDF
Old Dogs & New Tricks: What's New With Perl5 This Century
PDF
A Modest Introduction to Swift
PDF
Friends Don't Let Friends Browse Unencrypted: Running a VPN for friends and f...
PDF
A Modest Introduction To Swift
PDF
JSON Web Tokens Will Improve Your Life
PDF
JSON Web Tokens Will Improve Your Life
PDF
JSON Web Tokens Will Improve Your Life
PDF
Automate Yo'self -- SeaGL
#speakerlife
Introduction to Git (even for non-developers)
A static site generator should be your next language learning project
Do you want to be right or do you want to WIN?
An Introduction to Git (even for non-developers)
You got chocolate in my peanut butter! .NET on Mac & Linux
A static site generator should be your next language learning project
Old Dogs & New Tricks: What's New with Perl5 This Century
Introduction to Git for Non-Developers
A Modest Introduction To Swift
A static site generator should be your next language learning project
JSON Web Tokens Will Improve Your Life
Old Dogs & New Tricks: What's New With Perl5 This Century
A Modest Introduction to Swift
Friends Don't Let Friends Browse Unencrypted: Running a VPN for friends and f...
A Modest Introduction To Swift
JSON Web Tokens Will Improve Your Life
JSON Web Tokens Will Improve Your Life
JSON Web Tokens Will Improve Your Life
Automate Yo'self -- SeaGL
Ad

Recently uploaded (20)

PDF
Tenda Login Guide: Access Your Router in 5 Easy Steps
PDF
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
PPTX
Internet___Basics___Styled_ presentation
PPTX
international classification of diseases ICD-10 review PPT.pptx
PPTX
Power Point - Lesson 3_2.pptx grad school presentation
PPTX
innovation process that make everything different.pptx
PPTX
introduction about ICD -10 & ICD-11 ppt.pptx
PPTX
PptxGenJS_Demo_Chart_20250317130215833.pptx
PPT
isotopes_sddsadsaadasdasdasdasdsa1213.ppt
PPTX
Introduction about ICD -10 and ICD11 on 5.8.25.pptx
PDF
Decoding a Decade: 10 Years of Applied CTI Discipline
PPT
tcp ip networks nd ip layering assotred slides
PPTX
Job_Card_System_Styled_lorem_ipsum_.pptx
PDF
Unit-1 introduction to cyber security discuss about how to secure a system
PDF
How to Ensure Data Integrity During Shopify Migration_ Best Practices for Sec...
PPTX
E -tech empowerment technologies PowerPoint
PDF
Slides PDF The World Game (s) Eco Economic Epochs.pdf
PPTX
presentation_pfe-universite-molay-seltan.pptx
PPT
Design_with_Watersergyerge45hrbgre4top (1).ppt
PDF
An introduction to the IFRS (ISSB) Stndards.pdf
Tenda Login Guide: Access Your Router in 5 Easy Steps
Automated vs Manual WooCommerce to Shopify Migration_ Pros & Cons.pdf
Internet___Basics___Styled_ presentation
international classification of diseases ICD-10 review PPT.pptx
Power Point - Lesson 3_2.pptx grad school presentation
innovation process that make everything different.pptx
introduction about ICD -10 & ICD-11 ppt.pptx
PptxGenJS_Demo_Chart_20250317130215833.pptx
isotopes_sddsadsaadasdasdasdasdsa1213.ppt
Introduction about ICD -10 and ICD11 on 5.8.25.pptx
Decoding a Decade: 10 Years of Applied CTI Discipline
tcp ip networks nd ip layering assotred slides
Job_Card_System_Styled_lorem_ipsum_.pptx
Unit-1 introduction to cyber security discuss about how to secure a system
How to Ensure Data Integrity During Shopify Migration_ Best Practices for Sec...
E -tech empowerment technologies PowerPoint
Slides PDF The World Game (s) Eco Economic Epochs.pdf
presentation_pfe-universite-molay-seltan.pptx
Design_with_Watersergyerge45hrbgre4top (1).ppt
An introduction to the IFRS (ISSB) Stndards.pdf

Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You