You know how to use Git. You can pull a branch, commit your changes, and push it back to Github or Bitbucket. You can use SourceTree to automatically merge well enough, and you even know how to stash your changes.
But what if you want to take things to the next level? Maybe you've heard about the arcane magic known as rebasing, or maybe you (or a coworker) once did something really nasty to your repository and didn't have the first clue how to fix it. Maybe you watched someone use Git on the command line and you want to find out if they're actually a wizard or not. Maybe you just know there's more to Git than you're using, and you want a more detailed walk through the tool. If this describes you, come learn Git from the ground up with me! You'll learn the git command line, how Git represents your files, fun ways to reference various commits, what branches and tags really are, and best of all you'll finally learn how to rebase.
Git 201 - A Deeper Look at Git @ MDC 2016Arthur Doler
You know how to use Git. You can pull a branch, commit your changes, and push it back to Github or Bitbucket. You can use SourceTree to automatically merge well enough, and you even know how to stash your changes.
But what if you want to take things to the next level? Maybe you've heard about the arcane magic known as rebasing, or maybe you (or a coworker) once did something really nasty to your repository and didn't have the first clue how to fix it. Maybe you watched someone use Git on the command line and you want to find out if they're actually a wizard or not. Maybe you just know there's more to Git than you're using, and you want a more detailed walk through the tool. If this describes you, come learn Git from the ground up with me! You'll learn the git command line, how Git represents your files, fun ways to reference various commits, what branches and tags really are, and best of all you'll finally learn how to rebase.
As Clojure programmers, our software is full of trees. Both the values we manipulate and the code we manipulate them with, are made from trees. It's all to easy to get caught up in a project and miss the forest for the trees, but how often have you missed the trees for the forest? This presentation is an exploration of trees from a unique perspective that will hopefully inform your thinking and lead your program design out of the woods.
Simple tricks to speed you up on the command lineJanos Gyerik
A few simple but very effective practical tips that should make you lightning fast on the command line. I use these literally every minute I spend in the shell. All the tips should work in Linux, UNIX, BSD and similar.
Git 201 - A Deeper Look at Git @ MDC 2016Arthur Doler
You know how to use Git. You can pull a branch, commit your changes, and push it back to Github or Bitbucket. You can use SourceTree to automatically merge well enough, and you even know how to stash your changes.
But what if you want to take things to the next level? Maybe you've heard about the arcane magic known as rebasing, or maybe you (or a coworker) once did something really nasty to your repository and didn't have the first clue how to fix it. Maybe you watched someone use Git on the command line and you want to find out if they're actually a wizard or not. Maybe you just know there's more to Git than you're using, and you want a more detailed walk through the tool. If this describes you, come learn Git from the ground up with me! You'll learn the git command line, how Git represents your files, fun ways to reference various commits, what branches and tags really are, and best of all you'll finally learn how to rebase.
As Clojure programmers, our software is full of trees. Both the values we manipulate and the code we manipulate them with, are made from trees. It's all to easy to get caught up in a project and miss the forest for the trees, but how often have you missed the trees for the forest? This presentation is an exploration of trees from a unique perspective that will hopefully inform your thinking and lead your program design out of the woods.
Simple tricks to speed you up on the command lineJanos Gyerik
A few simple but very effective practical tips that should make you lightning fast on the command line. I use these literally every minute I spend in the shell. All the tips should work in Linux, UNIX, BSD and similar.
A framework for the design and execution of heterogeneous distributed applica...Jonathan Bardin
This thesis focuses especially in the design and execution of distributed applications composed of heterogeneous entities which need to be adapted at runtime.
Our approach is based on service-oriented component models and on the SOA and REST architectural styles. We propose a framework, named RoSe, which enables the import of remote resources in a service-oriented component framework and the export of local services. RoSe allows developers and administrators to manage the distribution of their application in a totally independent and dynamic way thanks to a configuration language and a fluent API. The framework itself is modular, flexible and supports the addition and removal of components during execution.
Technowebsy is the Logo Designing Company in mumbai, India. We have designed some very specific business and corporate Identity packages to suit the needs of all our customers irrespective of the size of your company with reasonable price ranges which was not possible before. We believe that logo is important for every business how big or small it is.
Git 201 - A Deeper Look at Git @ Prairie.Code() 2016Arthur Doler
You know how to use Git. You can pull a branch, commit your changes, and push it back to Github or Bitbucket. You can use SourceTree to automatically merge well enough, and you even know how to stash your changes.
But what if you want to take things to the next level? Maybe you've heard about the arcane magic known as rebasing, or maybe you (or a coworker) once did something really nasty to your repository and didn't have the first clue how to fix it. Maybe you watched someone use Git on the command line and you want to find out if they're actually a wizard or not. Maybe you just know there's more to Git than you're using, and you want a more detailed walk through the tool. If this describes you, come learn Git from the ground up with me! You'll learn the git command line, how Git represents your files, fun ways to reference various commits, what branches and tags really are, and best of all you'll finally learn how to rebase.
A framework for the design and execution of heterogeneous distributed applica...Jonathan Bardin
This thesis focuses especially in the design and execution of distributed applications composed of heterogeneous entities which need to be adapted at runtime.
Our approach is based on service-oriented component models and on the SOA and REST architectural styles. We propose a framework, named RoSe, which enables the import of remote resources in a service-oriented component framework and the export of local services. RoSe allows developers and administrators to manage the distribution of their application in a totally independent and dynamic way thanks to a configuration language and a fluent API. The framework itself is modular, flexible and supports the addition and removal of components during execution.
Technowebsy is the Logo Designing Company in mumbai, India. We have designed some very specific business and corporate Identity packages to suit the needs of all our customers irrespective of the size of your company with reasonable price ranges which was not possible before. We believe that logo is important for every business how big or small it is.
Git 201 - A Deeper Look at Git @ Prairie.Code() 2016Arthur Doler
You know how to use Git. You can pull a branch, commit your changes, and push it back to Github or Bitbucket. You can use SourceTree to automatically merge well enough, and you even know how to stash your changes.
But what if you want to take things to the next level? Maybe you've heard about the arcane magic known as rebasing, or maybe you (or a coworker) once did something really nasty to your repository and didn't have the first clue how to fix it. Maybe you watched someone use Git on the command line and you want to find out if they're actually a wizard or not. Maybe you just know there's more to Git than you're using, and you want a more detailed walk through the tool. If this describes you, come learn Git from the ground up with me! You'll learn the git command line, how Git represents your files, fun ways to reference various commits, what branches and tags really are, and best of all you'll finally learn how to rebase.
Working with Git – a simple introduction for those used to working with a VCS like Subversion. Explains concepts and shows examples. Feel free to steal slides for your own purposes.
Git the Docs: Learning Git in a safe spaceBecky Todd
Git workshop given at Write the Docs ATX. Covers the basic workflow, including clone, add, branch, commit, push, and how to manage pull requests in Bitbucket.
Tracking huge files with Git LFS (GlueCon 2016)Tim Pettersen
These are the slides from Tim Pettersen's (@kannonboy) presentation entitled "Tracking huge files with Git LFS" at GlueCon 2016 in Broomfield, Colorado. The video is available at https://www.youtube.com/watch?v=iJ3hXuEVKAc
Slide counterparts of video course found here: https://www.youtube.com/playlist?list=PLDshL1Z581YYxLsjYwM25HkIYrymXb7H_
Follow along or just sit back and enjoy a live, hands on tutorial on the power routines of experienced git users. We'll explore with real world examples how to amend commits, do an interactive rebase - and why would you want to do one in the first place, how to solve conflicts without any merge tools, the power of less known merge strategies, how to do interactive commits, and much more.
Course notes
Part 1/8: Introduction
Who am I?
Content overview.
Choice of test project.
Part 2/8: Housekeeping
Find my aliases here.
Enhance your shell with liquidprompt.
Start with an empty commit.
Short cuts to list commits with nice annotations:
Part 3/8: Amending and rebasing
Amend a commit.
Reset a commit to perform a rename.
Different resets affect different parts of a git repository.
Part 4/8: Interactive rebase
How to perform an interactive rebase to remove a binary file stuck in the repository
Part 5/8: Solving conflicts
In this 5th part of the course we'll show a few concepts useful when solving merge and rebase conflicts with an interactive example on how to solve one.
We'll explain --ours, --theirs, conflict markers and what's the process needed to solve a conflict using Git.
Part 6/8: What is a merge and alternative merge strategies
We cover the basics of what a merge is in Git and we show the use of a couple of less known merge strategies like the "ours" merge strategy and the "octopus" strategy.
Part 7/8: Git interactive add
In this part we show how to perform and interactive add using Git. That is splitting the contents of some change across to more semantically meaningful commits.
Part 8/8: How to use Git stash
How to use git stash to solve common workflow situations, swap context with ease and smoothness and look cool to your colleagues.
The ability to learn things is an essential part of the developer’s toolkit, which is only getting more important as we march into the future. New technologies and new tools are released constantly. Even if you’re on a fixed tech stack on a long-running project, you need to evaluate and adapt to new versions of your tools and new software idioms as they're released.
The thing is, we’re never really taught HOW to learn things - we’re expected to just figure it out ourselves. It is my opinion that this is Really Terrible. If you share that opinion, do something about it by coming to this talk! Do you wonder about learning types? We'll cover those. Do you wonder how learning a new framework is different than learning best practices for that framework? We’ll discuss that, too! We’ll also talk about the neuroscience of learning, how your brain connects cause and effect, the tricks your memory plays on you, and more. By the end, you’ll hopefully have the tools you need to learn anything efficiently and effectively.
The Whys and Hows of Impostor Syndrome and the Illusion of TransparencyArthur Doler
Impostor Syndrome is a quiet and subversive force in a lot of developer's lives. They feel like they're faking their way through their job, and they silently panic as they wait for everyone to find out they don't really know what they're doing. It can be crippling, and left alone it can develop into an anxiety disorder, or worse. If you can relate, or even if you just want to learn how to be a little more confident in yourself, come and listen as we cover what Impostor Syndrome is, some theories why it happens, and strategies you can use to eliminate it (that's right, you actually can)!
It’s a great time to be in technology. And yet despite the improvement in our tools, we somehow don’t spend time talking about how to maintain our most important tool - the one between our ears. Your mental health is arguably the single most important factor in your ability to perform well, avoid burnout, and build resiliency, but we shroud the topic in secrecy, stigma, and co-opted clinical language that makes us think we know what's going on. We often don't even speak of what we feel to family and friends until we're facing a crisis.
We need to change all of that. You don't have to stay in the dark, and you *don't* have to suffer alone. In this talk we’ll start with some basics about mental health, then cover the most common mental health challenges facing developers, and then learn about some techniques to supercharge your brain by improving your mental hygiene (whether you have a psychological disorder or not). Most importantly, you’ll learn how to have a conversation with your coworkers (and other people in your life) about supporting each other and finding your best selves.
Let's Talk About Mental Health - KCDC 2018Arthur Doler
It’s a great time to be in technology. And yet despite the improvement in our tools, we somehow don’t spend time talking about how to maintain our most important tool - the one between our ears. Your mental health is arguably the single most important factor in your ability to perform well, avoid burnout, and build resiliency, but we shroud the topic in secrecy, stigma, and co-opted clinical language that makes us think we know what's going on. We often don't even speak of what we feel to family and friends until we're facing a crisis.
We need to change all of that. You don't have to stay in the dark, and you *don't* have to suffer alone. In this talk we’ll start with some basics about mental health, then cover the most common mental health challenges facing developers, and then learn about some techniques to supercharge your brain by improving your mental hygiene (whether you have a psychological disorder or not). Most importantly, you’ll learn how to have a conversation with your coworkers (and other people in your life) about supporting each other and finding your best selves.
Let's Talk About Mental Health - NDC Oslo 2018Arthur Doler
It’s a great time to be in technology. And yet despite the improvement in our tools, we somehow don’t spend time talking about how to maintain our most important tool - the one between our ears. Your mental health is arguably the single most important factor in your ability to perform well, avoid burnout, and build resiliency, but we shroud the topic in secrecy, stigma, and co-opted clinical language that makes us think we know what's going on. We often don't even speak of what we feel to family and friends until we're facing a crisis.
We need to change all of that. You don't have to stay in the dark, and you *don't* have to suffer alone. In this talk we’ll start with some basics about mental health, then cover the most common mental health challenges facing developers, and then learn about some techniques to supercharge your brain by improving your mental hygiene (whether you have a psychological disorder or not). Most importantly, you’ll learn how to have a conversation with your coworkers (and other people in your life) about supporting each other and finding your best selves.
Let's Talk About Mental Health - Nebraska.Code 2018Arthur Doler
It’s a great time to be in technology. And yet despite the improvement in our tools, we somehow don’t spend time talking about how to maintain our most important tool - the one between our ears. Your mental health is arguably the single most important factor in your ability to perform well, avoid burnout, and build resiliency, but we shroud the topic in secrecy, stigma, and co-opted clinical language that makes us think we know what's going on. We often don't even speak of what we feel to family and friends until we're facing a crisis.
We need to change all of that. You don't have to stay in the dark, and you *don't* have to suffer alone. In this talk we’ll start with some basics about mental health, then cover the most common mental health challenges facing developers, and then learn about some techniques to supercharge your brain by improving your mental hygiene (whether you have a psychological disorder or not). Most importantly, you’ll learn how to have a conversation with your coworkers (and other people in your life) about supporting each other and finding your best selves.
The Developer's Guide to Learning - 200OK 2018Arthur Doler
The ability to learn things is an essential part of the developer’s toolkit, which is only getting more important as we march into the future. New technologies and new tools are released constantly. Even if you’re on a fixed tech stack on a long-running project, you need to evaluate and adapt to new versions of your tools and new software idioms as they're released.
The thing is, we’re never really taught HOW to learn things - we’re expected to just figure it out ourselves. It is my opinion that this is Really Terrible. If you share that opinion, do something about it by coming to this talk! Do you wonder about learning types? We'll cover those. Do you wonder how learning a new framework is different than learning best practices for that framework? We’ll discuss that, too! We’ll also talk about the neuroscience of learning, how your brain connects cause and effect, the tricks your memory plays on you, and more. By the end, you’ll hopefully have the tools you need to learn anything efficiently and effectively.
The Developer's Guide to Learning - Codestock 2018Arthur Doler
The ability to learn things is an essential part of the developer’s toolkit, which is only getting more important as we march into the future. New technologies and new tools are released constantly. Even if you’re on a fixed tech stack on a long-running project, you need to evaluate and adapt to new versions of your tools and new software idioms as they're released.
The thing is, we’re never really taught HOW to learn things - we’re expected to just figure it out ourselves. It is my opinion that this is Really Terrible. If you share that opinion, do something about it by coming to this talk! Do you wonder about learning types? We'll cover those. Do you wonder how learning a new framework is different than learning best practices for that framework? We’ll discuss that, too! We’ll also talk about the neuroscience of learning, how your brain connects cause and effect, the tricks your memory plays on you, and more. By the end, you’ll hopefully have the tools you need to learn anything efficiently and effectively.
What Makes You DO Stuff? The Psychology of Motivation - Codestock 2018Arthur Doler
Are you sick of the words "motivation", "empowerment", "engagement", or "incentivize"? Are you convinced that any attempt to actually motivate you, your coworkers, or your employees is doomed to end in a dystopian Dilbert-like nightmare? Do you suspect some of your coworkers - or even you - might be motivated by something other than money (and might even be replicants)? No need for a Voight-Kampff test... just come learn about the psychology of motivation, and how your brain responds to it! We'll cover the history of motivation theory, some more modern concepts that aren't often talked about, and then offer some suggestions about how to use your new knowledge to help your company - or at least you - finally get rid of those "Teamwork!" posters on the walls.
Let's Talk About Mental Health - DevUp 2017Arthur Doler
It’s a great time to be in technology. Computers keep getting better. More and more devices keep getting connected to the internet. Javascript frameworks are multiplying like bacteria. And yet despite the improvement in our tools, we somehow don’t spend time talking about how to maintain our most important tool - the one between our ears.
Constantly feeling worn down, experiencing anxiety over making decisions, and burning out are not just facts of a developer’s life! They’re challenges that can be dealt with. In this talk we’ll cover the most common mental health challenges facing developers, and then learn about some techniques to supercharge your brain by improving your mental hygiene (whether you have a psychological disorder or not). Most importantly, you’ll learn how to have a conversation with your coworkers (and other people in your life) about supporting each other and finding your best selves.
The Developer's Guide to Learning EffectivelyArthur Doler
The ability to learn things is an essential part of the developer’s toolkit, which is only getting more important as we march into the future. New technologies and new tools are released constantly - there will probably be at least one new Javascript framework released just in the time it takes you to read this abstract. Even if you’re on a fixed tech stack on a long-running project, you need to evaluate and adapt to new versions of your tools and new software idioms as they're released.
The thing is, we’re never really taught HOW to learn things - we’re expected to just figure it out ourselves. It is my opinion that this is Really Terrible. If you share that opinion, do something about it by coming to this talk! We’ll cover the types of learning and how to find which ones work for you. Do you wonder how learning a new framework is different than learning best practices for that framework? We’ll discuss that, too! We’ll also talk about the neuroscience of learning, how your brain connects cause and effect, the tricks your memory plays on you, and more. By the end, you’ll hopefully have the tools you need to learn anything efficiently and effectively.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
Neuro-symbolic is not enough, we need neuro-*semantic*Frank van Harmelen
Neuro-symbolic (NeSy) AI is on the rise. However, simply machine learning on just any symbolic structure is not sufficient to really harvest the gains of NeSy. These will only be gained when the symbolic structures have an actual semantics. I give an operational definition of semantics as “predictable inference”.
All of this illustrated with link prediction over knowledge graphs, but the argument is general.
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
Keynote at DIGIT West Expo, Glasgow on 29 May 2024.
Cheryl Hung, ochery.com
Sr Director, Infrastructure Ecosystem, Arm.
The key trends across hardware, cloud and open-source; exploring how these areas are likely to mature and develop over the short and long-term, and then considering how organisations can position themselves to adapt and thrive.
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
17. B = A^ = A~ = A^1 = A~1
A
B
A = A^0
C
D E
D = C^1 = C~ = B~2
develop
E = C^2 = B^^2 = A~2^2
develop branch_2
F G
F = C^^ = A~4
G = E~ = C^2^ = A~2^2~
C = B^ = A^^ = A~~
C = A^1^1 = A~2
C ≠ A^2
21. “I don't know how many people
look at Al's progression of patches,
but they are stand-alone patches
on their own, while at the same
time _also_ being part of a larger
migration to the inscrutable goals
of Al - ie namespaces etc.
You may not realize just _how_
impressive that is, and what a
absolute wonder it is to work with
the guy.
Poetry in patches, indeed.”
- Linus Torvalds
On fa.linux.kernel, 27 Dec 2001
Source: Wikipedia
30. Pure Merge (i.e. gitflow)
Pure Rebase (Keep Branch or Delete Branch)
Rebase Then Merge
Rebase With Squash (Mild/Major)
… A
D
E
F
Example Case: Feature
Develop
… B
36. •Do you live in the Omaha/Lincoln area?
•Do you work in development or in another
profession in tech?
•Are you a consumer of mental health services or
have you been diagnosed with a mental disorder?
•Are you interested in being a founding member of a
peer-support group for technical mental health
consumers?
Talk to me afterward, or email me at
arthurdoler@gmail.com
(or Twitter DM or LinkedIn message or G+
38. • Git from the Bottom Up (free!)
• http://ftp.newartisans.com/pub/git.from.bottom.up.pdf
• Gitflow
• http://nvie.com/posts/a-successful-git-branching-model/
• A Git Workflow for Agile Teams
• http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html
• Git Team Workflows: merge or rebase?
• http://blogs.atlassian.com/2013/10/git-team-workflows-merge-or-rebas
• Git Pro Book (also free!)
• http://git-scm.com/book
• Git pack files
• http://git-scm.com/book/en/Git-Internals-Packfiles
• http://stackoverflow.com/questions/5176225/are-gits-pack-files-deltas-r
Editor's Notes
A quick overview of the basic structure for git – blobs are contained by trees, which contain each other, and which are contained by a commit.
Blobs and trees are subatomic particles, composing the literally atomic commits. Like reality, almost all of the time, just knowing how atoms work is enough. Sometimes there’s effects that make no sense which require subatomic knowledge, but until those points it’s not necessary.
Commits and commit topologies are the most important pieces of Git. The “atomic” commits form into “molecules” of topologies (typically called branches).
The edges of the DAG are then the deltas.
Here we have two commits, side by side, and we’re going to try to get a diff between the two.
Commit 1 has three files – one in the root of the repo (File 1) and two in a directory (helpfully called Directory), which are File 3 and File 4.
Commit 2 has three files – File 2 in the root and File 4 and File 5 in Directory.
File 1 and 2 have the same blob: identically the same. Git will (sometimes) reinterpret this as a rename.
File 3 is in Commit 1 but not in Commit 2, so it’s a delete.
File 4 has different blobs in the two commits: it’s a change and a diff will be generated.
File 5 is in Commit 2 but not in Commit 1: it’s an add.
Time to go to the command line.
Explain what you’re doing – committing data to be served via a service. In this case, MTG decks. Magic has different ways to play it, called “formats”. We’re tracking formats in different branches, because Reasons.
New tournament – block format! So “git checkout –b mtg_2014_block”
There are uncommitted changes, so “git add .” then “git commit –m “New decks.””
Talk about what a branch is – a pointer to a specific commit.
A major tournament is over so we’re making a tag for it. “git tag –a SCG_Open_07_2014 –m “SCG Open Finalized Decks.””
Lightweight tags are just like (mostly) immutable branches. Annotated tags identify the tagger, the message, the date, and have a checksum.
Talk about how a branch is actually a pointer to the entire DAG (directed acyclical graph) at that point. Two important things to realize:
A branch is not constrained by anything – any branch can point to any commit (even HEAD or master!).
The hash for each commit includes its parent – that means ANY history change will cascade through the DAG! We’ll see an example when we rebase.
Different ways to get upstream in your repository… note that these work on ANY name for a commit! And they can be chained, like in the last example, since the valid names for a commit (sha1, tag, branch, etc) plus the ^ and ~ operators are a valid DSL.
Anything valid in block format is valid in standard format, and so we need to merge those commits in: “git checkout mtg_2014_standard”, “git merge --no-ff mtg_2014_block”
The “no-ff” option on a merge performs a guaranteed merge commit – by default git will try to avoid making a merge commit if it can, through doing what is basically a rebase. –no-ff forces it to make a merge commit instead.
Different ways to get upstream in your repository… note that these work on ANY name for a commit! And they can be chained, like in the last example, since the valid names for a commit (sha1, tag, branch, etc) plus the ^ and ~ operators are a valid DSL.
Example time yet again.
We have a repo. We’ve been doing on-the-ground reporting for a local tournament and we’ve made a bunch of commits as we went so we didn’t lose anything.
Could push this, but it looks terrible.
What to do? Rebase!
Interactive rebase – git pops open whatever editor we have configured. One row = one commit, in reverse order. It does this in an editor so you can copy and paste, and so you can change the command from “pick” to something else. Show the list in gvim next to the list in gitviz.
There is one reorder, then two fixups, then one commit to reword and one commit to amend.
What if there had been commits on block we had to worry about? Rebase to the rescue!
Normal rebase. Call out how it applies each commit in turn.
We could have done both at once (and we should have!) but I broke it apart for clarity.
Example time again.
git branch –D mtg_2014_legacy
./gcscript.sh
See!
A discussion of git workflows – I’m going to exclude the issues caused by external tools here and focus only on git.
It – essentially – boils down to four types of git workflows.
We’ll work through the same example with each of the four types – just as a visual, to avoid a lot of unnecessary typing.
“Pure “ merge – using only the merge command (with --no-ff option). First merge develop into the feature to get the changes from Feature Branch B, accounting for conflicts if necessary. Then merge the feature branch into develop.
“Pure” rebase – First rebase the feature branch onto current develop to pick up branch B’s changes. Then alter develop’s head ref to point to F, either via manually editing it (bad!) or a fast-forward merge.
Rebase then merge – First rebase the feature branch onto current develop to pick up branch B’s changes. Then merge feature back into develop, using a --no-ff merge, to retain the merge commit.
Rebase then squash – First rebase the feature branch onto current develop to pick up branch B’s changes. Then interactive rebase to squash to one or a few large commits. Then fast-forward merge feature into develop.