changed orde rto do brnaching/merging in secodn part

This commit is contained in:
كارل مبارك 2026-01-14 11:39:07 +01:00
parent a573ea27f4
commit 85abfb10dc
3 changed files with 256 additions and 200 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -23,9 +23,11 @@ Planning (90 min)
================= =================
1. Context: what git is, what it does, who uses it (5 min) 1. Context: what git is, what it does, who uses it (5 min)
2. Core concepts: commits & three areas (15 min) 2. Core concepts: commits & three areas (10 min)
3. Install Git (10 min) 3. Install Git (10 min)
2. Core concepts: branching & merging (15 min) 4. Essential commands: (10 min)
2. Core concepts: branching & merging (5 min)
4. Extended commands: (10 min)
4. Forgejo: accounts + clone/push permissions (10 min) 4. Forgejo: accounts + clone/push permissions (10 min)
5. Exercise: branch a page, publish live, iterate (35 min) 5. Exercise: branch a page, publish live, iterate (35 min)
6. Wrap-up: good practices + next steps (5 min) 6. Wrap-up: good practices + next steps (5 min)
@ -49,12 +51,30 @@ If you have been working on a file on your computer and the directory starts to
Then git can be helpful! Then git can be helpful!
----
Workshop outcome
================
Each participant will:
- clone a repo
- create a branch
- edit a simple profile website
- commit changes with a clear message
- push branch to Forgejo
- see it appear in the live gallery
---- ----
What is git? What is git?
============ ============
- git is a distributed version control system - git is a distributed version control system
- git is a hidden sub-folder in a folder
- git tracks changes over time to files inside a folder - git tracks changes over time to files inside a folder
- git enables: - git enables:
@ -79,10 +99,35 @@ What is git not?
================ ================
- git ≠ Github! - git ≠ Github!
- Not a backup system (though it can help) - git ≠ backup system (though it can help)
- Not a file sync tool (though it can be used like that) - git ≠ file sync tool (though it can be used like that)
- Not a CMS (though it can be used like that) - git ≠ CMS (though it can be used like that)
- Not magic: it stores snapshots + metadata, you still choose what to record - git ≠ magic: it stores snapshots + metadata, you still choose what to record
----
Ecosystem
=========
- **git**: the version control system itself
- **.git**: a hidden subfolder where git operates
- **git hosts**: platforms where git repositories are hosted
- GitHub, Bitbucket, GitLab (operated by Big Tech Giants)
- Alternatives
- Codeberg (non-profit, community led)
- Oxacab (riseup.net for activists, journalists)
- Forgejo / Gitea (self-hosted)
- **git clients**: tools used to work with git on your computer
- ``git`` command line tool (free & open source)
- ``tig`` command line tool (free & open source)
- sourcetree, Github Desktop, VS Code (operated by Big Tech)
- many code editors (e.g. sublime, atom) have git extensions
- many, many more tools and extensions
---- ----
@ -146,102 +191,6 @@ Core concept: Three Areas
This is why Git feels "archival": This is why Git feels "archival":
- you intentionally select what becomes part of the record. - you intentionally select what becomes part of the record.
----
Core concept: Branching
=======================
.. container:: row
.. container::
In git, a **branch** is a named series of commits. In the previous example, there is only one branch, named "main" by default.
In a situation where you want to "take a detour" from the main course of the development of a repository, you can create a separate branch. Now, parrallel timelines of the same repository exist next to each other.
Example use cases of branching:
- if you want to experiemnt with a new feature affecting many files
- if you want to propose an improvement to your collaborators without editing their work "main"
- If you want to make existing software compatible on another platform
There is a lot of discourse around when to branch and how often. It varies from person to person and group to group.
.. note::
From the perspective of git, since branching doesn't add any technical overload on a project, it is encouraged to branch more and branch often. From a logical perspective, every branch creates a parrallel timeline, and this might be a lot to keep track of mentally.
Branching allows for and encourages collaboration and is at the core of the free and open source software movement.
.. image:: assets/images/branching.png
:width: 400px
:scale: 100 %
----
Core concept: Merging
=====================
.. container:: row
.. container::
In git, **merging** is when you incorporate commits from a separate branch into your own.
There are various merging techniques, and most of the time, the automated algorithm will work. Sometimes however, you might encounter a **merge confilct**: a section of a file where both branches have conflicting data that cannot be automatically resolved. In this case, you are prompted to manually resolve the conflicts, which can take the form of:
- accepting a change from one branch and rejecting the other
- accepting and keeping both changes
- re-editing the files to incorporate both changes
After merging two branches, a **merge commit** is created. This is an exceptional commit that has two parent commits instead of one.
.. image:: assets/images/branches.png
:width: 300px
:scale: 100 %
----
Terminology Overview
====================
- **repository**: a directory initialised with git
- **commit**: a checkpoint in the repository timeline(s)
- **checkout**: to visit the repository at a specific commit in its history.
- **delta**: a set of changes of a single commit
- **working tree**: your files as they are right now in the repository
- **staging area**: a place to add changes to
- **branch**: a named series of commits, a detour, a prrallel timeline
- **merge**: an incorporation of commits from another branch
- **remote**: a copy of the repository on a different host
- **clone**: to download an identical copy of a repository
- **push**: to upload local commits to a remote repository
- **pull**: to re-download commits from the remote repository
----
Ecosystem
=========
- **git**: the version control system itself
- **.git**: a hidden subfolder where git operates
- **git hosts**: platforms where git repositories are hosted
- GitHub, Bitbucket, GitLab (operated by Big Tech Giants)
- Alternatives
- Codeberg (non-profit, community led)
- Oxacab (riseup.net for activists, journalists)
- Forgejo / Gitea (self-hosted)
- **git clients**: tools used to work with git on your computer
- ``git`` command line tool (free & open source)
- ``tig`` command line tool (free & open source)
- sourcetree, Github Desktop, VS Code (operated by Big Tech)
- many code editors (e.g. sublime, atom) have git extensions
- many, many more tools and extensions
---- ----
@ -283,37 +232,8 @@ Typical collaborative remote workflow
Use case: tracking and collaborating on a repository with others such as a website project. Use case: tracking and collaborating on a repository with others such as a website project.
----
Complex collaborative remote workflow
=====================================
1. You clone a repository from a remote host to your local computer.
2. You create a new branch "my-feature" for your changes.
3. You make your changes to the repository.
4. You stage and commit your changes.
5. You push (upload) your commit up to the remote, publishing your branch for others to see / work on.
6. You pull (re-download) other people's commits from the remote.
7. Repeat steps **6**, **3**, **4** and **5**
8. When ready, you switch back to "main" branch and merge "my-feature" branch into it.
9. You push your new merge commit up to the "main" branch on remote.
Use case: tracking and collaborating on a repository with others such as a website project, where multiple features and parrallel versions of the website exist.
----
Workshop outcome
================
Each participant will:
- clone a repo
- create a branch
- edit a simple profile website
- commit changes with a clear message
- push branch to Forgejo
- see it appear in the live gallery
---- ----
@ -336,25 +256,22 @@ Minimum requirement: you can run `git` in a terminal.
---- ----
Commands: the essential set Commands: the essential set
=========================== ===========================
- `git status` (always)
- `git init` (initalise a repo) - `git init` (initalise a repo)
- `git clone` (an existing repo)
- `git status` (what's happening?)
- `git add` (add changes to the commit)
- `git rm` (remove a tracked file)
- `git commit` (store changes in the repo) - `git commit` (store changes in the repo)
- `git add` (add files to the commit) - `git log` (see the timeline)
- `git fetch` (sync with a repo online)
- `git pull` (sync with a repo online and merge)
- `git checkout` (visit the timeline at a specific checkpoint) - `git checkout` (visit the timeline at a specific checkpoint)
- `git branch` (take a detour) - `git push` (your commits to a remote server)
- `git merge` (merge branches) - `git pull` (sync with a repo online and merge)
- `git diff` (what changed)
- `git log` (history)
- plus: log, diff
---- ----
@ -425,10 +342,26 @@ Stage everything (use carefully):
Staging is curatorial: select what belongs together. Staging is curatorial: select what belongs together.
----
Optional: git rm
================
Remove a tracked file and stage the removal:
.. code-block:: bash
git rm old.html
git commit -m "Remove old page"
For this workshop you probably will not need it.
---- ----
Command: git commit Command: git commit
======================================== ===================
.. code-block:: bash .. code-block:: bash
@ -471,8 +404,136 @@ Gives a quick "finding aid" of earlier commits. Press 'q' to exit.
---- ----
Command: git branch and git checkout Command: git checkout (timetravel)
==================================== ==================================
.. code-block:: bash
git checkout your_commit_id
See your working tree as it would have been at a specific commit on the timeline.
----
Command: git push
=================
Push your branch to the server:
.. code-block:: bash
git push -u origin people/yourname
.. code-block:: bash
git push
----
Command: git pull
=================
Pull updates from server:
.. code-block:: bash
git pull
.. note::
During the exercise you mostly push your branch.
Pull is mainly for getting new changes on main (if needed).
----
Core concept: Branching
=======================
.. container:: row
.. container::
In git, a **branch** is a named series of commits. In the previous example, there is only one branch, named "main" by default.
In a situation where you want to "take a detour" from the main course of the development of a repository, you can create a separate branch. Now, parrallel timelines of the same repository exist next to each other.
Example use cases of branching:
- if you want to experiemnt with a new feature affecting many files
- if you want to propose an improvement to your collaborators without editing their work "main"
- If you want to make existing software compatible on another platform
There is a lot of discourse around when to branch and how often. It varies from person to person and group to group.
.. note::
From the perspective of git, since branching doesn't add any technical overload on a project, it is encouraged to branch more and branch often. From a logical perspective, every branch creates a parrallel timeline, and this might be a lot to keep track of mentally.
Branching allows for and encourages collaboration and is at the core of the free and open source software movement.
.. image:: assets/images/branching.png
:width: 400px
:scale: 100 %
----
Core concept: Merging
=====================
.. container:: row
.. container::
In git, **merging** is when you incorporate commits from a separate branch into your own.
There are various merging techniques, and most of the time, the automated algorithm will work. Sometimes however, you might encounter a **merge confilct**: a section of a file where both branches have conflicting data that cannot be automatically resolved. In this case, you are prompted to manually resolve the conflicts, which can take the form of:
- accepting a change from one branch and rejecting the other
- accepting and keeping both changes
- re-editing the files to incorporate both changes
After merging two branches, a **merge commit** is created. This is an exceptional commit that has two parent commits instead of one.
.. image:: assets/images/branches.png
:width: 300px
:scale: 100 %
----
Complex collaborative remote workflow
=====================================
1. You clone a repository from a remote host to your local computer.
2. You create a new branch "my-feature" for your changes.
3. You make your changes to the repository.
4. You stage and commit your changes.
5. You push (upload) your commit up to the remote, publishing your branch for others to see / work on.
6. You pull (re-download) other people's commits from the remote.
7. Repeat steps **6**, **3**, **4** and **5**
8. When ready, you switch back to "main" branch and merge "my-feature" branch into it.
9. You push your new merge commit up to the "main" branch on remote.
Use case: tracking and collaborating on a repository with others such as a website project, where multiple features and parrallel versions of the website exist.
----
Commands: the extended set
==========================
- `git branch` (take a detour)
- `git merge` (merge branches)
.. - `git diff` (what changed)
.. - `git log` (history)
----
Command: git branch
===================
List branches: List branches:
@ -504,39 +565,29 @@ Shortcut (create + switch):
---- ----
Command: git push / git pull Command: git merge
============================ ===================
Push your branch to the server:
.. code-block:: bash
git push -u origin people/yourname
Pull updates from server:
.. code-block:: bash
git pull
.. note::
During the exercise you mostly push your branch.
Pull is mainly for getting new changes on main (if needed).
---- ----
Optional: git rm Interlude: Terminology Overview
================ ===============================
Remove a tracked file and stage the removal: - **repository**: a directory initialised with git
- **commit**: a checkpoint in the repository timeline(s)
.. code-block:: bash - **checkout**: to visit the repository at a specific commit in its history.
- **delta**: a set of changes of a single commit
git rm old.html - **working tree**: your files as they are right now in the repository
git commit -m "Remove old page" - **staging area**: a place to add changes to
- **remote**: a copy of the repository on a different host
For this workshop you probably will not need it. - **clone**: to download an identical copy of a repository
- **push**: to upload local commits to a remote repository
- **pull**: to re-download commits from the remote repository
- **branch**: a named series of commits, a detour, a parallel timeline
- **merge**: an incorporation of commits from another branch
---- ----
@ -572,8 +623,11 @@ Resources:
- live gallery URL: https://braids.hackersanddesigners.nl - live gallery URL: https://braids.hackersanddesigners.nl
- these slides: https://braids.hackersanddesigners.nl/slides - these slides: https://braids.hackersanddesigners.nl/slides
---- ----
Exercise overview Exercise overview
================= =================