This document provides an introduction to using Git version control. It discusses key Git concepts like distributed version control, objects in Git like blobs and trees, and commands like add, commit, branch, merge, rebase, fetch and push. The introduction includes an agenda, sources for further information, and demos several Git workflows and commands.
This document provides a brief introduction to Git, a distributed version control system. It describes what Git is and some of its key features, such as tracking changes to files over time, supporting distributed development, efficient object storage, easy branching and merging, and universal public identifiers. The document also discusses some of Git's internal mechanisms, such as SHA-1 hashes to uniquely identify objects, the index cache, and how commits and branches work.
The document provides an introduction to version control and Git. It discusses how software projects managed code before version control tools, including manually archiving code with file patches and naming conventions. It then explains how Git uses snapshots of the project file tree and delta storage to track changes more efficiently than tracking file patches. This allows easy recovery of previous versions and parallel development on branches.
This document provides an overview of GitHub and its technical architecture presented by Chris Wanstrath. Some key points:
- GitHub started as a git hosting site but became a social coding platform where users can see friends' activity and leave comments.
- It uses Ruby on Rails for the main codebase, Resque for background jobs, MySQL for the database, and nginx, unicorn, and memcached.
- Git operations are handled by Grit and communicated to file servers via the BERT-RPC based Smoke protocol.
- Caching, asset optimization, and AJAX loading are used extensively to improve performance. Monitoring tools include Nagios, Resque Web, Haystack, and CollectD.
Github - Git Training Slides: FoundationsLee Hanxue
Slide deck with detailed step breakdown that explains how git works, together with simple examples that you can try out yourself. Slides originated from http://teach.github.com/articles/course-slides/
Author: https://twitter.com/matthewmccull
Two days git training with labs
First day covers git basis and essential commands
Second day covers git additional command with a big lab using a git workflow
GIT is a free and open source distributed version control system that allows developers to work collaboratively without needing centralized connectivity. It provides powerful branching capabilities that allow creating branches cheaply and merging them easily. Common GIT commands include init, clone, status, add, commit, log, remote, fetch, push, and pull. An example scenario demonstrates how multiple developers can clone a remote repository, make changes on their local repos, fetch and push changes between local and remote repos, and merge branches.
Git is a distributed version control system that allows users to track changes to files over time. It keeps a record of the history of changes (revisions) to files in a repository. Each user has their own local copy of the source code repository. Basic Git operations include cloning a remote repository, pulling updates, pushing local changes, creating and switching branches, and merging branches. The document recommends a feature-based workflow for collaborating that involves regularly pulling updates, rebasing local branches, committing changes, merging to master, and pushing changes.
This document provides an outline for a course on learning Git version control. The course covers getting Git setup, the basic concepts and workflow of Git, branching and merging, resolving conflicts, working with remote repositories, and various Git commands. The document lists several modules that will be covered, including getting started, everyday Git usage, branching, merging and rebasing, additional tools and concepts, and advice on applying the skills learned. The goal is to teach participants how to install and use Git for version control on individual, local, and distributed projects.
Introduction to Git, from ground zero. Includes basic concepts, most common commands and workflows. Describes rebase vs merge, what push and pull do, and what the SHA1 does for you.
This document provides an introduction to using Git and GitHub for version control. It covers common Git commands like init, add, commit, status, branch, merge, push and pull. It also explains how to set up a remote repository on GitHub and push/pull from a local repository. The document recommends using branches for new features and pull requests to merge them into the master branch. It emphasizes Git's abilities for distributed, collaborative development on GitHub.
This document provides an introduction to Git, a distributed version control system. It discusses what Git is, its history and general features, how and where it can be used. It then provides a quick overview of installing Git, basic usage through a demo, why Git is advantageous compared to other version control systems like SVN, and some everyday Git commands and tools. Resources for learning more about Git are also listed.
Simple introduction for development teams familiar with Subversion.
Internal presentation licensed as CC-BY-NC-SA. Attribute to this URL or http://fittl.com/ if you re-publish, do *NOT* use commercially.
Introduction to Git & GitHub.
Agenda:
- What’s a Version Control System?
- What the heck is Git?
- Some Git commands
- What’s about GitHub?
- Git in Action!
This document provides an introduction to the version control system Git. It defines key Git concepts like the working tree, repository, commit, and HEAD. It explains that Git is a distributed version control system where the full history of a project is available once cloned. The document outlines Git's history, with it being created by Linus Torvalds to replace the commercial BitKeeper tool. It then lists and briefly describes important Git commands for local and collaboration repositories, including config, add, commit, log, diff, status, branch, checkout, merge, remote, clone, push, and pull. Lastly, it covers installing Git and generating SSH keys on Windows for accessing Git repositories.
Git is a distributed version control system that records changes to files over time. It allows multiple developers to work together and tracks the version history. The document outlines the basic concepts and commands of Git including repositories, commits, branches, merging, cloning, pulling and pushing changes between a local and remote repository. Examples are provided to demonstrate how to initialize a local repository, add and commit changes, switch branches, and push updates to a remote server.
The document discusses Git and GitHub. It begins with an overview of distributed version control systems (DVCS) like Git and how they differ from centralized version control systems. It then covers the basics of Git, including installing Git, initializing repositories, tracking changes, branching and merging. Finally, it discusses GitHub and how developers can use features like forking, pull requests and wikis to collaborate on projects hosted there. Common Git workflows like Git flow are also introduced.
Git is a distributed version control system that allows developers to work collaboratively on projects. It works by creating snapshots of files in a project over time. Developers can commit changes locally and then push them to a remote repository to share with others. Key Git concepts include repositories, commits, branches, cloning repositories from remote locations, and commands like push, pull, commit, log and diff to manage changes.
Git is a distributed version control system that allows users to track changes to files and collaborate on projects. It can work locally on a user's machine without needing to be connected to the internet. Users can install Git, initialize local repositories, add and commit files, and push changes to remote repositories hosted on services like GitHub. Git provides commands to view file histories, compare changes between versions, and merge code from different branches.
The document provides an overview of version control systems and introduces Git and GitHub. It discusses the differences between centralized and distributed version control. It then covers the basics of using Git locally including initialization, staging files, committing changes, branching and merging. Finally, it demonstrates some common remote operations with GitHub such as pushing, pulling and tagging releases.
This document provides an introduction to using Git and GitHub for version control of documents and collaboration. It explains the basic workflow of creating, editing, and saving files individually. It then introduces Git as a tool to track changes to documents over time, including who made each change and when. The document outlines setting up Git locally and using basic commands like commit, diff, log, branch, merge, and push/pull to the remote GitHub repository. It highlights key GitHub features like the profile page, repository page, pull requests, and hosting websites for free using GitHub Pages.
"Git Tutorial" a hands-on session on Git presented at Theoretical Neuroscience Lab, IISER Pune.
Very brief overview of Git commands.
Github: https://github.com/pranavcode/git-tutorial
What is Git | What is GitHub | Git Tutorial | GitHub Tutorial | Devops Tutori...Edureka!
This DevOps Tutorial on what is Git & what is GitHub ( Git Blog series: https://goo.gl/XS1Vux ) will let you know all about Version Control System & Version Control Tools like Git. You will learn all the Git commands to create repositories on your local machine & GitHub, commit changes, push & pull files. Also you will get your hands on with some advanced operations in Git like branching, merging, rebasing etc. Below are the topics covered in this tutorial:
1. Version Control Introduction
2. Why version Control?
3. Version Control Tools
4. Git & GitHub
5. Case Study: Dominion enterprises
6. What is Git?
7. Features of Git
8. What is a Repository?
9. Git Operations and Commands
Git is a distributed version control system that was created by Linus Torvalds as an improvement over centralized systems like Subversion; it works by tracking changes to files and committing snapshots of changes locally or to a remote server, and has a flexible branching workflow that allows users to work independently and merge changes together. The document provides an introduction to basic Git concepts, commands, and workflows for versioning code and collaborating through branching and merging changes.
An introduction to git, assuming very little. I introduce some core concepts, the commands used to work with them, and briefly touch on Github flow (interpreted in quite a specific way) and recap the commands used for that.
The examples could be used as exercises for a class learning git live, with a bit of fleshing out.
This document provides an overview of revision control systems and compares centralized (e.g. SVN) and distributed (e.g. Git) systems. It discusses the benefits of Git such as independence from network state, fast performance due to locality, and smaller repository sizes. Basic Git concepts and commands are explained, and different Git workflows including "squash" and branching models are described to provide clarity and workflow control for teams.
Distributed version control with git provides a brief introduction to git. It discusses why git was created, what git is, the git object model of blobs, trees and commits, collaborating through local and remote repositories, branching and merging, and an overview of the basic git workflow. The document provides resources for learning more about git.
Git is a distributed version control system that allows users to track changes to files over time. It keeps a record of the history of changes (revisions) to files in a repository. Each user has their own local copy of the source code repository. Basic Git operations include cloning a remote repository, pulling updates, pushing local changes, creating and switching branches, and merging branches. The document recommends a feature-based workflow for collaborating that involves regularly pulling updates, rebasing local branches, committing changes, merging to master, and pushing changes.
This document provides an outline for a course on learning Git version control. The course covers getting Git setup, the basic concepts and workflow of Git, branching and merging, resolving conflicts, working with remote repositories, and various Git commands. The document lists several modules that will be covered, including getting started, everyday Git usage, branching, merging and rebasing, additional tools and concepts, and advice on applying the skills learned. The goal is to teach participants how to install and use Git for version control on individual, local, and distributed projects.
Introduction to Git, from ground zero. Includes basic concepts, most common commands and workflows. Describes rebase vs merge, what push and pull do, and what the SHA1 does for you.
This document provides an introduction to using Git and GitHub for version control. It covers common Git commands like init, add, commit, status, branch, merge, push and pull. It also explains how to set up a remote repository on GitHub and push/pull from a local repository. The document recommends using branches for new features and pull requests to merge them into the master branch. It emphasizes Git's abilities for distributed, collaborative development on GitHub.
This document provides an introduction to Git, a distributed version control system. It discusses what Git is, its history and general features, how and where it can be used. It then provides a quick overview of installing Git, basic usage through a demo, why Git is advantageous compared to other version control systems like SVN, and some everyday Git commands and tools. Resources for learning more about Git are also listed.
Simple introduction for development teams familiar with Subversion.
Internal presentation licensed as CC-BY-NC-SA. Attribute to this URL or http://fittl.com/ if you re-publish, do *NOT* use commercially.
Introduction to Git & GitHub.
Agenda:
- What’s a Version Control System?
- What the heck is Git?
- Some Git commands
- What’s about GitHub?
- Git in Action!
This document provides an introduction to the version control system Git. It defines key Git concepts like the working tree, repository, commit, and HEAD. It explains that Git is a distributed version control system where the full history of a project is available once cloned. The document outlines Git's history, with it being created by Linus Torvalds to replace the commercial BitKeeper tool. It then lists and briefly describes important Git commands for local and collaboration repositories, including config, add, commit, log, diff, status, branch, checkout, merge, remote, clone, push, and pull. Lastly, it covers installing Git and generating SSH keys on Windows for accessing Git repositories.
Git is a distributed version control system that records changes to files over time. It allows multiple developers to work together and tracks the version history. The document outlines the basic concepts and commands of Git including repositories, commits, branches, merging, cloning, pulling and pushing changes between a local and remote repository. Examples are provided to demonstrate how to initialize a local repository, add and commit changes, switch branches, and push updates to a remote server.
The document discusses Git and GitHub. It begins with an overview of distributed version control systems (DVCS) like Git and how they differ from centralized version control systems. It then covers the basics of Git, including installing Git, initializing repositories, tracking changes, branching and merging. Finally, it discusses GitHub and how developers can use features like forking, pull requests and wikis to collaborate on projects hosted there. Common Git workflows like Git flow are also introduced.
Git is a distributed version control system that allows developers to work collaboratively on projects. It works by creating snapshots of files in a project over time. Developers can commit changes locally and then push them to a remote repository to share with others. Key Git concepts include repositories, commits, branches, cloning repositories from remote locations, and commands like push, pull, commit, log and diff to manage changes.
Git is a distributed version control system that allows users to track changes to files and collaborate on projects. It can work locally on a user's machine without needing to be connected to the internet. Users can install Git, initialize local repositories, add and commit files, and push changes to remote repositories hosted on services like GitHub. Git provides commands to view file histories, compare changes between versions, and merge code from different branches.
The document provides an overview of version control systems and introduces Git and GitHub. It discusses the differences between centralized and distributed version control. It then covers the basics of using Git locally including initialization, staging files, committing changes, branching and merging. Finally, it demonstrates some common remote operations with GitHub such as pushing, pulling and tagging releases.
This document provides an introduction to using Git and GitHub for version control of documents and collaboration. It explains the basic workflow of creating, editing, and saving files individually. It then introduces Git as a tool to track changes to documents over time, including who made each change and when. The document outlines setting up Git locally and using basic commands like commit, diff, log, branch, merge, and push/pull to the remote GitHub repository. It highlights key GitHub features like the profile page, repository page, pull requests, and hosting websites for free using GitHub Pages.
"Git Tutorial" a hands-on session on Git presented at Theoretical Neuroscience Lab, IISER Pune.
Very brief overview of Git commands.
Github: https://github.com/pranavcode/git-tutorial
What is Git | What is GitHub | Git Tutorial | GitHub Tutorial | Devops Tutori...Edureka!
This DevOps Tutorial on what is Git & what is GitHub ( Git Blog series: https://goo.gl/XS1Vux ) will let you know all about Version Control System & Version Control Tools like Git. You will learn all the Git commands to create repositories on your local machine & GitHub, commit changes, push & pull files. Also you will get your hands on with some advanced operations in Git like branching, merging, rebasing etc. Below are the topics covered in this tutorial:
1. Version Control Introduction
2. Why version Control?
3. Version Control Tools
4. Git & GitHub
5. Case Study: Dominion enterprises
6. What is Git?
7. Features of Git
8. What is a Repository?
9. Git Operations and Commands
Git is a distributed version control system that was created by Linus Torvalds as an improvement over centralized systems like Subversion; it works by tracking changes to files and committing snapshots of changes locally or to a remote server, and has a flexible branching workflow that allows users to work independently and merge changes together. The document provides an introduction to basic Git concepts, commands, and workflows for versioning code and collaborating through branching and merging changes.
An introduction to git, assuming very little. I introduce some core concepts, the commands used to work with them, and briefly touch on Github flow (interpreted in quite a specific way) and recap the commands used for that.
The examples could be used as exercises for a class learning git live, with a bit of fleshing out.
This document provides an overview of revision control systems and compares centralized (e.g. SVN) and distributed (e.g. Git) systems. It discusses the benefits of Git such as independence from network state, fast performance due to locality, and smaller repository sizes. Basic Git concepts and commands are explained, and different Git workflows including "squash" and branching models are described to provide clarity and workflow control for teams.
Distributed version control with git provides a brief introduction to git. It discusses why git was created, what git is, the git object model of blobs, trees and commits, collaborating through local and remote repositories, branching and merging, and an overview of the basic git workflow. The document provides resources for learning more about git.
Git branching model for efficient development.
(1) Main branches like master and development are used for new features and releases. (2) Supporting branches like bugfix and feature branches have limited lifespans. (3) The workflow handles features, bugs, and releases across environments while maintaining a clean history. Rebasing is preferred over merging for cleaner histories when working locally, while merging integrates changes for public branches.
Git is an open source, distributed version control system designed for speed and efficiency. It is fully distributed, allowing work to be done offline and with no central server required. Git stores snapshots of files instead of tracking changes between file versions, making it very efficient and allowing files to be recovered even after changes have been made.
The document discusses best practices for using Git including basic commands, branches, tags, and collaboration using GitHub. It covers Git fundamentals like committing, pushing, pulling and branching as well as more advanced topics such as rebasing, cherry-picking, stashing and using Git hooks for continuous integration. The presentation aims to help users learn to use Git more efficiently.
A brief introduction to the Dart programming language. I wrote this talk for FISL 16 (2015) and presented it there. The video is available at http://hemingway.softwarelivre.org/fisl16/high/40t/sala_40t-high-201507101800.ogv
Introduction to Git/Github - A beginner's guideRohit Arora
Introduction to Git/Github - A beginner's guide
Agenda:
Installing Git
Introduction to Version Control
Git Basics
Creating a new local Git repository
Cloning a Git repository
Making use of Git commit history
Reverting files to previous states
Creating a Github Repository
Adding, Committing & Pushing changes
Branching
Merging Branches
Sending Pull Requests
Conflict Resolution
and 3 Exercises
This document provides an overview of version control with Git. It explains what version control and Git are, how to install and configure Git, how to perform basic tasks like initializing a repository and making commits, and how to collaborate using features like branching and pushing/pulling from remote repositories. Key points covered include allowing the tracking of changes, maintaining file history, and enabling multiple people to work on the same project simultaneously without conflicts.
The document discusses why Git is a useful version control system. It notes that Git is fast, secure, distributed, and cross-platform. It works well for both large and small teams. The document outlines some common branch naming conventions like using "master" for production, "release/*" for releases, and "feature/*" for new features. It recommends starting with best practices and choosing whatever source control works for your team.
This document introduces version control systems and Git. It discusses the history and features of Git, how it differs from centralized and local version control systems in using a distributed and non-linear model. The document then provides a tutorial on basic Git commands and workflows for initializing and cloning repositories, tracking and committing changes, viewing history and undoing changes, working with remote repositories, tagging, and using branches.
The document discusses the pros and cons of using Git. It acknowledges that Git is complex and unintuitive, but argues people will still use it because distributed version control encourages contributions and experimentation through easy branching. It also notes many popular open source projects use Git. The document then provides a basic overview of how to get started with Git configuration, cloning repositories, committing changes, branching, merging, and interacting with remote repositories on services like GitHub.
Wong Hoi Sing, Edison introduces GIT and discusses why it is useful for managing code changes. He then provides a 15 minute tutorial on basic and advanced GIT commands. Finally, he covers advanced topics like Gitflow workflow, continuous integration, migrating from SVN to GIT, and using SparkleShare for Dropbox-like file sharing with GIT repositories.
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
Git allows for a distributed model where every user has their own local copy of the code and changes are merged to a local master branch, while SVN uses a centralized model where changes are committed to a central repository. Git operations like diff and commit are much faster since they are performed locally without network latency. Git also uses much less storage space than SVN. A key advantage of Git is its powerful branching and merging capabilities.
Learn Git - For Beginners and Intermediate levelsGorav Singal
Learn Git Basics and Fundamentals.
This is a perfect start for beginners and at Intermediate levels.
This contains a few commands and fundamentals about Git. Topics ranging from basic commands to creating branches, stashes. How to revert your code, how to tag your releases.
It also covers a few branching strategies.
This document provides an overview of version control and introduces Git. It discusses the different types of version control systems including local, centralized, and distributed. It then covers getting started with Git, including installing Git, setting up configuration, and basic commands. It also discusses using Git with GitHub and graphical Git clients. The document concludes with introductions to Git branching and merging branches.
The document introduces Git, an open source distributed version control system. It discusses how Git allows doing most operations locally, including committing changes, viewing history, and switching branches. It outlines some benefits of version control like tracking changes, collaboration and reverting mistakes. Finally it provides examples of basic Git commands and workflows for setting up and collaborating on projects.
General introduction of Git and its feature set. Subversion migration strategies using git-svn, subgit or github enterprise. Suitable for different audience types managers, developers, etc.
The Basics of Open Source Collaboration With Git and GitHubBigBlueHat
A revised/minimized version of Nick Quaranto's (http://www.slideshare.net/qrush ) presentation on the same topic. This revised version was used to present Git to a group of students at ECPI who were not yet familiar with the concepts of version control or Git.
Edison Wong gave an introduction to the version control system GIT. He explained what GIT is, why it is useful for managing code changes and sharing progress with coworkers. The presentation included a 15 minute tutorial on basic GIT commands and two advanced topics: continuous integration using automated tests and GIT, and using SparkleShare for Dropbox-like file sharing with version history.
This document discusses using Git to develop code. It begins by motivating the use of Git over the traditional client view by noting that Git allows for code to be backed up, easily shared, and developed in branches without destroying work. It then outlines how Git can provide snapshots of work, create branches for ideas, undo changes, share branches, and commit freely without others seeing. The document briefly introduces the Git object model and suggests a simple Git workflow and using git-p4 to integrate with a Perforce server. It cautions that rebasing rewrites history and can cause issues for downstream branches.
In one of our weekly training, we’ve talked about Git. Here is a quick overview of the main concepts, basic commands and branching strategy, how to work with Git, how to contribute to an OSS project, …
This document provides an introduction and overview of Git. It begins with a brief history of Git's origins with Linux source code management. It then covers key Git concepts like its distributed version control model, advantages like speed and resilience, and some basic commands. The document demonstrates setting up a sample Git repository and making commits. It also discusses branching, tagging, undoing changes, cleaning up repositories, and using remote repositories.
Git is a distributed version control system that aims to provide speed, a simple design, strong support for non-linear development with thousands of parallel branches, and efficiency for large projects. It allows nearly every operation to be performed locally, with key operations including cloning a local copy of a remote repository, adding and committing files with commit messages, and pushing changes to the remote repository. Best practices for Git include checking for new changes before development, committing small non-breaking changes often with meaningful messages, using meaningful branch names, and configuring lifecycle hooks.
This document discusses Git and the Eclipse Git integration tool EGit. It provides an overview of Git's history and how it works, compares it to other version control systems, demonstrates common Git commands, and describes what EGit can do. The presentation then demonstrates using EGit for basic tasks like committing and branching, as well as more advanced workflows involving remote repositories and code review.
Flutter is a mobile app SDK that allows developers to build high-quality native apps for iOS and Android from a single codebase. It uses its own rendering engine instead of a webview, providing fast performance. Flutter apps are written in Dart, a language designed for mobile development that compiles to efficient ARM code. This allows developers to build beautiful, high-performance apps across platforms more easily and with a shorter development cycle compared to traditional native development. Many companies like Google now use Flutter internally to build their mobile apps.
Native mobile application development with Flutter (Dart)Randal Schwartz
Create beautiful performant mobile apps for both iOS and Android using the revolutionary Flutter framework, originally from Google, now supported by a large community.
This slide deck was presented at Scale16x in Pasadena. The screencast is at https://www.youtube.com/watch?v=O7TXamVRSbY and the video recording is https://youtu.be/C3WipFZ0blQ?list=PL57quI9usf_vq2TH9NV5sMsbabkMGOnRA&t=13374 (timecode 3:42:54).
So, you don't have time to read Damian Conway's "Perl Best Practices" book, to understand his "256 guidelines on the art of coding to help you write better Perl code"? Hear Randal Schwartz provide the executive summary, including pointing out where Randal disagrees with Damian, and why. This high-speed overview will help you understand "code layout, naming conventions, choice of data and control structures, program decomposition, interface design and implementation, modularity, object orientation, error handling, testing, and debugging." But using shorter words.
This document summarizes Randal Schwartz's involvement with Perl over the past 30 years, including:
- Writing the first Perl book "Programming Perl" (known as the Camel book) with Larry Wall in 1991.
- Writing additional Perl books and courses, helping to spread adoption of Perl.
- Contributing to early Perl releases and documentation.
- Founding the Perl Institute to support the Perl community.
- Continuing to be an active member and leader in the Perl community through activities like Perlmongers and Perlmonks.
This document provides a brief introduction to the key concepts and usage of Git. It describes how Git manages trees and stores the entire commit history. It also explains how to use Git for version control when working alone or with others, including cloning repositories, making commits, branching and merging changes.
This document discusses strategies for testing scripts using Test::More and Test::Trap. It addresses problems like scripts running as separate processes, loose code acting as main, exceptions and exit codes, providing stdin/stdout/stderr, stubbing and mocking, and more. Fifteen strategies are presented with "Problem", "Solution", and "But" sections to discuss challenges and additional considerations.
Artificial Intelligence is providing benefits in many areas of work within the heritage sector, from image analysis, to ideas generation, and new research tools. However, it is more critical than ever for people, with analogue intelligence, to ensure the integrity and ethical use of AI. Including real people can improve the use of AI by identifying potential biases, cross-checking results, refining workflows, and providing contextual relevance to AI-driven results.
News about the impact of AI often paints a rosy picture. In practice, there are many potential pitfalls. This presentation discusses these issues and looks at the role of analogue intelligence and analogue interfaces in providing the best results to our audiences. How do we deal with factually incorrect results? How do we get content generated that better reflects the diversity of our communities? What roles are there for physical, in-person experiences in the digital world?
How Can I use the AI Hype in my Business Context?Daniel Lehner
𝙄𝙨 𝘼𝙄 𝙟𝙪𝙨𝙩 𝙝𝙮𝙥𝙚? 𝙊𝙧 𝙞𝙨 𝙞𝙩 𝙩𝙝𝙚 𝙜𝙖𝙢𝙚 𝙘𝙝𝙖𝙣𝙜𝙚𝙧 𝙮𝙤𝙪𝙧 𝙗𝙪𝙨𝙞𝙣𝙚𝙨𝙨 𝙣𝙚𝙚𝙙𝙨?
Everyone’s talking about AI but is anyone really using it to create real value?
Most companies want to leverage AI. Few know 𝗵𝗼𝘄.
✅ What exactly should you ask to find real AI opportunities?
✅ Which AI techniques actually fit your business?
✅ Is your data even ready for AI?
If you’re not sure, you’re not alone. This is a condensed version of the slides I presented at a Linkedin webinar for Tecnovy on 28.04.2025.
Semantic Cultivators : The Critical Future Role to Enable AIartmondano
By 2026, AI agents will consume 10x more enterprise data than humans, but with none of the contextual understanding that prevents catastrophic misinterpretations.
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfSoftware Company
Explore the benefits and features of advanced logistics management software for businesses in Riyadh. This guide delves into the latest technologies, from real-time tracking and route optimization to warehouse management and inventory control, helping businesses streamline their logistics operations and reduce costs. Learn how implementing the right software solution can enhance efficiency, improve customer satisfaction, and provide a competitive edge in the growing logistics sector of Riyadh.
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPathCommunity
Join this UiPath Community Berlin meetup to explore the Orchestrator API, Swagger interface, and the Test Manager API. Learn how to leverage these tools to streamline automation, enhance testing, and integrate more efficiently with UiPath. Perfect for developers, testers, and automation enthusiasts!
📕 Agenda
Welcome & Introductions
Orchestrator API Overview
Exploring the Swagger Interface
Test Manager API Highlights
Streamlining Automation & Testing with APIs (Demo)
Q&A and Open Discussion
Perfect for developers, testers, and automation enthusiasts!
👉 Join our UiPath Community Berlin chapter: https://community.uipath.com/berlin/
This session streamed live on April 29, 2025, 18:00 CET.
Check out all our upcoming UiPath Community sessions at https://community.uipath.com/events/.
Generative Artificial Intelligence (GenAI) in BusinessDr. Tathagat Varma
My talk for the Indian School of Business (ISB) Emerging Leaders Program Cohort 9. In this talk, I discussed key issues around adoption of GenAI in business - benefits, opportunities and limitations. I also discussed how my research on Theory of Cognitive Chasms helps address some of these issues
Mobile App Development Company in Saudi ArabiaSteve Jonas
EmizenTech is a globally recognized software development company, proudly serving businesses since 2013. With over 11+ years of industry experience and a team of 200+ skilled professionals, we have successfully delivered 1200+ projects across various sectors. As a leading Mobile App Development Company In Saudi Arabia we offer end-to-end solutions for iOS, Android, and cross-platform applications. Our apps are known for their user-friendly interfaces, scalability, high performance, and strong security features. We tailor each mobile application to meet the unique needs of different industries, ensuring a seamless user experience. EmizenTech is committed to turning your vision into a powerful digital product that drives growth, innovation, and long-term success in the competitive mobile landscape of Saudi Arabia.
AI and Data Privacy in 2025: Global TrendsInData Labs
In this infographic, we explore how businesses can implement effective governance frameworks to address AI data privacy. Understanding it is crucial for developing effective strategies that ensure compliance, safeguard customer trust, and leverage AI responsibly. Equip yourself with insights that can drive informed decision-making and position your organization for success in the future of data privacy.
This infographic contains:
-AI and data privacy: Key findings
-Statistics on AI data privacy in the today’s world
-Tips on how to overcome data privacy challenges
-Benefits of AI data security investments.
Keep up-to-date on how AI is reshaping privacy standards and what this entails for both individuals and organizations.
Role of Data Annotation Services in AI-Powered ManufacturingAndrew Leo
From predictive maintenance to robotic automation, AI is driving the future of manufacturing. But without high-quality annotated data, even the smartest models fall short.
Discover how data annotation services are powering accuracy, safety, and efficiency in AI-driven manufacturing systems.
Precision in data labeling = Precision on the production floor.
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc
Most consumers believe they’re making informed decisions about their personal data—adjusting privacy settings, blocking trackers, and opting out where they can. However, our new research reveals that while awareness is high, taking meaningful action is still lacking. On the corporate side, many organizations report strong policies for managing third-party data and consumer consent yet fall short when it comes to consistency, accountability and transparency.
This session will explore the research findings from TrustArc’s Privacy Pulse Survey, examining consumer attitudes toward personal data collection and practical suggestions for corporate practices around purchasing third-party data.
Attendees will learn:
- Consumer awareness around data brokers and what consumers are doing to limit data collection
- How businesses assess third-party vendors and their consent management operations
- Where business preparedness needs improvement
- What these trends mean for the future of privacy governance and public trust
This discussion is essential for privacy, risk, and compliance professionals who want to ground their strategies in current data and prepare for what’s next in the privacy landscape.
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxshyamraj55
We’re bringing the TDX energy to our community with 2 power-packed sessions:
🛠️ Workshop: MuleSoft for Agentforce
Explore the new version of our hands-on workshop featuring the latest Topic Center and API Catalog updates.
📄 Talk: Power Up Document Processing
Dive into smart automation with MuleSoft IDP, NLP, and Einstein AI for intelligent document workflows.
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Impelsys Inc.
Impelsys provided a robust testing solution, leveraging a risk-based and requirement-mapped approach to validate ICU Connect and CritiXpert. A well-defined test suite was developed to assess data communication, clinical data collection, transformation, and visualization across integrated devices.
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...Alan Dix
Talk at the final event of Data Fusion Dynamics: A Collaborative UK-Saudi Initiative in Cybersecurity and Artificial Intelligence funded by the British Council UK-Saudi Challenge Fund 2024, Cardiff Metropolitan University, 29th April 2025
https://alandix.com/academic/talks/CMet2025-AI-Changes-Everything/
Is AI just another technology, or does it fundamentally change the way we live and think?
Every technology has a direct impact with micro-ethical consequences, some good, some bad. However more profound are the ways in which some technologies reshape the very fabric of society with macro-ethical impacts. The invention of the stirrup revolutionised mounted combat, but as a side effect gave rise to the feudal system, which still shapes politics today. The internal combustion engine offers personal freedom and creates pollution, but has also transformed the nature of urban planning and international trade. When we look at AI the micro-ethical issues, such as bias, are most obvious, but the macro-ethical challenges may be greater.
At a micro-ethical level AI has the potential to deepen social, ethnic and gender bias, issues I have warned about since the early 1990s! It is also being used increasingly on the battlefield. However, it also offers amazing opportunities in health and educations, as the recent Nobel prizes for the developers of AlphaFold illustrate. More radically, the need to encode ethics acts as a mirror to surface essential ethical problems and conflicts.
At the macro-ethical level, by the early 2000s digital technology had already begun to undermine sovereignty (e.g. gambling), market economics (through network effects and emergent monopolies), and the very meaning of money. Modern AI is the child of big data, big computation and ultimately big business, intensifying the inherent tendency of digital technology to concentrate power. AI is already unravelling the fundamentals of the social, political and economic world around us, but this is a world that needs radical reimagining to overcome the global environmental and human challenges that confront us. Our challenge is whether to let the threads fall as they may, or to use them to weave a better future.
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...Alan Dix
Introduction to Git
1. Git: a brief introduction
Randal Schwartz
[email protected]
http://www.stonehenge.com/merlyn/
Version 3.01 on 12-Jan-2010
3. Disclaimer
● I've been tracking git since it was created
4. Disclaimer
● I've been tracking git since it was created
● I've used git on small projects
5. Disclaimer
● I've been tracking git since it was created
● I've used git on small projects
● I've used other systems on small and large
projects
6. Disclaimer
● I've been tracking git since it was created
● I've used git on small projects
● I've used other systems on small and large
projects
● I've read a lot of people talk about git on
the mailing list
7. Disclaimer
● I've been tracking git since it was created
● I've used git on small projects
● I've used other systems on small and large
projects
● I've read a lot of people talk about git on
the mailing list
● I've even provided some patches to git, and
suggestions for user interface changes
8. Disclaimer
● I've been tracking git since it was created
● I've used git on small projects
● I've used other systems on small and large
projects
● I've read a lot of people talk about git on
the mailing list
● I've even provided some patches to git, and
suggestions for user interface changes
● I have worked on small and medium teams
with git
9. Disclaimer
● I've been tracking git since it was created
● I've used git on small projects
● I've used other systems on small and large
projects
● I've read a lot of people talk about git on
the mailing list
● I've even provided some patches to git, and
suggestions for user interface changes
● I have worked on small and medium teams
with git
● But not large ones
11. What is git?
● Git manages changes to a tree of files over
time
12. What is git?
● Git manages changes to a tree of files over
time
● Git is optimized for:
13. What is git?
● Git manages changes to a tree of files over
time
● Git is optimized for:
− Distributed development
14. What is git?
● Git manages changes to a tree of files over
time
● Git is optimized for:
− Distributed development
− Large file sets
15. What is git?
● Git manages changes to a tree of files over
time
● Git is optimized for:
− Distributed development
− Large file sets
− Complex merges
16. What is git?
● Git manages changes to a tree of files over
time
● Git is optimized for:
− Distributed development
− Large file sets
− Complex merges
− Making trial branches
17. What is git?
● Git manages changes to a tree of files over
time
● Git is optimized for:
− Distributed development
− Large file sets
− Complex merges
− Making trial branches
− Being very fast
18. What is git?
● Git manages changes to a tree of files over
time
● Git is optimized for:
− Distributed development
− Large file sets
− Complex merges
− Making trial branches
− Being very fast
− Being robust
19. What is git?
● Git manages changes to a tree of files over
time
● Git is optimized for:
− Distributed development
− Large file sets
− Complex merges
− Making trial branches
− Being very fast
− Being robust
● Git is not optimized for:
20. What is git?
● Git manages changes to a tree of files over
time
● Git is optimized for:
− Distributed development
− Large file sets
− Complex merges
− Making trial branches
− Being very fast
− Being robust
● Git is not optimized for:
− Tracking file permissions and ownership
21. What is git?
● Git manages changes to a tree of files over
time
● Git is optimized for:
− Distributed development
− Large file sets
− Complex merges
− Making trial branches
− Being very fast
− Being robust
● Git is not optimized for:
− Tracking file permissions and ownership
− Tracking individual files with separate history
22. What is git?
● Git manages changes to a tree of files over
time
● Git is optimized for:
− Distributed development
− Large file sets
− Complex merges
− Making trial branches
− Being very fast
− Being robust
● Git is not optimized for:
− Tracking file permissions and ownership
− Tracking individual files with separate history
− Making things painful
24. Why git?
● Essential to Linux kernel development
25. Why git?
● Essential to Linux kernel development
● Created as a replacement when BitKeeper
suddenly became “unavailable”
26. Why git?
● Essential to Linux kernel development
● Created as a replacement when BitKeeper
suddenly became “unavailable”
● Everybody has a “commit bit”
27. Why git?
● Essential to Linux kernel development
● Created as a replacement when BitKeeper
suddenly became “unavailable”
● Everybody has a “commit bit”
● Anyone can:
28. Why git?
● Essential to Linux kernel development
● Created as a replacement when BitKeeper
suddenly became “unavailable”
● Everybody has a “commit bit”
● Anyone can:
− Clone the tree
29. Why git?
● Essential to Linux kernel development
● Created as a replacement when BitKeeper
suddenly became “unavailable”
● Everybody has a “commit bit”
● Anyone can:
− Clone the tree
− Make and test local changes
30. Why git?
● Essential to Linux kernel development
● Created as a replacement when BitKeeper
suddenly became “unavailable”
● Everybody has a “commit bit”
● Anyone can:
− Clone the tree
− Make and test local changes
− Submit the changes as patches via mail
31. Why git?
● Essential to Linux kernel development
● Created as a replacement when BitKeeper
suddenly became “unavailable”
● Everybody has a “commit bit”
● Anyone can:
− Clone the tree
− Make and test local changes
− Submit the changes as patches via mail
− OR submit them as a published repository
32. Why git?
● Essential to Linux kernel development
● Created as a replacement when BitKeeper
suddenly became “unavailable”
● Everybody has a “commit bit”
● Anyone can:
− Clone the tree
− Make and test local changes
− Submit the changes as patches via mail
− OR submit them as a published repository
− Track the upstream to revise if needed
33. Why git?
● Essential to Linux kernel development
● Created as a replacement when BitKeeper
suddenly became “unavailable”
● Everybody has a “commit bit”
● Anyone can:
− Clone the tree
− Make and test local changes
− Submit the changes as patches via mail
− OR submit them as a published repository
− Track the upstream to revise if needed
● Kernel.org is just a convenient public
watering hole
35. How does git do it?
● Universal public identifiers
36. How does git do it?
● Universal public identifiers
− None of the SVK “my @245 is your @992”
37. How does git do it?
● Universal public identifiers
− None of the SVK “my @245 is your @992”
● Multi-protocol transport
38. How does git do it?
● Universal public identifiers
− None of the SVK “my @245 is your @992”
● Multi-protocol transport
− HTTP
39. How does git do it?
● Universal public identifiers
− None of the SVK “my @245 is your @992”
● Multi-protocol transport
− HTTP
− SSH
40. How does git do it?
● Universal public identifiers
− None of the SVK “my @245 is your @992”
● Multi-protocol transport
− HTTP
− SSH
− GIT
41. How does git do it?
● Universal public identifiers
− None of the SVK “my @245 is your @992”
● Multi-protocol transport
− HTTP
− SSH
− GIT
● Efficient object storage
42. How does git do it?
● Universal public identifiers
− None of the SVK “my @245 is your @992”
● Multi-protocol transport
− HTTP
− SSH
− GIT
● Efficient object storage
● Everyone has entire repo (disk is cheap)
43. How does git do it?
● Universal public identifiers
− None of the SVK “my @245 is your @992”
● Multi-protocol transport
− HTTP
− SSH
− GIT
● Efficient object storage
● Everyone has entire repo (disk is cheap)
● Easy branching and merging
44. How does git do it?
● Universal public identifiers
− None of the SVK “my @245 is your @992”
● Multi-protocol transport
− HTTP
− SSH
− GIT
● Efficient object storage
● Everyone has entire repo (disk is cheap)
● Easy branching and merging
− Common ancestors are computable
45. How does git do it?
● Universal public identifiers
− None of the SVK “my @245 is your @992”
● Multi-protocol transport
− HTTP
− SSH
− GIT
● Efficient object storage
● Everyone has entire repo (disk is cheap)
● Easy branching and merging
− Common ancestors are computable
● Patches (and repo updates) can be
transported or mailed
46. How does git do it?
● Universal public identifiers
− None of the SVK “my @245 is your @992”
● Multi-protocol transport
− HTTP
− SSH
− GIT
● Efficient object storage
● Everyone has entire repo (disk is cheap)
● Easy branching and merging
− Common ancestors are computable
● Patches (and repo updates) can be
transported or mailed
● Binary “patches” are supported
48. The SHA1 is King
● Every “object” has a SHA1 to uniquely
identify it
49. The SHA1 is King
● Every “object” has a SHA1 to uniquely
identify it
● “objects” consist of:
50. The SHA1 is King
● Every “object” has a SHA1 to uniquely
identify it
● “objects” consist of:
− Blobs (the contents of a file)
51. The SHA1 is King
● Every “object” has a SHA1 to uniquely
identify it
● “objects” consist of:
− Blobs (the contents of a file)
− Trees (directories of blobs or other trees)
52. The SHA1 is King
● Every “object” has a SHA1 to uniquely
identify it
● “objects” consist of:
− Blobs (the contents of a file)
− Trees (directories of blobs or other trees)
− Commits:
53. The SHA1 is King
● Every “object” has a SHA1 to uniquely
identify it
● “objects” consist of:
− Blobs (the contents of a file)
− Trees (directories of blobs or other trees)
− Commits:
● A tree
54. The SHA1 is King
● Every “object” has a SHA1 to uniquely
identify it
● “objects” consist of:
− Blobs (the contents of a file)
− Trees (directories of blobs or other trees)
− Commits:
● A tree
● Plus zero or more parent commits
55. The SHA1 is King
● Every “object” has a SHA1 to uniquely
identify it
● “objects” consist of:
− Blobs (the contents of a file)
− Trees (directories of blobs or other trees)
− Commits:
● A tree
● Plus zero or more parent commits
● Plus a message about why
56. The SHA1 is King
● Every “object” has a SHA1 to uniquely
identify it
● “objects” consist of:
− Blobs (the contents of a file)
− Trees (directories of blobs or other trees)
− Commits:
● A tree
● Plus zero or more parent commits
● Plus a message about why
− Tags:
57. The SHA1 is King
● Every “object” has a SHA1 to uniquely
identify it
● “objects” consist of:
− Blobs (the contents of a file)
− Trees (directories of blobs or other trees)
− Commits:
● A tree
● Plus zero or more parent commits
● Plus a message about why
− Tags:
● An object (usually a commit)
58. The SHA1 is King
● Every “object” has a SHA1 to uniquely
identify it
● “objects” consist of:
− Blobs (the contents of a file)
− Trees (directories of blobs or other trees)
− Commits:
● A tree
● Plus zero or more parent commits
● Plus a message about why
− Tags:
● An object (usually a commit)
● Plus a subject
59. The SHA1 is King
● Every “object” has a SHA1 to uniquely
identify it
● “objects” consist of:
− Blobs (the contents of a file)
− Trees (directories of blobs or other trees)
− Commits:
● A tree
● Plus zero or more parent commits
● Plus a message about why
− Tags:
● An object (usually a commit)
● Plus a subject
● Plus an optional payload to sign it off
60. The SHA1 is King
● Every “object” has a SHA1 to uniquely
identify it
● “objects” consist of:
− Blobs (the contents of a file)
− Trees (directories of blobs or other trees)
− Commits:
● A tree
● Plus zero or more parent commits
● Plus a message about why
− Tags:
● An object (usually a commit)
● Plus a subject
● Plus an optional payload to sign it off
● Plus an optional gpg signature
62. Objects live in the repo
● Git efficiently creates new objects
63. Objects live in the repo
● Git efficiently creates new objects
● Objects are generally added, not destroyed
64. Objects live in the repo
● Git efficiently creates new objects
● Objects are generally added, not destroyed
● Unreferenced objects (deleted branch,
added but not committed, etc) can be
garbage collected
65. Objects live in the repo
● Git efficiently creates new objects
● Objects are generally added, not destroyed
● Unreferenced objects (deleted branch,
added but not committed, etc) can be
garbage collected
● Objects start “loose”, but can be “packed”
for filesystem efficiency
66. Objects live in the repo
● Git efficiently creates new objects
● Objects are generally added, not destroyed
● Unreferenced objects (deleted branch,
added but not committed, etc) can be
garbage collected
● Objects start “loose”, but can be “packed”
for filesystem efficiency
● “Packs” often represent objects as deltas for
space efficiency
67. Objects live in the repo
● Git efficiently creates new objects
● Objects are generally added, not destroyed
● Unreferenced objects (deleted branch,
added but not committed, etc) can be
garbage collected
● Objects start “loose”, but can be “packed”
for filesystem efficiency
● “Packs” often represent objects as deltas for
space efficiency
● “Packs” are also created for transfer
between repositories
69. Commits rule the repo
● One or more commits form the head of
object chains
70. Commits rule the repo
● One or more commits form the head of
object chains
● Typically one head called “master”
71. Commits rule the repo
● One or more commits form the head of
object chains
● Typically one head called “master”
● Others can be made at will (“branches”)
72. Commits rule the repo
● One or more commits form the head of
object chains
● Typically one head called “master”
● Others can be made at will (“branches”)
● All reachable repo objects are accessed
from these head commits
73. Commits rule the repo
● One or more commits form the head of
object chains
● Typically one head called “master”
● Others can be made at will (“branches”)
● All reachable repo objects are accessed
from these head commits
− Chase down the tree object to get to directories
and files as they existed at this commit time
74. Commits rule the repo
● One or more commits form the head of
object chains
● Typically one head called “master”
● Others can be made at will (“branches”)
● All reachable repo objects are accessed
from these head commits
− Chase down the tree object to get to directories
and files as they existed at this commit time
− Chase down the parent objects to get to earlier
commits and their respective trees
75. Commits rule the repo
● One or more commits form the head of
object chains
● Typically one head called “master”
● Others can be made at will (“branches”)
● All reachable repo objects are accessed
from these head commits
− Chase down the tree object to get to directories
and files as they existed at this commit time
− Chase down the parent objects to get to earlier
commits and their respective trees
● Usually one commit in the repo that has no
parent commit
77. Mapping objects to a file tree
● A “working tree” has a “.git” dir at the top
level
78. Mapping objects to a file tree
● A “working tree” has a “.git” dir at the top
level
● Unlike CVS, SVN: no pollution of deeper
directories (“grep -r” friendly)
79. Mapping objects to a file tree
● A “working tree” has a “.git” dir at the top
level
● Unlike CVS, SVN: no pollution of deeper
directories (“grep -r” friendly)
● The .git dir contains:
80. Mapping objects to a file tree
● A “working tree” has a “.git” dir at the top
level
● Unlike CVS, SVN: no pollution of deeper
directories (“grep -r” friendly)
● The .git dir contains:
− config – Configuration file (.ini style)
81. Mapping objects to a file tree
● A “working tree” has a “.git” dir at the top
level
● Unlike CVS, SVN: no pollution of deeper
directories (“grep -r” friendly)
● The .git dir contains:
− config – Configuration file (.ini style)
− objects/* – The object repository
82. Mapping objects to a file tree
● A “working tree” has a “.git” dir at the top
level
● Unlike CVS, SVN: no pollution of deeper
directories (“grep -r” friendly)
● The .git dir contains:
− config – Configuration file (.ini style)
− objects/* – The object repository
− refs/heads/* – branches (like “master”)
83. Mapping objects to a file tree
● A “working tree” has a “.git” dir at the top
level
● Unlike CVS, SVN: no pollution of deeper
directories (“grep -r” friendly)
● The .git dir contains:
− config – Configuration file (.ini style)
− objects/* – The object repository
− refs/heads/* – branches (like “master”)
− refs/tags/* - tags
84. Mapping objects to a file tree
● A “working tree” has a “.git” dir at the top
level
● Unlike CVS, SVN: no pollution of deeper
directories (“grep -r” friendly)
● The .git dir contains:
− config – Configuration file (.ini style)
− objects/* – The object repository
− refs/heads/* – branches (like “master”)
− refs/tags/* - tags
− logs/* - logs
85. Mapping objects to a file tree
● A “working tree” has a “.git” dir at the top
level
● Unlike CVS, SVN: no pollution of deeper
directories (“grep -r” friendly)
● The .git dir contains:
− config – Configuration file (.ini style)
− objects/* – The object repository
− refs/heads/* – branches (like “master”)
− refs/tags/* - tags
− logs/* - logs
− refs/remotes/* - tracking others
86. Mapping objects to a file tree
● A “working tree” has a “.git” dir at the top
level
● Unlike CVS, SVN: no pollution of deeper
directories (“grep -r” friendly)
● The .git dir contains:
− config – Configuration file (.ini style)
− objects/* – The object repository
− refs/heads/* – branches (like “master”)
− refs/tags/* - tags
− logs/* - logs
− refs/remotes/* - tracking others
− index – the “index cache” (described shortly)
87. Mapping objects to a file tree
● A “working tree” has a “.git” dir at the top
level
● Unlike CVS, SVN: no pollution of deeper
directories (“grep -r” friendly)
● The .git dir contains:
− config – Configuration file (.ini style)
− objects/* – The object repository
− refs/heads/* – branches (like “master”)
− refs/tags/* - tags
− logs/* - logs
− refs/remotes/* - tracking others
− index – the “index cache” (described shortly)
− HEAD – points to one of the branches (the
“current branch”, where commits go)
89. The index (or “cache”)
● A directory of blob objects
90. The index (or “cache”)
● A directory of blob objects
● Represents the “next commit”
91. The index (or “cache”)
● A directory of blob objects
● Represents the “next commit”
● “Add files” to put them in the index,
including current content
92. The index (or “cache”)
● A directory of blob objects
● Represents the “next commit”
● “Add files” to put them in the index,
including current content
● “Commit” takes the current index and
makes it a real commit object.
93. The index (or “cache”)
● A directory of blob objects
● Represents the “next commit”
● “Add files” to put them in the index,
including current content
● “Commit” takes the current index and
makes it a real commit object.
● Diff between HEAD and index:
94. The index (or “cache”)
● A directory of blob objects
● Represents the “next commit”
● “Add files” to put them in the index,
including current content
● “Commit” takes the current index and
makes it a real commit object.
● Diff between HEAD and index:
− changed things not yet committed
95. The index (or “cache”)
● A directory of blob objects
● Represents the “next commit”
● “Add files” to put them in the index,
including current content
● “Commit” takes the current index and
makes it a real commit object.
● Diff between HEAD and index:
− changed things not yet committed
● Diff between index and working dir:
96. The index (or “cache”)
● A directory of blob objects
● Represents the “next commit”
● “Add files” to put them in the index,
including current content
● “Commit” takes the current index and
makes it a real commit object.
● Diff between HEAD and index:
− changed things not yet committed
● Diff between index and working dir:
− changed things not yet added
97. The index (or “cache”)
● A directory of blob objects
● Represents the “next commit”
● “Add files” to put them in the index,
including current content
● “Commit” takes the current index and
makes it a real commit object.
● Diff between HEAD and index:
− changed things not yet committed
● Diff between index and working dir:
− changed things not yet added
− untracked things
98. The index (or “cache”)
● A directory of blob objects
● Represents the “next commit”
● “Add files” to put them in the index,
including current content
● “Commit” takes the current index and
makes it a real commit object.
● Diff between HEAD and index:
− changed things not yet committed
● Diff between index and working dir:
− changed things not yet added
− untracked things
● Index gets interesting during a merge
101. The great renaming
controversy
● Git doesn’t record explicit renaming
● Nor expect you to declare it
102. The great renaming
controversy
● Git doesn’t record explicit renaming
● Nor expect you to declare it
● Exact renaming can be determined by SHA1
comparisons
103. The great renaming
controversy
● Git doesn’t record explicit renaming
● Nor expect you to declare it
● Exact renaming can be determined by SHA1
comparisons
● Copy-paste-edits can be detected by ad-
hoc “similarity” rules for logs
104. The great renaming
controversy
● Git doesn’t record explicit renaming
● Nor expect you to declare it
● Exact renaming can be determined by SHA1
comparisons
● Copy-paste-edits can be detected by ad-
hoc “similarity” rules for logs
● In general the computer can find these far
easier than you can
105. The great renaming
controversy
● Git doesn’t record explicit renaming
● Nor expect you to declare it
● Exact renaming can be determined by SHA1
comparisons
● Copy-paste-edits can be detected by ad-
hoc “similarity” rules for logs
● In general the computer can find these far
easier than you can
● If you make it explicit, it will be wrong
sometimes
106. The great renaming
controversy
● Git doesn’t record explicit renaming
● Nor expect you to declare it
● Exact renaming can be determined by SHA1
comparisons
● Copy-paste-edits can be detected by ad-
hoc “similarity” rules for logs
● In general the computer can find these far
easier than you can
● If you make it explicit, it will be wrong
sometimes
● Being wrong breaks merges
107. The great renaming
controversy
● Git doesn’t record explicit renaming
● Nor expect you to declare it
● Exact renaming can be determined by SHA1
comparisons
● Copy-paste-edits can be detected by ad-
hoc “similarity” rules for logs
● In general the computer can find these far
easier than you can
● If you make it explicit, it will be wrong
sometimes
● Being wrong breaks merges
● Even being right will break some merges!
109. Git speaks and listens
● Many protocols to transfer git data between
repositories
110. Git speaks and listens
● Many protocols to transfer git data between
repositories
− rsync, http, https, git, ssh, local files
111. Git speaks and listens
● Many protocols to transfer git data between
repositories
− rsync, http, https, git, ssh, local files
● In the core, git also has:
112. Git speaks and listens
● Many protocols to transfer git data between
repositories
− rsync, http, https, git, ssh, local files
● In the core, git also has:
− import/export with CVS
113. Git speaks and listens
● Many protocols to transfer git data between
repositories
− rsync, http, https, git, ssh, local files
● In the core, git also has:
− import/export with CVS
− import/export with SVN
114. Git speaks and listens
● Many protocols to transfer git data between
repositories
− rsync, http, https, git, ssh, local files
● In the core, git also has:
− import/export with CVS
− import/export with SVN
− import from Arch
115. Git speaks and listens
● Many protocols to transfer git data between
repositories
− rsync, http, https, git, ssh, local files
● In the core, git also has:
− import/export with CVS
− import/export with SVN
− import from Arch
● I use CVS/SVN import to have entire history
of a project at 30K feet
116. Git speaks and listens
● Many protocols to transfer git data between
repositories
− rsync, http, https, git, ssh, local files
● In the core, git also has:
− import/export with CVS
− import/export with SVN
− import from Arch
● I use CVS/SVN import to have entire history
of a project at 30K feet
● Third party solutions handle others
117. Git speaks and listens
● Many protocols to transfer git data between
repositories
− rsync, http, https, git, ssh, local files
● In the core, git also has:
− import/export with CVS
− import/export with SVN
− import from Arch
● I use CVS/SVN import to have entire history
of a project at 30K feet
● Third party solutions handle others
● Git core also includes cvs-server
118. Git speaks and listens
● Many protocols to transfer git data between
repositories
− rsync, http, https, git, ssh, local files
● In the core, git also has:
− import/export with CVS
− import/export with SVN
− import from Arch
● I use CVS/SVN import to have entire history
of a project at 30K feet
● Third party solutions handle others
● Git core also includes cvs-server
− A git repository can act like a CVS repository for
legacy clients or humans
120. Getting git
● Get the latest “git-*.tar.gz” from http://
www.kernel.org/pub/software/scm/git/
121. Getting git
● Get the latest “git-*.tar.gz” from http://
www.kernel.org/pub/software/scm/git/
● RPMs and Debian packages also exist
122. Getting git
● Get the latest “git-*.tar.gz” from http://
www.kernel.org/pub/software/scm/git/
● RPMs and Debian packages also exist
● Once you’ve bootstrapped git, git-clone the
git-developer archive
123. Getting git
● Get the latest “git-*.tar.gz” from http://
www.kernel.org/pub/software/scm/git/
● RPMs and Debian packages also exist
● Once you’ve bootstrapped git, git-clone the
git-developer archive
− git-clone git://git.kernel.org/pub/scm/git/
git.git
124. Getting git
● Get the latest “git-*.tar.gz” from http://
www.kernel.org/pub/software/scm/git/
● RPMs and Debian packages also exist
● Once you’ve bootstrapped git, git-clone the
git-developer archive
− git-clone git://git.kernel.org/pub/scm/git/
git.git
● Rebuild once a week or so
125. Getting git
● Get the latest “git-*.tar.gz” from http://
www.kernel.org/pub/software/scm/git/
● RPMs and Debian packages also exist
● Once you’ve bootstrapped git, git-clone the
git-developer archive
− git-clone git://git.kernel.org/pub/scm/git/
git.git
● Rebuild once a week or so
● Maintenance releases are very stable
126. Getting git
● Get the latest “git-*.tar.gz” from http://
www.kernel.org/pub/software/scm/git/
● RPMs and Debian packages also exist
● Once you’ve bootstrapped git, git-clone the
git-developer archive
− git-clone git://git.kernel.org/pub/scm/git/
git.git
● Rebuild once a week or so
● Maintenance releases are very stable
● I install mine “prefix=/opt/git”, and add
/opt/git/bin to my PATH
129. Git commands
● All git commands start with “git”
● “git MUMBLE-FOO bar” has also been
written as “git-MUMBLE-FOO bar”
130. Git commands
● All git commands start with “git”
● “git MUMBLE-FOO bar” has also been
written as “git-MUMBLE-FOO bar”
● This allows a single entry “git” to be added
to the /usr/local/bin path
131. Git commands
● All git commands start with “git”
● “git MUMBLE-FOO bar” has also been
written as “git-MUMBLE-FOO bar”
● This allows a single entry “git” to be added
to the /usr/local/bin path
● This works for internal calls as well
132. Git commands
● All git commands start with “git”
● “git MUMBLE-FOO bar” has also been
written as “git-MUMBLE-FOO bar”
● This allows a single entry “git” to be added
to the /usr/local/bin path
● This works for internal calls as well
● The manpages are still under “git-MUMBLE-
FOO”, so you have to know the convention
either way
133. Git commands
● All git commands start with “git”
● “git MUMBLE-FOO bar” has also been
written as “git-MUMBLE-FOO bar”
● This allows a single entry “git” to be added
to the /usr/local/bin path
● This works for internal calls as well
● The manpages are still under “git-MUMBLE-
FOO”, so you have to know the convention
either way
− Unless you use “git help MUMBLE-FOO”
134. Git commands
● All git commands start with “git”
● “git MUMBLE-FOO bar” has also been
written as “git-MUMBLE-FOO bar”
● This allows a single entry “git” to be added
to the /usr/local/bin path
● This works for internal calls as well
● The manpages are still under “git-MUMBLE-
FOO”, so you have to know the convention
either way
− Unless you use “git help MUMBLE-FOO”
− Or “git MUMBLE-FOO --help”
136. “The Internet is just a series
of tubes”
● Low-level git operations are called
“plumbing”
137. “The Internet is just a series
of tubes”
● Low-level git operations are called
“plumbing”
● Higher level actions are called “porcelain”
138. “The Internet is just a series
of tubes”
● Low-level git operations are called
“plumbing”
● Higher level actions are called “porcelain”
● The git distro includes git plumbing and git
porcelain (git-gui)
139. “The Internet is just a series
of tubes”
● Low-level git operations are called
“plumbing”
● Higher level actions are called “porcelain”
● The git distro includes git plumbing and git
porcelain (git-gui)
● We’ll stick with the git porcelain in the rest
of this talk, unless otherwise noted
140. “The Internet is just a series
of tubes”
● Low-level git operations are called
“plumbing”
● Higher level actions are called “porcelain”
● The git distro includes git plumbing and git
porcelain (git-gui)
● We’ll stick with the git porcelain in the rest
of this talk, unless otherwise noted
● Other porcelain exists:
141. “The Internet is just a series
of tubes”
● Low-level git operations are called
“plumbing”
● Higher level actions are called “porcelain”
● The git distro includes git plumbing and git
porcelain (git-gui)
● We’ll stick with the git porcelain in the rest
of this talk, unless otherwise noted
● Other porcelain exists:
− StGit (“stacked git”)
142. “The Internet is just a series
of tubes”
● Low-level git operations are called
“plumbing”
● Higher level actions are called “porcelain”
● The git distro includes git plumbing and git
porcelain (git-gui)
● We’ll stick with the git porcelain in the rest
of this talk, unless otherwise noted
● Other porcelain exists:
− StGit (“stacked git”)
− guilt
143. “The Internet is just a series
of tubes”
● Low-level git operations are called
“plumbing”
● Higher level actions are called “porcelain”
● The git distro includes git plumbing and git
porcelain (git-gui)
● We’ll stick with the git porcelain in the rest
of this talk, unless otherwise noted
● Other porcelain exists:
− StGit (“stacked git”)
− guilt
− tig (curses-based viewer)
144. “The Internet is just a series
of tubes”
● Low-level git operations are called
“plumbing”
● Higher level actions are called “porcelain”
● The git distro includes git plumbing and git
porcelain (git-gui)
● We’ll stick with the git porcelain in the rest
of this talk, unless otherwise noted
● Other porcelain exists:
− StGit (“stacked git”)
− guilt
− tig (curses-based viewer)
− qgit
148. Creating a repo
● git-init
− Creates a .git in the current dir
− Optional: edit .gitignore
149. Creating a repo
● git-init
− Creates a .git in the current dir
− Optional: edit .gitignore
− “git-add .” to add all files (except .git!)
150. Creating a repo
● git-init
− Creates a .git in the current dir
− Optional: edit .gitignore
− “git-add .” to add all files (except .git!)
− Then “git commit” for the initial commit
151. Creating a repo
● git-init
− Creates a .git in the current dir
− Optional: edit .gitignore
− “git-add .” to add all files (except .git!)
− Then “git commit” for the initial commit
− Creates a branch named “master”
152. Creating a repo
● git-init
− Creates a .git in the current dir
− Optional: edit .gitignore
− “git-add .” to add all files (except .git!)
− Then “git commit” for the initial commit
− Creates a branch named “master”
− HEAD points at “master”
153. Creating a repo
● git-init
− Creates a .git in the current dir
− Optional: edit .gitignore
− “git-add .” to add all files (except .git!)
− Then “git commit” for the initial commit
− Creates a branch named “master”
− HEAD points at “master”
● git-clone REMOTESPEC
154. Creating a repo
● git-init
− Creates a .git in the current dir
− Optional: edit .gitignore
− “git-add .” to add all files (except .git!)
− Then “git commit” for the initial commit
− Creates a branch named “master”
− HEAD points at “master”
● git-clone REMOTESPEC
− Creates a git repo from an existing repo
155. Creating a repo
● git-init
− Creates a .git in the current dir
− Optional: edit .gitignore
− “git-add .” to add all files (except .git!)
− Then “git commit” for the initial commit
− Creates a branch named “master”
− HEAD points at “master”
● git-clone REMOTESPEC
− Creates a git repo from an existing repo
− Generally creates a subdirectory
156. Creating a repo
● git-init
− Creates a .git in the current dir
− Optional: edit .gitignore
− “git-add .” to add all files (except .git!)
− Then “git commit” for the initial commit
− Creates a branch named “master”
− HEAD points at “master”
● git-clone REMOTESPEC
− Creates a git repo from an existing repo
− Generally creates a subdirectory
− Your workfiles and .git are in there
157. Creating a repo
● git-init
− Creates a .git in the current dir
− Optional: edit .gitignore
− “git-add .” to add all files (except .git!)
− Then “git commit” for the initial commit
− Creates a branch named “master”
− HEAD points at “master”
● git-clone REMOTESPEC
− Creates a git repo from an existing repo
− Generally creates a subdirectory
− Your workfiles and .git are in there
− All remote branches are “tracked”
158. Creating a repo
● git-init
− Creates a .git in the current dir
− Optional: edit .gitignore
− “git-add .” to add all files (except .git!)
− Then “git commit” for the initial commit
− Creates a branch named “master”
− HEAD points at “master”
● git-clone REMOTESPEC
− Creates a git repo from an existing repo
− Generally creates a subdirectory
− Your workfiles and .git are in there
− All remote branches are “tracked”
− Remote “HEAD” branch checked out as your
initial “master” branch as well
161. Think globally, work locally
● Your work product is more commits
● These are always on a “branch”
162. Think globally, work locally
● Your work product is more commits
● These are always on a “branch”
● A branch is just a named commit
163. Think globally, work locally
● Your work product is more commits
● These are always on a “branch”
● A branch is just a named commit
● When you commit, the former branch head
becomes the parent
164. Think globally, work locally
● Your work product is more commits
● These are always on a “branch”
● A branch is just a named commit
● When you commit, the former branch head
becomes the parent
● The branch head moves to be the new
commit
165. Think globally, work locally
● Your work product is more commits
● These are always on a “branch”
● A branch is just a named commit
● When you commit, the former branch head
becomes the parent
● The branch head moves to be the new
commit
● Thus, you’re creating a directed acyclic
graph, rooted in branch heads
166. Think globally, work locally
● Your work product is more commits
● These are always on a “branch”
● A branch is just a named commit
● When you commit, the former branch head
becomes the parent
● The branch head moves to be the new
commit
● Thus, you’re creating a directed acyclic
graph, rooted in branch heads
● A merge is just a commit with multiple
parents
170. Typical work flow
● Edit edit edit
● git add files/you/have changed/now
− This adds the files to the index
171. Typical work flow
● Edit edit edit
● git add files/you/have changed/now
− This adds the files to the index
− “git add .” for adding all interesting files
172. Typical work flow
● Edit edit edit
● git add files/you/have changed/now
− This adds the files to the index
− “git add .” for adding all interesting files
● git status
173. Typical work flow
● Edit edit edit
● git add files/you/have changed/now
− This adds the files to the index
− “git add .” for adding all interesting files
● git status
− Tells you differences between HEAD, index, and
working directory
174. Typical work flow
● Edit edit edit
● git add files/you/have changed/now
− This adds the files to the index
− “git add .” for adding all interesting files
● git status
− Tells you differences between HEAD, index, and
working directory
● When you’re ready to commit: git commit
175. Typical work flow
● Edit edit edit
● git add files/you/have changed/now
− This adds the files to the index
− “git add .” for adding all interesting files
● git status
− Tells you differences between HEAD, index, and
working directory
● When you’re ready to commit: git commit
− Popped into a text editor (or “-m msg”)
176. Typical work flow
● Edit edit edit
● git add files/you/have changed/now
− This adds the files to the index
− “git add .” for adding all interesting files
● git status
− Tells you differences between HEAD, index, and
working directory
● When you’re ready to commit: git commit
− Popped into a text editor (or “-m msg”)
− First text line used for “short logs”
177. Typical work flow
● Edit edit edit
● git add files/you/have changed/now
− This adds the files to the index
− “git add .” for adding all interesting files
● git status
− Tells you differences between HEAD, index, and
working directory
● When you’re ready to commit: git commit
− Popped into a text editor (or “-m msg”)
− First text line used for “short logs”
● Current branch is moved forward
178. Typical work flow
● Edit edit edit
● git add files/you/have changed/now
− This adds the files to the index
− “git add .” for adding all interesting files
● git status
− Tells you differences between HEAD, index, and
working directory
● When you’re ready to commit: git commit
− Popped into a text editor (or “-m msg”)
− First text line used for “short logs”
● Current branch is moved forward
● And you’re back to more editing
181. But which branch?
● Git encourages branching
− A branch is just 41 text bytes!
182. But which branch?
● Git encourages branching
− A branch is just 41 text bytes!
● Typical work flow:
183. But which branch?
● Git encourages branching
− A branch is just 41 text bytes!
● Typical work flow:
− Think of something to do
184. But which branch?
● Git encourages branching
− A branch is just 41 text bytes!
● Typical work flow:
− Think of something to do
− git checkout -b topic-name master
185. But which branch?
● Git encourages branching
− A branch is just 41 text bytes!
● Typical work flow:
− Think of something to do
− git checkout -b topic-name master
− work work work, commit to topic-name
186. But which branch?
● Git encourages branching
− A branch is just 41 text bytes!
● Typical work flow:
− Think of something to do
− git checkout -b topic-name master
− work work work, commit to topic-name
● When your thing is done:
187. But which branch?
● Git encourages branching
− A branch is just 41 text bytes!
● Typical work flow:
− Think of something to do
− git checkout -b topic-name master
− work work work, commit to topic-name
● When your thing is done:
− git checkout master
188. But which branch?
● Git encourages branching
− A branch is just 41 text bytes!
● Typical work flow:
− Think of something to do
− git checkout -b topic-name master
− work work work, commit to topic-name
● When your thing is done:
− git checkout master
− git merge topic-name
189. But which branch?
● Git encourages branching
− A branch is just 41 text bytes!
● Typical work flow:
− Think of something to do
− git checkout -b topic-name master
− work work work, commit to topic-name
● When your thing is done:
− git checkout master
− git merge topic-name
− git branch -d topic-name
190. But which branch?
● Git encourages branching
− A branch is just 41 text bytes!
● Typical work flow:
− Think of something to do
− git checkout -b topic-name master
− work work work, commit to topic-name
● When your thing is done:
− git checkout master
− git merge topic-name
− git branch -d topic-name
● Permitted only when it’s a subset of HEAD
191. But which branch?
● Git encourages branching
− A branch is just 41 text bytes!
● Typical work flow:
− Think of something to do
− git checkout -b topic-name master
− work work work, commit to topic-name
● When your thing is done:
− git checkout master
− git merge topic-name
− git branch -d topic-name
● Permitted only when it’s a subset of HEAD
● Each individual commit is shown
192. But which branch?
● Git encourages branching
− A branch is just 41 text bytes!
● Typical work flow:
− Think of something to do
− git checkout -b topic-name master
− work work work, commit to topic-name
● When your thing is done:
− git checkout master
− git merge topic-name
− git branch -d topic-name
● Permitted only when it’s a subset of HEAD
● Each individual commit is shown
● For all work as a single commit:
193. But which branch?
● Git encourages branching
− A branch is just 41 text bytes!
● Typical work flow:
− Think of something to do
− git checkout -b topic-name master
− work work work, commit to topic-name
● When your thing is done:
− git checkout master
− git merge topic-name
− git branch -d topic-name
● Permitted only when it’s a subset of HEAD
● Each individual commit is shown
● For all work as a single commit:
− git merge --squash --no-commit t; git commit
196. Working in parallel
● You can have multiple topics active:
− git checkout -b topic1 master
197. Working in parallel
● You can have multiple topics active:
− git checkout -b topic1 master
− work work work; commit; work work; commit
198. Working in parallel
● You can have multiple topics active:
− git checkout -b topic1 master
− work work work; commit; work work; commit
− git checkout -b topic2 master
199. Working in parallel
● You can have multiple topics active:
− git checkout -b topic1 master
− work work work; commit; work work; commit
− git checkout -b topic2 master
− work work work; commit
200. Working in parallel
● You can have multiple topics active:
− git checkout -b topic1 master
− work work work; commit; work work; commit
− git checkout -b topic2 master
− work work work; commit
− git checkout topic1; work work; commit
201. Working in parallel
● You can have multiple topics active:
− git checkout -b topic1 master
− work work work; commit; work work; commit
− git checkout -b topic2 master
− work work work; commit
− git checkout topic1; work work; commit
● Decide how to bring them together
202. Working in parallel
● You can have multiple topics active:
− git checkout -b topic1 master
− work work work; commit; work work; commit
− git checkout -b topic2 master
− work work work; commit
− git checkout topic1; work work; commit
● Decide how to bring them together
● Merge: parallel histories
203. Working in parallel
● You can have multiple topics active:
− git checkout -b topic1 master
− work work work; commit; work work; commit
− git checkout -b topic2 master
− work work work; commit
− git checkout topic1; work work; commit
● Decide how to bring them together
● Merge: parallel histories
● Rebase: serial histories
204. Working in parallel
● You can have multiple topics active:
− git checkout -b topic1 master
− work work work; commit; work work; commit
− git checkout -b topic2 master
− work work work; commit
− git checkout topic1; work work; commit
● Decide how to bring them together
● Merge: parallel histories
● Rebase: serial histories
● Each has pros and cons
208. The merge
● git checkout master
● git merge topic1; git branch -d topic1
− This should be trivial (“fast forward”) merge
209. The merge
● git checkout master
● git merge topic1; git branch -d topic1
− This should be trivial (“fast forward”) merge
● git merge topic2
210. The merge
● git checkout master
● git merge topic1; git branch -d topic1
− This should be trivial (“fast forward”) merge
● git merge topic2
● Conflicts may arise:
211. The merge
● git checkout master
● git merge topic1; git branch -d topic1
− This should be trivial (“fast forward”) merge
● git merge topic2
● Conflicts may arise:
− overlapping changes in text edits
212. The merge
● git checkout master
● git merge topic1; git branch -d topic1
− This should be trivial (“fast forward”) merge
● git merge topic2
● Conflicts may arise:
− overlapping changes in text edits
− files renamed two different ways
213. The merge
● git checkout master
● git merge topic1; git branch -d topic1
− This should be trivial (“fast forward”) merge
● git merge topic2
● Conflicts may arise:
− overlapping changes in text edits
− files renamed two different ways
● You need to resolve, and continue:
214. The merge
● git checkout master
● git merge topic1; git branch -d topic1
− This should be trivial (“fast forward”) merge
● git merge topic2
● Conflicts may arise:
− overlapping changes in text edits
− files renamed two different ways
● You need to resolve, and continue:
− git add any/thing/you fixed/now
215. The merge
● git checkout master
● git merge topic1; git branch -d topic1
− This should be trivial (“fast forward”) merge
● git merge topic2
● Conflicts may arise:
− overlapping changes in text edits
− files renamed two different ways
● You need to resolve, and continue:
− git add any/thing/you fixed/now
● or git add .
216. The merge
● git checkout master
● git merge topic1; git branch -d topic1
− This should be trivial (“fast forward”) merge
● git merge topic2
● Conflicts may arise:
− overlapping changes in text edits
− files renamed two different ways
● You need to resolve, and continue:
− git add any/thing/you fixed/now
● or git add .
− git commit (describe the merge here)
217. The merge
● git checkout master
● git merge topic1; git branch -d topic1
− This should be trivial (“fast forward”) merge
● git merge topic2
● Conflicts may arise:
− overlapping changes in text edits
− files renamed two different ways
● You need to resolve, and continue:
− git add any/thing/you fixed/now
● or git add .
− git commit (describe the merge here)
● You can also abort:
218. The merge
● git checkout master
● git merge topic1; git branch -d topic1
− This should be trivial (“fast forward”) merge
● git merge topic2
● Conflicts may arise:
− overlapping changes in text edits
− files renamed two different ways
● You need to resolve, and continue:
− git add any/thing/you fixed/now
● or git add .
− git commit (describe the merge here)
● You can also abort:
− git reset --hard HEAD
220. The rebase
● Rewrites commits as if they started in a
different place
221. The rebase
● Rewrites commits as if they started in a
different place
● Breaks SHA1s: commits are lost!
222. The rebase
● Rewrites commits as if they started in a
different place
● Breaks SHA1s: commits are lost!
− Don’t rebase if you’ve published commits!
223. The rebase
● Rewrites commits as if they started in a
different place
● Breaks SHA1s: commits are lost!
− Don’t rebase if you’ve published commits!
● git rebase master topic2
224. The rebase
● Rewrites commits as if they started in a
different place
● Breaks SHA1s: commits are lost!
− Don’t rebase if you’ve published commits!
● git rebase master topic2
− All changes in topic2 but not in master are
rewritten as changes to the new master
225. The rebase
● Rewrites commits as if they started in a
different place
● Breaks SHA1s: commits are lost!
− Don’t rebase if you’ve published commits!
● git rebase master topic2
− All changes in topic2 but not in master are
rewritten as changes to the new master
● May result in merge conflicts:
226. The rebase
● Rewrites commits as if they started in a
different place
● Breaks SHA1s: commits are lost!
− Don’t rebase if you’ve published commits!
● git rebase master topic2
− All changes in topic2 but not in master are
rewritten as changes to the new master
● May result in merge conflicts:
− git rebase --continue or --abort or --skip
227. The rebase
● Rewrites commits as if they started in a
different place
● Breaks SHA1s: commits are lost!
− Don’t rebase if you’ve published commits!
● git rebase master topic2
− All changes in topic2 but not in master are
rewritten as changes to the new master
● May result in merge conflicts:
− git rebase --continue or --abort or --skip
● git rebase -i (interactive) is helpful
228. The rebase
● Rewrites commits as if they started in a
different place
● Breaks SHA1s: commits are lost!
− Don’t rebase if you’ve published commits!
● git rebase master topic2
− All changes in topic2 but not in master are
rewritten as changes to the new master
● May result in merge conflicts:
− git rebase --continue or --abort or --skip
● git rebase -i (interactive) is helpful
● When rebased, merge is a fast forward:
229. The rebase
● Rewrites commits as if they started in a
different place
● Breaks SHA1s: commits are lost!
− Don’t rebase if you’ve published commits!
● git rebase master topic2
− All changes in topic2 but not in master are
rewritten as changes to the new master
● May result in merge conflicts:
− git rebase --continue or --abort or --skip
● git rebase -i (interactive) is helpful
● When rebased, merge is a fast forward:
− git checkout master; git merge topic2
234. Read the history
● git log
− print the changes
● git log -p
− print the changes, including a diff between
revisions
235. Read the history
● git log
− print the changes
● git log -p
− print the changes, including a diff between
revisions
● git log --stat
236. Read the history
● git log
− print the changes
● git log -p
− print the changes, including a diff between
revisions
● git log --stat
− Summarize the changes with a diffstat
237. Read the history
● git log
− print the changes
● git log -p
− print the changes, including a diff between
revisions
● git log --stat
− Summarize the changes with a diffstat
● git log file1 file2 dir3
238. Read the history
● git log
− print the changes
● git log -p
− print the changes, including a diff between
revisions
● git log --stat
− Summarize the changes with a diffstat
● git log file1 file2 dir3
− Show changes only for listed files or subdirs
242. What’s the difference?
● git diff
− Diff between index and working tree
− These are things you should “git add”
243. What’s the difference?
● git diff
− Diff between index and working tree
− These are things you should “git add”
− “git commit -a” will also make this list empty
244. What’s the difference?
● git diff
− Diff between index and working tree
− These are things you should “git add”
− “git commit -a” will also make this list empty
● git diff HEAD
245. What’s the difference?
● git diff
− Diff between index and working tree
− These are things you should “git add”
− “git commit -a” will also make this list empty
● git diff HEAD
− Difference between HEAD and working tree
246. What’s the difference?
● git diff
− Diff between index and working tree
− These are things you should “git add”
− “git commit -a” will also make this list empty
● git diff HEAD
− Difference between HEAD and working tree
− “git commit -a” will make this empty
247. What’s the difference?
● git diff
− Diff between index and working tree
− These are things you should “git add”
− “git commit -a” will also make this list empty
● git diff HEAD
− Difference between HEAD and working tree
− “git commit -a” will make this empty
● git diff --cached
248. What’s the difference?
● git diff
− Diff between index and working tree
− These are things you should “git add”
− “git commit -a” will also make this list empty
● git diff HEAD
− Difference between HEAD and working tree
− “git commit -a” will make this empty
● git diff --cached
− between HEAD and index
249. What’s the difference?
● git diff
− Diff between index and working tree
− These are things you should “git add”
− “git commit -a” will also make this list empty
● git diff HEAD
− Difference between HEAD and working tree
− “git commit -a” will make this empty
● git diff --cached
− between HEAD and index
− “git commit” (without -a) makes this empty
250. What’s the difference?
● git diff
− Diff between index and working tree
− These are things you should “git add”
− “git commit -a” will also make this list empty
● git diff HEAD
− Difference between HEAD and working tree
− “git commit -a” will make this empty
● git diff --cached
− between HEAD and index
− “git commit” (without -a) makes this empty
● git diff OTHERBRANCH
251. What’s the difference?
● git diff
− Diff between index and working tree
− These are things you should “git add”
− “git commit -a” will also make this list empty
● git diff HEAD
− Difference between HEAD and working tree
− “git commit -a” will make this empty
● git diff --cached
− between HEAD and index
− “git commit” (without -a) makes this empty
● git diff OTHERBRANCH
− Other branch and working tree
252. What’s the difference?
● git diff
− Diff between index and working tree
− These are things you should “git add”
− “git commit -a” will also make this list empty
● git diff HEAD
− Difference between HEAD and working tree
− “git commit -a” will make this empty
● git diff --cached
− between HEAD and index
− “git commit” (without -a) makes this empty
● git diff OTHERBRANCH
− Other branch and working tree
● git diff BRANCH1 BRANCH2
253. What’s the difference?
● git diff
− Diff between index and working tree
− These are things you should “git add”
− “git commit -a” will also make this list empty
● git diff HEAD
− Difference between HEAD and working tree
− “git commit -a” will make this empty
● git diff --cached
− between HEAD and index
− “git commit” (without -a) makes this empty
● git diff OTHERBRANCH
− Other branch and working tree
● git diff BRANCH1 BRANCH2
− Difference between two branch heads
255. Barking up the tree
● Most commands take “tree-ish” args
256. Barking up the tree
● Most commands take “tree-ish” args
● SHA1 picks something absolutely
257. Barking up the tree
● Most commands take “tree-ish” args
● SHA1 picks something absolutely
− Can be abbreviated if not ambiguous
258. Barking up the tree
● Most commands take “tree-ish” args
● SHA1 picks something absolutely
− Can be abbreviated if not ambiguous
● HEAD, some-branch-name, some-tag-
name, some-origin-name
259. Barking up the tree
● Most commands take “tree-ish” args
● SHA1 picks something absolutely
− Can be abbreviated if not ambiguous
● HEAD, some-branch-name, some-tag-
name, some-origin-name
● Any of those followed by:
260. Barking up the tree
● Most commands take “tree-ish” args
● SHA1 picks something absolutely
− Can be abbreviated if not ambiguous
● HEAD, some-branch-name, some-tag-
name, some-origin-name
● Any of those followed by:
− ^n - “the n-th parent of an item” (default 1)
261. Barking up the tree
● Most commands take “tree-ish” args
● SHA1 picks something absolutely
− Can be abbreviated if not ambiguous
● HEAD, some-branch-name, some-tag-
name, some-origin-name
● Any of those followed by:
− ^n - “the n-th parent of an item” (default 1)
− ~n - n ^1’s (so ~3 is ^1^1^1)
262. Barking up the tree
● Most commands take “tree-ish” args
● SHA1 picks something absolutely
− Can be abbreviated if not ambiguous
● HEAD, some-branch-name, some-tag-
name, some-origin-name
● Any of those followed by:
− ^n - “the n-th parent of an item” (default 1)
− ~n - n ^1’s (so ~3 is ^1^1^1)
− :path - pick the object from the tree
263. Barking up the tree
● Most commands take “tree-ish” args
● SHA1 picks something absolutely
− Can be abbreviated if not ambiguous
● HEAD, some-branch-name, some-tag-
name, some-origin-name
● Any of those followed by:
− ^n - “the n-th parent of an item” (default 1)
− ~n - n ^1’s (so ~3 is ^1^1^1)
− :path - pick the object from the tree
● Examples:
264. Barking up the tree
● Most commands take “tree-ish” args
● SHA1 picks something absolutely
− Can be abbreviated if not ambiguous
● HEAD, some-branch-name, some-tag-
name, some-origin-name
● Any of those followed by:
− ^n - “the n-th parent of an item” (default 1)
− ~n - n ^1’s (so ~3 is ^1^1^1)
− :path - pick the object from the tree
● Examples:
− git diff HEAD^ HEAD
265. Barking up the tree
● Most commands take “tree-ish” args
● SHA1 picks something absolutely
− Can be abbreviated if not ambiguous
● HEAD, some-branch-name, some-tag-
name, some-origin-name
● Any of those followed by:
− ^n - “the n-th parent of an item” (default 1)
− ~n - n ^1’s (so ~3 is ^1^1^1)
− :path - pick the object from the tree
● Examples:
− git diff HEAD^ HEAD
● most recent change on current branch
266. Barking up the tree
● Most commands take “tree-ish” args
● SHA1 picks something absolutely
− Can be abbreviated if not ambiguous
● HEAD, some-branch-name, some-tag-
name, some-origin-name
● Any of those followed by:
− ^n - “the n-th parent of an item” (default 1)
− ~n - n ^1’s (so ~3 is ^1^1^1)
− :path - pick the object from the tree
● Examples:
− git diff HEAD^ HEAD
● most recent change on current branch
− git diff HEAD~3 HEAD
267. Barking up the tree
● Most commands take “tree-ish” args
● SHA1 picks something absolutely
− Can be abbreviated if not ambiguous
● HEAD, some-branch-name, some-tag-
name, some-origin-name
● Any of those followed by:
− ^n - “the n-th parent of an item” (default 1)
− ~n - n ^1’s (so ~3 is ^1^1^1)
− :path - pick the object from the tree
● Examples:
− git diff HEAD^ HEAD
● most recent change on current branch
− git diff HEAD~3 HEAD
● What damage did last three edits do?
270. Seeing the changes side by
side
● gitk mytopic origin
− Tk widget display of history
271. Seeing the changes side by
side
● gitk mytopic origin
− Tk widget display of history
− Shows changes back to common ancestor
272. Seeing the changes side by
side
● gitk mytopic origin
− Tk widget display of history
− Shows changes back to common ancestor
● gitk --all
273. Seeing the changes side by
side
● gitk mytopic origin
− Tk widget display of history
− Shows changes back to common ancestor
● gitk --all
− show everything
274. Seeing the changes side by
side
● gitk mytopic origin
− Tk widget display of history
− Shows changes back to common ancestor
● gitk --all
− show everything
● gitk from..to
275. Seeing the changes side by
side
● gitk mytopic origin
− Tk widget display of history
− Shows changes back to common ancestor
● gitk --all
− show everything
● gitk from..to
− Just the changes in “to” that aren’t in “from”
276. Seeing the changes side by
side
● gitk mytopic origin
− Tk widget display of history
− Shows changes back to common ancestor
● gitk --all
− show everything
● gitk from..to
− Just the changes in “to” that aren’t in “from”
● git show-branch mytopic...origin
277. Seeing the changes side by
side
● gitk mytopic origin
− Tk widget display of history
− Shows changes back to common ancestor
● gitk --all
− show everything
● gitk from..to
− Just the changes in “to” that aren’t in “from”
● git show-branch mytopic...origin
− Same thing for the Tk-challenged
278. Seeing the changes side by
side
● gitk mytopic origin
− Tk widget display of history
− Shows changes back to common ancestor
● gitk --all
− show everything
● gitk from..to
− Just the changes in “to” that aren’t in “from”
● git show-branch mytopic...origin
− Same thing for the Tk-challenged
● See also “qgit”
280. Playing well with others
● git clone creates “tracking” or “remote”
branches
281. Playing well with others
● git clone creates “tracking” or “remote”
branches
● Typically named “origin/master” etc
282. Playing well with others
● git clone creates “tracking” or “remote”
branches
● Typically named “origin/master” etc
● To share your work, first get up to date:
283. Playing well with others
● git clone creates “tracking” or “remote”
branches
● Typically named “origin/master” etc
● To share your work, first get up to date:
− git fetch (defaults to branches of origin)
284. Playing well with others
● git clone creates “tracking” or “remote”
branches
● Typically named “origin/master” etc
● To share your work, first get up to date:
− git fetch (defaults to branches of origin)
● Now rebase your changes on upstream:
285. Playing well with others
● git clone creates “tracking” or “remote”
branches
● Typically named “origin/master” etc
● To share your work, first get up to date:
− git fetch (defaults to branches of origin)
● Now rebase your changes on upstream:
− git checkout master # or whatever branch
286. Playing well with others
● git clone creates “tracking” or “remote”
branches
● Typically named “origin/master” etc
● To share your work, first get up to date:
− git fetch (defaults to branches of origin)
● Now rebase your changes on upstream:
− git checkout master # or whatever branch
− git rebase origin/master
287. Playing well with others
● git clone creates “tracking” or “remote”
branches
● Typically named “origin/master” etc
● To share your work, first get up to date:
− git fetch (defaults to branches of origin)
● Now rebase your changes on upstream:
− git checkout master # or whatever branch
− git rebase origin/master
● Or fetch/rebase in one step
288. Playing well with others
● git clone creates “tracking” or “remote”
branches
● Typically named “origin/master” etc
● To share your work, first get up to date:
− git fetch (defaults to branches of origin)
● Now rebase your changes on upstream:
− git checkout master # or whatever branch
− git rebase origin/master
● Or fetch/rebase in one step
− git pull --rebase
289. Playing well with others
● git clone creates “tracking” or “remote”
branches
● Typically named “origin/master” etc
● To share your work, first get up to date:
− git fetch (defaults to branches of origin)
● Now rebase your changes on upstream:
− git checkout master # or whatever branch
− git rebase origin/master
● Or fetch/rebase in one step
− git pull --rebase
● To push upstream:
290. Playing well with others
● git clone creates “tracking” or “remote”
branches
● Typically named “origin/master” etc
● To share your work, first get up to date:
− git fetch (defaults to branches of origin)
● Now rebase your changes on upstream:
− git checkout master # or whatever branch
− git rebase origin/master
● Or fetch/rebase in one step
− git pull --rebase
● To push upstream:
− git push
293. Resetting
● git reset --soft
− Makes all files “updated but not checked in”
294. Resetting
● git reset --soft
− Makes all files “updated but not checked in”
● git reset --hard # DANGER
295. Resetting
● git reset --soft
− Makes all files “updated but not checked in”
● git reset --hard # DANGER
− Forces working dir to look like last commit
296. Resetting
● git reset --soft
− Makes all files “updated but not checked in”
● git reset --hard # DANGER
− Forces working dir to look like last commit
● git reset --hard HEAD~3
297. Resetting
● git reset --soft
− Makes all files “updated but not checked in”
● git reset --hard # DANGER
− Forces working dir to look like last commit
● git reset --hard HEAD~3
− Tosses most recent 3 commits, and updates the
work dir to match that
298. Resetting
● git reset --soft
− Makes all files “updated but not checked in”
● git reset --hard # DANGER
− Forces working dir to look like last commit
● git reset --hard HEAD~3
− Tosses most recent 3 commits, and updates the
work dir to match that
− Don’t do this if you’ve published: use git revert
instead
299. Resetting
● git reset --soft
− Makes all files “updated but not checked in”
● git reset --hard # DANGER
− Forces working dir to look like last commit
● git reset --hard HEAD~3
− Tosses most recent 3 commits, and updates the
work dir to match that
− Don’t do this if you’ve published: use git revert
instead
● git checkout HEAD some/lost/file
300. Resetting
● git reset --soft
− Makes all files “updated but not checked in”
● git reset --hard # DANGER
− Forces working dir to look like last commit
● git reset --hard HEAD~3
− Tosses most recent 3 commits, and updates the
work dir to match that
− Don’t do this if you’ve published: use git revert
instead
● git checkout HEAD some/lost/file
− Recover the version of some/lost/file from the
last commit
302. Pay no attention to the man
behind the curtain
● Every directory can contain a .gitignore
303. Pay no attention to the man
behind the curtain
● Every directory can contain a .gitignore
− lines starting with “!” mean “not”
304. Pay no attention to the man
behind the curtain
● Every directory can contain a .gitignore
− lines starting with “!” mean “not”
− lines without “/” are checked against basename
305. Pay no attention to the man
behind the curtain
● Every directory can contain a .gitignore
− lines starting with “!” mean “not”
− lines without “/” are checked against basename
− otherwise, shell glob via fnmatch(3)
306. Pay no attention to the man
behind the curtain
● Every directory can contain a .gitignore
− lines starting with “!” mean “not”
− lines without “/” are checked against basename
− otherwise, shell glob via fnmatch(3)
− Leading / means “the current directory”
307. Pay no attention to the man
behind the curtain
● Every directory can contain a .gitignore
− lines starting with “!” mean “not”
− lines without “/” are checked against basename
− otherwise, shell glob via fnmatch(3)
− Leading / means “the current directory”
● Checked into the repository and tracked
308. Pay no attention to the man
behind the curtain
● Every directory can contain a .gitignore
− lines starting with “!” mean “not”
− lines without “/” are checked against basename
− otherwise, shell glob via fnmatch(3)
− Leading / means “the current directory”
● Checked into the repository and tracked
● Every repository can contain a .git/info/
exclude
309. Pay no attention to the man
behind the curtain
● Every directory can contain a .gitignore
− lines starting with “!” mean “not”
− lines without “/” are checked against basename
− otherwise, shell glob via fnmatch(3)
− Leading / means “the current directory”
● Checked into the repository and tracked
● Every repository can contain a .git/info/
exclude
● Both of these work together
310. Pay no attention to the man
behind the curtain
● Every directory can contain a .gitignore
− lines starting with “!” mean “not”
− lines without “/” are checked against basename
− otherwise, shell glob via fnmatch(3)
− Leading / means “the current directory”
● Checked into the repository and tracked
● Every repository can contain a .git/info/
exclude
● Both of these work together
● But .git/info/exclude won’t be cloned
313. Configuration
● Many commands have configurations
● git config name value
314. Configuration
● Many commands have configurations
● git config name value
− set name to value
315. Configuration
● Many commands have configurations
● git config name value
− set name to value
− name can contain periods for sub-items
316. Configuration
● Many commands have configurations
● git config name value
− set name to value
− name can contain periods for sub-items
− can edit manually if you’d prefer
317. Configuration
● Many commands have configurations
● git config name value
− set name to value
− name can contain periods for sub-items
− can edit manually if you’d prefer
● git config name
318. Configuration
● Many commands have configurations
● git config name value
− set name to value
− name can contain periods for sub-items
− can edit manually if you’d prefer
● git config name
− get current value
319. Configuration
● Many commands have configurations
● git config name value
− set name to value
− name can contain periods for sub-items
− can edit manually if you’d prefer
● git config name
− get current value
● git config -l
320. Configuration
● Many commands have configurations
● git config name value
− set name to value
− name can contain periods for sub-items
− can edit manually if you’d prefer
● git config name
− get current value
● git config -l
− get all values
321. Configuration
● Many commands have configurations
● git config name value
− set name to value
− name can contain periods for sub-items
− can edit manually if you’d prefer
● git config name
− get current value
● git config -l
− get all values
● git config --global name [value]
322. Configuration
● Many commands have configurations
● git config name value
− set name to value
− name can contain periods for sub-items
− can edit manually if you’d prefer
● git config name
− get current value
● git config -l
− get all values
● git config --global name [value]
− Same, but with ~/.gitconfig
323. Configuration
● Many commands have configurations
● git config name value
− set name to value
− name can contain periods for sub-items
− can edit manually if you’d prefer
● git config name
− get current value
● git config -l
− get all values
● git config --global name [value]
− Same, but with ~/.gitconfig
− This applies to all git repos from a user
324. Configuration
● Many commands have configurations
● git config name value
− set name to value
− name can contain periods for sub-items
− can edit manually if you’d prefer
● git config name
− get current value
● git config -l
− get all values
● git config --global name [value]
− Same, but with ~/.gitconfig
− This applies to all git repos from a user
● At a minimum, set user.email and
user.name for commits
327. Other useful porcelain
● git archive: export a tree as a tar/zip
● git bisect: find the offensive commit
328. Other useful porcelain
● git archive: export a tree as a tar/zip
● git bisect: find the offensive commit
● git cherry-pick: selective merging
329. Other useful porcelain
● git archive: export a tree as a tar/zip
● git bisect: find the offensive commit
● git cherry-pick: selective merging
● git mv: rename a file/dir with the right
index manipulations
330. Other useful porcelain
● git archive: export a tree as a tar/zip
● git bisect: find the offensive commit
● git cherry-pick: selective merging
● git mv: rename a file/dir with the right
index manipulations
● git rm: ditto for delete
331. Other useful porcelain
● git archive: export a tree as a tar/zip
● git bisect: find the offensive commit
● git cherry-pick: selective merging
● git mv: rename a file/dir with the right
index manipulations
● git rm: ditto for delete
● git push: write to an upstream
332. Other useful porcelain
● git archive: export a tree as a tar/zip
● git bisect: find the offensive commit
● git cherry-pick: selective merging
● git mv: rename a file/dir with the right
index manipulations
● git rm: ditto for delete
● git push: write to an upstream
● git revert: add a commit that undoes a
previous commit
333. Other useful porcelain
● git archive: export a tree as a tar/zip
● git bisect: find the offensive commit
● git cherry-pick: selective merging
● git mv: rename a file/dir with the right
index manipulations
● git rm: ditto for delete
● git push: write to an upstream
● git revert: add a commit that undoes a
previous commit
● git blame: who wrote this?
336. For further info
● See “Git (software)” in Wikipedia
● And the git homepage http://git.or.cz
337. For further info
● See “Git (software)” in Wikipedia
● And the git homepage http://git.or.cz
● Git wiki at http://git.or.cz/gitwiki
338. For further info
● See “Git (software)” in Wikipedia
● And the git homepage http://git.or.cz
● Git wiki at http://git.or.cz/gitwiki
● Get on the mailing list
339. For further info
● See “Git (software)” in Wikipedia
● And the git homepage http://git.or.cz
● Git wiki at http://git.or.cz/gitwiki
● Get on the mailing list
− Helpful people there
340. For further info
● See “Git (software)” in Wikipedia
● And the git homepage http://git.or.cz
● Git wiki at http://git.or.cz/gitwiki
● Get on the mailing list
− Helpful people there
− You can submit bugs, patches, ideas
341. For further info
● See “Git (software)” in Wikipedia
● And the git homepage http://git.or.cz
● Git wiki at http://git.or.cz/gitwiki
● Get on the mailing list
− Helpful people there
− You can submit bugs, patches, ideas
− Find out who else is using git
342. For further info
● See “Git (software)” in Wikipedia
● And the git homepage http://git.or.cz
● Git wiki at http://git.or.cz/gitwiki
● Get on the mailing list
− Helpful people there
− You can submit bugs, patches, ideas
− Find out who else is using git
● And the #git IRC channel (on Freenode)
343. For further info
● See “Git (software)” in Wikipedia
● And the git homepage http://git.or.cz
● Git wiki at http://git.or.cz/gitwiki
● Get on the mailing list
− Helpful people there
− You can submit bugs, patches, ideas
− Find out who else is using git
● And the #git IRC channel (on Freenode)
● Now “git” to it!