Working with Git – a simple introduction for those used to working with a VCS like Subversion. Explains concepts and shows examples. Feel free to steal slides for your own purposes.
Diapositivas de la charla dada por la gente de uno21.com.ar (@luke_ar y @matitanio) en la UP, el día 21/08/2012. Próximamente en otras universidades :)
Diapositivas de la charla dada por la gente de uno21.com.ar (@luke_ar y @matitanio) en la UP, el día 21/08/2012. Próximamente en otras universidades :)
Excerpt from slides used in undergraduate software engineering lectures.
Our favorite git tricks, git commands and utilities that make working with git easier.
Updated June 2015.
Nicola Iarocci - Git stories from the front line - Codemotion Milan 2017Codemotion
In the years spent on the front line managing open source projects and applications developed by distributed teams, I've managed to gather quite a few Git stories from the trenches. In this practically oriented talk, I will share some patterns and practices I have collected while on the front. We will first go through some useful git aliases, then touch on topics such as the various git branching models, long-running branches, conflict management, the rewriting of project history, etcetera. Oh and yes, the (in)famous Git rebase will be covered too.
A Beginner's Guide to Git and GitHub, CLI version.
What is Git?
What is Github
Basic commands
Difference between Central and Distributed Version Controlling System
Short talk about Git best practices I held during a Lunch&Learn in our Milan office @Gild.
The session was interactive with lots of examples.
AGENDA:
- Using aliases for git commands
- Stats: my most used commands
- Useful list of git aliases
- Work scenarios
The Information Technology have led us into an era where the production, sharing and use of information are now part of everyday life and of which we are often unaware actors almost: it is now almost inevitable not leave a digital trail of many of the actions we do every day; for example, by digital content such as photos, videos, blog posts and everything that revolves around the social networks (Facebook and Twitter in particular). Added to this is that with the "internet of things", we see an increase in devices such as watches, bracelets, thermostats and many other items that are able to connect to the network and therefore generate large data streams. This explosion of data justifies the birth, in the world of the term Big Data: it indicates the data produced in large quantities, with remarkable speed and in different formats, which requires processing technologies and resources that go far beyond the conventional systems management and storage of data. It is immediately clear that, 1) models of data storage based on the relational model, and 2) processing systems based on stored procedures and computations on grids are not applicable in these contexts. As regards the point 1, the RDBMS, widely used for a great variety of applications, have some problems when the amount of data grows beyond certain limits. The scalability and cost of implementation are only a part of the disadvantages: very often, in fact, when there is opposite to the management of big data, also the variability, or the lack of a fixed structure, represents a significant problem. This has given a boost to the development of the NoSQL database. The website NoSQL Databases defines NoSQL databases such as "Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open source and horizontally scalable." These databases are: distributed, open source, scalable horizontally, without a predetermined pattern (key-value, column-oriented, document-based and graph-based), easily replicable, devoid of the ACID and can handle large amounts of data. These databases are integrated or integrated with processing tools based on the MapReduce paradigm proposed by Google in 2009. MapReduce with the open source Hadoop framework represent the new model for distributed processing of large amounts of data that goes to supplant techniques based on stored procedures and computational grids (step 2). The relational model taught courses in basic database design, has many limitations compared to the demands posed by new applications based on Big Data and NoSQL databases that use to store data and MapReduce to process large amounts of data.
Course Website http://pbdmng.datatoknowledge.it/
Contact me to download the slides
There's an old joke that goes, “The two hardest things in programming are cache invalidation, naming things, and off-by-one errors.” In this talk, we'll discuss the subtle art of naming things – a practice we do every day but rarely talk about.
There's an old joke that goes, “The two hardest things in programming are cache invalidation, naming things, and off-by-one errors.” In this talk, we'll discuss the subtle art of naming things – a practice we do every day but rarely talk about.
A small project building a temperature sensor with a Raspberry Pi and a DS18B20 temperature probe.
A hole is drilled in the top of the fermenter (not shown here) and the probe is fed through and made airtight. The data is reported at http://petenicholls.com/brewing/
An introduction to Erlang, with an angle for Rubyists.
Talk given at Christchurch Ruby in New Zealand on 20 June, 2013.
Title page: Lavanderia (Sturdy)
Body: Avenir (Black)
Code: Monaco (Regular)
Feel free to use the slides for anything you need. Please contact me if you would like the original Keynote files.
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
Generating a custom Ruby SDK for your web service or Rails API using Smithyg2nightmarescribd
Have you ever wanted a Ruby client API to communicate with your web service? Smithy is a protocol-agnostic language for defining services and SDKs. Smithy Ruby is an implementation of Smithy that generates a Ruby SDK using a Smithy model. In this talk, we will explore Smithy and Smithy Ruby to learn how to generate custom feature-rich SDKs that can communicate with any web service, such as a Rails JSON API.
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
Essentials of Automations: Optimizing FME Workflows with ParametersSafe Software
Are you looking to streamline your workflows and boost your projects’ efficiency? Do you find yourself searching for ways to add flexibility and control over your FME workflows? If so, you’re in the right place.
Join us for an insightful dive into the world of FME parameters, a critical element in optimizing workflow efficiency. This webinar marks the beginning of our three-part “Essentials of Automation” series. This first webinar is designed to equip you with the knowledge and skills to utilize parameters effectively: enhancing the flexibility, maintainability, and user control of your FME projects.
Here’s what you’ll gain:
- Essentials of FME Parameters: Understand the pivotal role of parameters, including Reader/Writer, Transformer, User, and FME Flow categories. Discover how they are the key to unlocking automation and optimization within your workflows.
- Practical Applications in FME Form: Delve into key user parameter types including choice, connections, and file URLs. Allow users to control how a workflow runs, making your workflows more reusable. Learn to import values and deliver the best user experience for your workflows while enhancing accuracy.
- Optimization Strategies in FME Flow: Explore the creation and strategic deployment of parameters in FME Flow, including the use of deployment and geometry parameters, to maximize workflow efficiency.
- Pro Tips for Success: Gain insights on parameterizing connections and leveraging new features like Conditional Visibility for clarity and simplicity.
We’ll wrap up with a glimpse into future webinars, followed by a Q&A session to address your specific questions surrounding this topic.
Don’t miss this opportunity to elevate your FME expertise and drive your projects to new heights of efficiency.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
Keynote at DIGIT West Expo, Glasgow on 29 May 2024.
Cheryl Hung, ochery.com
Sr Director, Infrastructure Ecosystem, Arm.
The key trends across hardware, cloud and open-source; exploring how these areas are likely to mature and develop over the short and long-term, and then considering how organisations can position themselves to adapt and thrive.
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
18. EVERYTHING IS LOCAL
Everything is stored in a “.git” directory at the root of your
project
Commits are local
Branches are local
You don’t check out the latest revision – you clone the
whole repository
19. Pros Cons
Work offline
Carry your repository on a
flash drive
Work on experimental
branches without cluttering
A big repository means a large
up other people’s repositories
initial download
Share when you’re ready
No more waiting in line
Easy to set up, no server to
run
30. Working Copy Staging Area Commit
(Your Project) (Preparing the commit)
31. Working Copy Staging Area Commit
(Your Project) (Preparing the commit)
32. Working Copy Staging Area Commit
(Your Project) (Preparing the commit)
git add
33. Working Copy Staging Area Commit
(Your Project) (Preparing the commit)
git add
34. Working Copy Staging Area Commit
(Your Project) (Preparing the commit)
35. Working Copy Staging Area Commit
(Your Project) (Preparing the commit)
git commit
36. Working Copy Staging Area Commit
(Your Project) (Preparing the commit)
git commit
37. Working Copy Staging Area Commit
(Your Project) (Preparing the commit)
git commit
38. Working Copy Staging Area Commit
(Your Project) (Preparing the commit)
39. Chapter I
Genesis
In the beginning was the word, and
the word was Bob, who accepted all
forms of credit card, yea, even
Discover.
# Saved ‘chapter1.txt’
40. $ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to
include in what will be committed)
#
# chapter1.txt
41. $ git add chapter1.txt
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..."
to unstage)
#
# new file: chapter1.txt
#
42. $ git commit -m “Added the first
chapter.”
[master (root-commit) 8621aee] Added
the first chapter.
1 files changed, 1 insertions(+), 0
deletions(-)
create mode 100644 chapter1.txt
43. $ git log
commit f9ac73d56d3852d1878a4d8a2309ecfda4472e84
Author: Pete Nicholls <pete@metanation.com>
Date: Sat Apr 9 16:31:28 2011 +1200
Added delimiter to points.
diff --git a/app/helpers/application_helper.rb b/app/helpers/
application_helper.rb
index 37d4a59..c442368 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -41,7 +41,7 @@ module ApplicationHelper
end
def plain_points(points)
- "#{points} points"
+ "#{number_with_delimiter points} points"
end
def link_to_with_count(text, link = nil, count = 0, options = {})
44. $ git log
commit f9ac73d56d3852d1878a4d8a2309ecfda4472e84
Author: Pete Nicholls <pete@metanation.com>
Date: Sat Apr 9 16:31:28 2011 +1200
Added delimiter to points.
diff --git a/app/helpers/application_helper.rb b/app/helpers/
application_helper.rb
index 37d4a59..c442368 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -41,7 +41,7 @@ module ApplicationHelper
end
def plain_points(points)
- "#{points} points"
+ "#{number_with_delimiter points} points"
end
def link_to_with_count(text, link = nil, count = 0, options = {})
45. $ git log
commit f9ac73d56d3852d1878a4d8a2309ecfda4472e84
Author: Pete Nicholls <pete@metanation.com>
Date: Sat Apr 9 16:31:28 2011 +1200
Added delimiter to points.
diff --git a/app/helpers/application_helper.rb b/app/helpers/
application_helper.rb
index 37d4a59..c442368 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -41,7 +41,7 @@ module ApplicationHelper
end
def plain_points(points)
- "#{points} points"
+ "#{number_with_delimiter points} points"
end
def link_to_with_count(text, link = nil, count = 0, options = {})
46. $ git log
commit f9ac73d56d3852d1878a4d8a2309ecfda4472e84
Author: Pete Nicholls <pete@metanation.com>
Date: Sat Apr 9 16:31:28 2011 +1200
Added delimiter to points.
diff --git a/app/helpers/application_helper.rb b/app/helpers/
application_helper.rb
index 37d4a59..c442368 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -41,7 +41,7 @@ module ApplicationHelper
end
def plain_points(points)
- "#{points} points"
+ "#{number_with_delimiter points} points"
end
def link_to_with_count(text, link = nil, count = 0, options = {})
47. $ git log
commit f9ac73d56d3852d1878a4d8a2309ecfda4472e84
Author: Pete Nicholls <pete@metanation.com>
Date: Sat Apr 9 16:31:28 2011 +1200
Added delimiter to points.
diff --git a/app/helpers/application_helper.rb b/app/helpers/
application_helper.rb
index 37d4a59..c442368 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -41,7 +41,7 @@ module ApplicationHelper
end
def plain_points(points)
- "#{points} points"
+ "#{number_with_delimiter points} points"
end
def link_to_with_count(text, link = nil, count = 0, options = {})
48. $ git log
commit f9ac73d56d3852d1878a4d8a2309ecfda4472e84
Author: Pete Nicholls <pete@metanation.com>
Date: Sat Apr 9 16:31:28 2011 +1200
Added delimiter to points.
diff --git a/app/helpers/application_helper.rb b/app/helpers/
application_helper.rb
index 37d4a59..c442368 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -41,7 +41,7 @@ module ApplicationHelper
end
def plain_points(points)
- "#{points} points"
+ "#{number_with_delimiter points} points"
end
def link_to_with_count(text, link = nil, count = 0, options = {})
57. $ git clone
git://tomeofsecrets/holybook.git
$ cd holybook
58. Chapter II
Tim the Enchanter
Bob said unto Tim, “Yea, and we will
make so much money.” And Tim saw that
it was good, or at least better than
his usual Saturday nights out.
# Saved ‘chapter2.txt’
59. $ git add chapter2.txt
$ git commit -m “Added the second
chapter.”
$ git push origin master
$ git pull origin master
$ ls
chapter1.txt chapter2.txt
60. $ git commit -m “Added the bit with
the killer rabbit.”
$ git commit -m “Added the bit with
the bridge crossing.”
$ git commit -m “Proper coconut use.”
$ git commit -m “Added smiting.”
$ git commit -m “Turned peasant into
a mustard pot.”
$ git commit -m “Extra smiting.”
72. msygit
Git for the command-line.
http://git-scm.com
TortoiseGit
File browser and contextual
menu integration, port of
TortoiseSVN.
http://code.google.com/p/tortoisegit
Cygwin
Linux environment for
Windows. Git available
through package manager.
http://cygwin.com
I&#x2019;m not a Git expert, just a happy user for the last three years. Before that, I used Subversion.\n
Created in 2005 by Linus Torvalds to work on the Linux kernel\nBuilt around the concepts of distributed version control and non-linear development\n
\n
What do we mean by &#x201C;distributed&#x201D;? Let&#x2019;s take a look at an example using Subversion.\n
Person A makes commits his changes to the Subversion server. Person B updates their working copy from the server.\n
Person A makes commits his changes to the Subversion server. Person B updates their working copy from the server.\n
Person A makes commits his changes to the Subversion server. Person B updates their working copy from the server.\n
Person A makes commits his changes to the Subversion server. Person B updates their working copy from the server.\n
Person A makes commits his changes to the Subversion server. Person B updates their working copy from the server.\n
Person A makes commits his changes to the Subversion server. Person B updates their working copy from the server.\n
Person A makes commits his changes to the Subversion server. Person B updates their working copy from the server.\n
Person A makes commits his changes to the Subversion server. Person B updates their working copy from the server.\n
Person A makes commits his changes to the Subversion server. Person B updates their working copy from the server.\n
Person A makes commits his changes to the Subversion server. Person B updates their working copy from the server.\n
Person A makes commits his changes to the Subversion server. Person B updates their working copy from the server.\n
Person A makes commits his changes to the Subversion server. Person B updates their working copy from the server.\n
Person A makes commits his changes to the Subversion server. Person B updates their working copy from the server.\n
Person A makes commits his changes to the Subversion server. Person B updates their working copy from the server.\n
Person A makes commits his changes to the Subversion server. Person B updates their working copy from the server.\n
Person A makes commits his changes to the Subversion server. Person B updates their working copy from the server.\n
Person A makes commits his changes to the Subversion server. Person B updates their working copy from the server.\n
Person A makes commits his changes to the Subversion server. Person B updates their working copy from the server.\n
In the Git world, there is no central server. Repositories live locally on a person&#x2019;s hard drive. There are no revision numbers &#x2013; instead there&#x2019;s a hash representing each commit. One person can pull from another person&#x2019;s repository into their own. They don&#x2019;t need to pull all changes.\n
In the Git world, there is no central server. Repositories live locally on a person&#x2019;s hard drive. There are no revision numbers &#x2013; instead there&#x2019;s a hash representing each commit. One person can pull from another person&#x2019;s repository into their own. They don&#x2019;t need to pull all changes.\n
In the Git world, there is no central server. Repositories live locally on a person&#x2019;s hard drive. There are no revision numbers &#x2013; instead there&#x2019;s a hash representing each commit. One person can pull from another person&#x2019;s repository into their own. They don&#x2019;t need to pull all changes.\n
In the Git world, there is no central server. Repositories live locally on a person&#x2019;s hard drive. There are no revision numbers &#x2013; instead there&#x2019;s a hash representing each commit. One person can pull from another person&#x2019;s repository into their own. They don&#x2019;t need to pull all changes.\n
In the Git world, there is no central server. Repositories live locally on a person&#x2019;s hard drive. There are no revision numbers &#x2013; instead there&#x2019;s a hash representing each commit. One person can pull from another person&#x2019;s repository into their own. They don&#x2019;t need to pull all changes.\n
In the Git world, there is no central server. Repositories live locally on a person&#x2019;s hard drive. There are no revision numbers &#x2013; instead there&#x2019;s a hash representing each commit. One person can pull from another person&#x2019;s repository into their own. They don&#x2019;t need to pull all changes.\n
In the Git world, there is no central server. Repositories live locally on a person&#x2019;s hard drive. There are no revision numbers &#x2013; instead there&#x2019;s a hash representing each commit. One person can pull from another person&#x2019;s repository into their own. They don&#x2019;t need to pull all changes.\n
In the Git world, there is no central server. Repositories live locally on a person&#x2019;s hard drive. There are no revision numbers &#x2013; instead there&#x2019;s a hash representing each commit. One person can pull from another person&#x2019;s repository into their own. They don&#x2019;t need to pull all changes.\n
In the Git world, there is no central server. Repositories live locally on a person&#x2019;s hard drive. There are no revision numbers &#x2013; instead there&#x2019;s a hash representing each commit. One person can pull from another person&#x2019;s repository into their own. They don&#x2019;t need to pull all changes.\n
In the Git world, there is no central server. Repositories live locally on a person&#x2019;s hard drive. There are no revision numbers &#x2013; instead there&#x2019;s a hash representing each commit. One person can pull from another person&#x2019;s repository into their own. They don&#x2019;t need to pull all changes.\n
In the Git world, there is no central server. Repositories live locally on a person&#x2019;s hard drive. There are no revision numbers &#x2013; instead there&#x2019;s a hash representing each commit. One person can pull from another person&#x2019;s repository into their own. They don&#x2019;t need to pull all changes.\n
There is no one copy. Different people can merge and track other people&#x2019;s branches. The result is it&#x2019;s possible for different development workflows than &#x201C;one linear log of work.&#x201D; Having said that...\n
...in most projects, you will have a central, canonical repository, because it&#x2019;s convenient. But you don&#x2019;t have to share all your branches and commits with it. [Compare Subversion/trunk Git/master]\n
Everything in git is local.\n
\n
\n
Git is a collection of tools. Git works well by itself, but it plays better with friends. It&#x2019;s designed to work as part of an ecosystem of development. It knows that version control is just a tool, that&#x2019;s part of your workflow as a developer. It stresses flexibility, speed, and integration with your workflow. [Prune large files, branch/merge speeds, Git hooks as example]\n
One of the things you&#x2019;ll hear quite often. It refers to the method and speed that Git handles branches. When a branch takes a half second to create and incurs no file size penalty, it&#x2019;s trivial to create them. When you don&#x2019;t have to share them, you don&#x2019;t need to worry about making too many branches. It&#x2019;s also easy to branch from a branch, which is common.\n
Simple example workflow. Nothing earth-shattering.\n
Meet Bob.\n
\n
Bob has an ambition.\n
He wants to start his own religion.\n
The Church of Bob\n
\n
He starts by writing his holy book. [Explain git init]\nNext: Working copy/staging area\n
[Explain concepts]\nLet&#x2019;s say we change a file...\n
\n
We use git add to move it into the staging area. \n
\n
Once in the area [explain about how making changes won&#x2019;t affect the staging area&#x2019;s version]\n
\n
Git commit will save the changes in the staging area along with a commit message.\n
\n
Let&#x2019;s go back to Bob, who&#x2019;s written his first chapter of the Book of Bob.\n
He&#x2019;s saved the file as &#x2018;chapter1.txt&#x2019;\nNext: git status\n