From 348252329a00a2cf436ef41615bb395342b6341e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D9=83=D8=A7=D8=B1=D9=84=20=D9=85=D8=A8=D8=A7=D8=B1=D9=83?= Date: Wed, 14 Jan 2026 13:46:31 +0100 Subject: [PATCH] made emrge slide --- assets/images/merge.png | Bin 0 -> 36667 bytes html_output/2026-01-14_km.html | 18 +++++++++--------- html_output/assets/images/merge.png | Bin 0 -> 36667 bytes html_output/index.html | 18 +++++++++--------- slides.rst | 9 +++++++-- 5 files changed, 25 insertions(+), 20 deletions(-) create mode 100644 assets/images/merge.png create mode 100644 html_output/assets/images/merge.png diff --git a/assets/images/merge.png b/assets/images/merge.png new file mode 100644 index 0000000000000000000000000000000000000000..99e1ce037efdf5d5ea1f5b6e89b937089799f428 GIT binary patch literal 36667 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 )X;G17R!|ipr0M~512iMBz%Pz* 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

s`^XX;s6*G6Oq#l0IFZnoHe>aIZ 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

  1. What changes hav - you intentionally select what becomes part of the record.

    Typical solo local workflow

    1. You initalise a directory on your computer with git.
    2. You make changes on the directory.
    3. You stage your changes and commit them.
    4. Repeat steps 2 and 3.

    Use case: tracking changes on a local, private folder, such as bookkeeping.

    Typical solo remote workflow

    1. You clone a repository from a remote host to your local computer.
    2. You make your changes to the repository.
    3. You stage and commit your changes.
    4. You push (upload) your commit up to the remote.
    5. Repeat steps 2, 3 and 4

    Use case: tracking and backing up a private folder, such as a password store.

    Typical collaborative remote workflow

    1. You clone a repository from a remote host to your local computer.
    2. You make your changes to the repository.
    3. You stage and commit your changes.
    4. You push (upload) your commit up to the remote.
    5. You pull (download) other people's commits from the remote.
    6. Repeat steps 5, 2, 3 and 4

    Use case: tracking and collaborating on a repository with others such as a website project.

    Core concept: Branching

    In git, a branch is a named series of commits.

    In the previous example, there is only one branch, named "main" by default.

    When you want to "take a detour" from the main course 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:

    • Experiment with a new feature affecting many files
    • Proposing an improvement to your collaborators
    • Have multiple versions of a website online
    • Making existing software compatible somewhere else

    There is a lot of discourse around when to branch and how often. It varies from person to person and group to group.

    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.

    Core concept: Merging

    In git, merging is when you consolidate commits from a separate branch into your own.

    There are various merging techniques, and most of the time, the automated algorithm will work.

    Sometimes, you might encounter a merge confilct: a section of a file where both branches have conflicting changes that cannot be automatically resolved. Here, you have 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.

    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 your commit (and new branch) up to the remote.
    6. You pull other people's commits on this branch from the remote.
    7. Repeat steps 6, 3, 4 and 5
    8. You switch back to "main" and merge "my-feature" into it.
    9. You push your new merge commit up to the "main" branch.

    Use case: you are designing a website for a client and want to show 3 different versions of it with different background colours.

    Use case: tracking and collaborating on a repository with others such as a website project, where two online versions of the website exist, a "safe" one that is available to the public, and an "experimental" one that is reserved for trying new features together.

    Recap

    • 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.
    • working tree: your files as they are right now in the repository
    • staging area: a place to add changes to
    • 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
    • branch: a named series of commits, a detour, a parallel timeline
    • merge: a consolidation of commits from another branch

    Install Git

    Check first:

    git --version

    If missing:

    • macOS: Xcode Command Line Tools
    • Windows: Git for Windows
    • Linux: package manager (apt/dnf/pacman)

    Minimum requirement: you can run git in a terminal.

    Commands: the essentials

    • git init (initalise a 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 log (see the timeline)
    • git checkout (visit the timeline at a specific checkpoint)
    • git clone (an existing repo)
    • git push (your commits to a remote server)
    • git pull (sync with a repo online and merge)
    • git branch (take a detour)
    • git merge (merge branches)

    Command: git init

    Create a repository in the current folder. -Use this when you are creating and working on your own projects.

    git init

    Creates a .git/ directory containing history + metadata.

    For the exercise we will use git clone instead of git init.

    Command: git status (your dashboard)

    git status

    Shows:

    • current branch
    • staged vs unstaged changes
    • untracked files

    Command: git add (select files)

    First, create a file

    nano index.html

    Stage files for the next commit.

    git add index.html

    Stage everything (use carefully):

    git add .

    Staging is curatorial: select what belongs together.

    Optional: git rm

    Remove a tracked file and stage the removal:

    git rm old.html
    -git commit -m "Remove old page"

    For this workshop you probably will not need it.

    Command: git commit (checkpoint)

    git commit -m "Added name to my page"

    Good commit message pattern:

    • What changed
    • Why it changed (reason/intent)
    • Scope stays small

    repeat edit > stage > commit a couple times?

    Command: git log (timeline)

    git log --oneline --graph

    Gives a quick "finding aid" of earlier commits. Press 'q' to exit.

    Command: git checkout (timetravel)

    git checkout your_commit_id

    See your working tree as it would have been at a specific commit on the timeline.

    Command: git clone

    Cloen (copy) a repository in the current folder. First, cd to a logical location in your computer, then:

    git clone https://git.hackersanddesigners.nl/hrk/braids
    -cd braids

    Downloads a repo from the web, complete with the full commit history and all changes.

    Make edits here as you wish then stage and commit them.

    Command: git push

    Push your commits to the server:

    git push -u origin main
    git push

    disabled push rights for now, only for demonstration purposes, will fail

    Command: git pull

    before we do this, one of us changes the background colour and pushes

    Pull updates from server:

    git pull

    During the exercise you mostly push your branch. -Pull is mainly for getting new changes on main (if needed).

    fact: git pull is actually a git fetch && git merge

    Command: git branch

    Choose a slug: lowercase, no spaces. This can be your name or an alias. Example: change people/<your-slug> in the command below to people/alex. From here on out replace <your-slug> with your chosen name.

    List branches:

    git branch

    Create a branch:

    git branch people/<your-slug>

    Switch to branch:

    git checkout people/<your-slug>

    Shortcut (create + switch):

    git checkout -b people/<your-slug>

    Branches are parallel dossiers: safe space for changes.

    Command: git merge

    ?

    Forgejo: what we use today

    • Forgejo is an open-source alternative to Github
    • Forgejo hosts the central repository (remote)

    You will:

    • create an account
    • clone via HTTPS
    • push your branch

    Share your username with us so we can add you as a collaborator

    Rules for today:

    • do NOT push to main
    • create your branch under people/<your-slug>

    Exercise overview

    You will build a (deliberately) simple page:

    • "Hi, I'm …"
    • maybe a gif?
    • a link?
    • optional: background, glitter, bad taste encouraged

    Workflow loop:

    clone -> branch -> edit -> status -> add -> commit -> push -> view -> iterate

    Exercise: step 1 (clone & branch)

    If everything went well in your initial clone & branch, check the repo with:

    git status
    -git branch

    The first time you checkout from https://git.hackersanddesigners.nl the server will ask you for credentials. These will be remembered, so only once.

    Exercise: step 2 (edit the page)

    Edit the root index.html (and optionally style.css, assets/).

    Make a visible change first:

    • Change the name to your name (or your alias)

    Then check changes:

    git diff
    -git status

    Exercise: step 3 (stage + commit)

    git add index.html
    +- 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.

    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 your commit (and new branch) up to the remote.
    6. You pull other people's commits on this branch from the remote.
    7. Repeat steps 6, 3, 4 and 5
    8. You switch back to "main" and merge "my-feature" into it.
    9. You push your new merge commit up to the "main" branch.

    Use case: you are designing a website for a client and want to show 3 different versions of it with different background colours.

    Use case: tracking and collaborating on a repository with others such as a website project, where two online versions of the website exist, a "safe" one that is available to the public, and an "experimental" one that is reserved for trying new features together.

    Recap

    • 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.
    • working tree: your files as they are right now in the repository
    • staging area: a place to add changes to
    • 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
    • branch: a named series of commits, a detour, a parallel timeline
    • merge: a consolidation of commits from another branch

    Install Git

    Check first:

    git --version

    If missing:

    • macOS: Xcode Command Line Tools
    • Windows: Git for Windows
    • Linux: package manager (apt/dnf/pacman)

    Minimum requirement: you can run git in a terminal.

    Commands: the essentials

    • git init (initalise a 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 log (see the timeline)
    • git checkout (visit the timeline at a specific checkpoint)
    • git clone (an existing repo)
    • git push (your commits to a remote server)
    • git pull (sync with a repo online and merge)
    • git branch (take a detour)
    • git merge (merge branches)

    Command: git init

    Create a repository in the current folder. +Use this when you are creating and working on your own projects.

    git init

    Creates a .git/ directory containing history + metadata.

    For the exercise we will use git clone instead of git init.

    Command: git status (your dashboard)

    git status

    Shows:

    • current branch
    • staged vs unstaged changes
    • untracked files

    Command: git add (select files)

    First, create a file

    nano index.html

    Stage files for the next commit.

    git add index.html

    Stage everything (use carefully):

    git add .

    Staging is curatorial: select what belongs together.

    Optional: git rm

    Remove a tracked file and stage the removal:

    git rm old.html
    +git commit -m "Remove old page"

    For this workshop you probably will not need it.

    Command: git commit (checkpoint)

    git commit -m "Added name to my page"

    Good commit message pattern:

    • What changed
    • Why it changed (reason/intent)
    • Scope stays small

    repeat edit > stage > commit a couple times?

    Command: git log (timeline)

    git log --oneline --graph

    Gives a quick "finding aid" of earlier commits. Press 'q' to exit.

    Command: git checkout (timetravel)

    git checkout your_commit_id

    See your working tree as it would have been at a specific commit on the timeline.

    Command: git clone

    Cloen (copy) a repository in the current folder. First, cd to a logical location in your computer, then:

    git clone https://git.hackersanddesigners.nl/hrk/braids
    +cd braids

    Downloads a repo from the web, complete with the full commit history and all changes.

    Make edits here as you wish then stage and commit them.

    Command: git push

    Push your commits to the server:

    git push -u origin main
    git push

    disabled push rights for now, only for demonstration purposes, will fail

    Command: git pull

    before we do this, one of us changes the background colour and pushes

    Pull updates from server:

    git pull

    During the exercise you mostly push your branch. +Pull is mainly for getting new changes on main (if needed).

    fact: git pull is actually a git fetch && git merge

    Command: git branch

    Choose a slug: lowercase, no spaces. This can be your name or an alias. Example: change people/<your-slug> in the command below to people/alex. From here on out replace <your-slug> with your chosen name.

    List branches:

    git branch

    Create a branch:

    git branch people/<your-slug>

    Switch to branch:

    git checkout people/<your-slug>

    Shortcut (create + switch):

    git checkout -b people/<your-slug>

    Branches are parallel dossiers: safe space for changes.

    Command: git merge

    ?

    Forgejo: what we use today

    • Forgejo is an open-source alternative to Github
    • Forgejo hosts the central repository (remote)

    You will:

    • create an account
    • clone via HTTPS
    • push your branch

    Share your username with us so we can add you as a collaborator

    Rules for today:

    • do NOT push to main
    • create your branch under people/<your-slug>

    Forgejo: account setup

    1. Create account at: git.hackersanddesigners.nl
    2. Confirm you can sign in

    Resources:

    Exercise overview

    You will build a (deliberately) simple page:

    • "Hi, I'm …"
    • maybe a gif?
    • a link?
    • optional: background, glitter, bad taste encouraged

    Workflow loop:

    clone -> branch -> edit -> status -> add -> commit -> push -> view -> iterate

    Exercise: step 1 (clone & branch)

    If everything went well in your initial clone & branch, check the repo with:

    git status
    +git branch

    The first time you checkout from https://git.hackersanddesigners.nl the server will ask you for credentials. These will be remembered, so only once.

    Exercise: step 2 (edit the page)

    Edit the root index.html (and optionally style.css, assets/).

    Make a visible change first:

    • Change the name to your name (or your alias)

    Then check changes:

    git diff
    +git status

    Exercise: step 3 (stage + commit)

    git add index.html
     git commit -m "Customize profile page for <your-slug>"

    If you added assets:

    git add assets/
    -git commit -m "Add assets for <your-slug>"

    Small commits win. One change = one deposit.

    Exercise: step 4 (push your branch)

    git push -u origin people/<your-slug>

    (Again, change <your-slug>!)

    If prompted for credentials, use your Forgejo login method.

    Exercise: step 5 (view live)

    Open the gallery:

    • https://braids.hackersanddesigners.nl/

    Find your card:

    • people/<your-slug>/

    Iterate:

    edit -> status -> add -> commit -> push -> refresh

    Common problems (fast fixes)

    Wrong branch:

    git branch
    +git commit -m "Add assets for <your-slug>"

    Small commits win. One change = one deposit.

    Exercise: step 4 (push your branch)

    git push -u origin people/<your-slug>

    (Again, change <your-slug>!)

    If prompted for credentials, use your Forgejo login method.

    Exercise: step 5 (view live)

    Open the gallery:

    • https://braids.hackersanddesigners.nl/

    Find your card:

    • people/<your-slug>/

    Iterate:

    edit -> status -> add -> commit -> push -> refresh

    Common problems (fast fixes)

    Wrong branch:

    git branch
     git checkout people/<your-slug>

    Nothing staged:

    git status
    -git add index.html

    Push rejected (main protected):

    • You are on main. Switch to your branch.

    Auth issues:

    • HTTPS: check username/password

    Suggested “good enough” commit messages

    Bad:

    • "update"
    • "stuff"
    • "changes"

    Better:

    • "Add animated gif and profile link"
    • "Change background and typography"
    • "Fix broken image path"

    Rule: message should still make sense in 6 months.

    Optional extension (if time remains)

    • Compare two branches visually (gallery view)
    • Show git log to narrate your work as a documented process
    • Merge other branches into your own

    Wrap-up

    Learn more:

    End: remind participants their branches will be removed after the workshop.

    \ No newline at end of file +git add index.html

    Push rejected (main protected):

    • You are on main. Switch to your branch.

    Auth issues:

    • HTTPS: check username/password

    Suggested “good enough” commit messages

    Bad:

    • "update"
    • "stuff"
    • "changes"

    Better:

    • "Add animated gif and profile link"
    • "Change background and typography"
    • "Fix broken image path"

    Rule: message should still make sense in 6 months.

    Optional extension (if time remains)

    • Compare two branches visually (gallery view)
    • Show git log to narrate your work as a documented process
    • Merge other branches into your own

    Wrap-up

    Learn more:

    End: remind participants their branches will be removed after the workshop.

    \ No newline at end of file diff --git a/html_output/assets/images/merge.png b/html_output/assets/images/merge.png new file mode 100644 index 0000000000000000000000000000000000000000..99e1ce037efdf5d5ea1f5b6e89b937089799f428 GIT binary patch literal 36667 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 )X;G17R!|ipr0M~512iMBz%Pz* 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

    s`^XX;s6*G6Oq#l0IFZnoHe>aIZ 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

    1. What changes hav - you intentionally select what becomes part of the record.

      Typical solo local workflow

      1. You initalise a directory on your computer with git.
      2. You make changes on the directory.
      3. You stage your changes and commit them.
      4. Repeat steps 2 and 3.

      Use case: tracking changes on a local, private folder, such as bookkeeping.

      Typical solo remote workflow

      1. You clone a repository from a remote host to your local computer.
      2. You make your changes to the repository.
      3. You stage and commit your changes.
      4. You push (upload) your commit up to the remote.
      5. Repeat steps 2, 3 and 4

      Use case: tracking and backing up a private folder, such as a password store.

      Typical collaborative remote workflow

      1. You clone a repository from a remote host to your local computer.
      2. You make your changes to the repository.
      3. You stage and commit your changes.
      4. You push (upload) your commit up to the remote.
      5. You pull (download) other people's commits from the remote.
      6. Repeat steps 5, 2, 3 and 4

      Use case: tracking and collaborating on a repository with others such as a website project.

      Core concept: Branching

      In git, a branch is a named series of commits.

      In the previous example, there is only one branch, named "main" by default.

      When you want to "take a detour" from the main course 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:

      • Experiment with a new feature affecting many files
      • Proposing an improvement to your collaborators
      • Have multiple versions of a website online
      • Making existing software compatible somewhere else

      There is a lot of discourse around when to branch and how often. It varies from person to person and group to group.

      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.

      Core concept: Merging

      In git, merging is when you consolidate commits from a separate branch into your own.

      There are various merging techniques, and most of the time, the automated algorithm will work.

      Sometimes, you might encounter a merge confilct: a section of a file where both branches have conflicting changes that cannot be automatically resolved. Here, you have 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.

      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 your commit (and new branch) up to the remote.
      6. You pull other people's commits on this branch from the remote.
      7. Repeat steps 6, 3, 4 and 5
      8. You switch back to "main" and merge "my-feature" into it.
      9. You push your new merge commit up to the "main" branch.

      Use case: you are designing a website for a client and want to show 3 different versions of it with different background colours.

      Use case: tracking and collaborating on a repository with others such as a website project, where two online versions of the website exist, a "safe" one that is available to the public, and an "experimental" one that is reserved for trying new features together.

      Recap

      • 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.
      • working tree: your files as they are right now in the repository
      • staging area: a place to add changes to
      • 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
      • branch: a named series of commits, a detour, a parallel timeline
      • merge: a consolidation of commits from another branch

      Install Git

      Check first:

      git --version

      If missing:

      • macOS: Xcode Command Line Tools
      • Windows: Git for Windows
      • Linux: package manager (apt/dnf/pacman)

      Minimum requirement: you can run git in a terminal.

      Commands: the essentials

      • git init (initalise a 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 log (see the timeline)
      • git checkout (visit the timeline at a specific checkpoint)
      • git clone (an existing repo)
      • git push (your commits to a remote server)
      • git pull (sync with a repo online and merge)
      • git branch (take a detour)
      • git merge (merge branches)

      Command: git init

      Create a repository in the current folder. -Use this when you are creating and working on your own projects.

      git init

      Creates a .git/ directory containing history + metadata.

      For the exercise we will use git clone instead of git init.

      Command: git status (your dashboard)

      git status

      Shows:

      • current branch
      • staged vs unstaged changes
      • untracked files

      Command: git add (select files)

      First, create a file

      nano index.html

      Stage files for the next commit.

      git add index.html

      Stage everything (use carefully):

      git add .

      Staging is curatorial: select what belongs together.

      Optional: git rm

      Remove a tracked file and stage the removal:

      git rm old.html
      -git commit -m "Remove old page"

      For this workshop you probably will not need it.

      Command: git commit (checkpoint)

      git commit -m "Added name to my page"

      Good commit message pattern:

      • What changed
      • Why it changed (reason/intent)
      • Scope stays small

      repeat edit > stage > commit a couple times?

      Command: git log (timeline)

      git log --oneline --graph

      Gives a quick "finding aid" of earlier commits. Press 'q' to exit.

      Command: git checkout (timetravel)

      git checkout your_commit_id

      See your working tree as it would have been at a specific commit on the timeline.

      Command: git clone

      Cloen (copy) a repository in the current folder. First, cd to a logical location in your computer, then:

      git clone https://git.hackersanddesigners.nl/hrk/braids
      -cd braids

      Downloads a repo from the web, complete with the full commit history and all changes.

      Make edits here as you wish then stage and commit them.

      Command: git push

      Push your commits to the server:

      git push -u origin main
      git push

      disabled push rights for now, only for demonstration purposes, will fail

      Command: git pull

      before we do this, one of us changes the background colour and pushes

      Pull updates from server:

      git pull

      During the exercise you mostly push your branch. -Pull is mainly for getting new changes on main (if needed).

      fact: git pull is actually a git fetch && git merge

      Command: git branch

      Choose a slug: lowercase, no spaces. This can be your name or an alias. Example: change people/<your-slug> in the command below to people/alex. From here on out replace <your-slug> with your chosen name.

      List branches:

      git branch

      Create a branch:

      git branch people/<your-slug>

      Switch to branch:

      git checkout people/<your-slug>

      Shortcut (create + switch):

      git checkout -b people/<your-slug>

      Branches are parallel dossiers: safe space for changes.

      Command: git merge

      ?

      Forgejo: what we use today

      • Forgejo is an open-source alternative to Github
      • Forgejo hosts the central repository (remote)

      You will:

      • create an account
      • clone via HTTPS
      • push your branch

      Share your username with us so we can add you as a collaborator

      Rules for today:

      • do NOT push to main
      • create your branch under people/<your-slug>

      Exercise overview

      You will build a (deliberately) simple page:

      • "Hi, I'm …"
      • maybe a gif?
      • a link?
      • optional: background, glitter, bad taste encouraged

      Workflow loop:

      clone -> branch -> edit -> status -> add -> commit -> push -> view -> iterate

      Exercise: step 1 (clone & branch)

      If everything went well in your initial clone & branch, check the repo with:

      git status
      -git branch

      The first time you checkout from https://git.hackersanddesigners.nl the server will ask you for credentials. These will be remembered, so only once.

      Exercise: step 2 (edit the page)

      Edit the root index.html (and optionally style.css, assets/).

      Make a visible change first:

      • Change the name to your name (or your alias)

      Then check changes:

      git diff
      -git status

      Exercise: step 3 (stage + commit)

      git add index.html
      +- 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.

      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 your commit (and new branch) up to the remote.
      6. You pull other people's commits on this branch from the remote.
      7. Repeat steps 6, 3, 4 and 5
      8. You switch back to "main" and merge "my-feature" into it.
      9. You push your new merge commit up to the "main" branch.

      Use case: you are designing a website for a client and want to show 3 different versions of it with different background colours.

      Use case: tracking and collaborating on a repository with others such as a website project, where two online versions of the website exist, a "safe" one that is available to the public, and an "experimental" one that is reserved for trying new features together.

      Recap

      • 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.
      • working tree: your files as they are right now in the repository
      • staging area: a place to add changes to
      • 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
      • branch: a named series of commits, a detour, a parallel timeline
      • merge: a consolidation of commits from another branch

      Install Git

      Check first:

      git --version

      If missing:

      • macOS: Xcode Command Line Tools
      • Windows: Git for Windows
      • Linux: package manager (apt/dnf/pacman)

      Minimum requirement: you can run git in a terminal.

      Commands: the essentials

      • git init (initalise a 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 log (see the timeline)
      • git checkout (visit the timeline at a specific checkpoint)
      • git clone (an existing repo)
      • git push (your commits to a remote server)
      • git pull (sync with a repo online and merge)
      • git branch (take a detour)
      • git merge (merge branches)

      Command: git init

      Create a repository in the current folder. +Use this when you are creating and working on your own projects.

      git init

      Creates a .git/ directory containing history + metadata.

      For the exercise we will use git clone instead of git init.

      Command: git status (your dashboard)

      git status

      Shows:

      • current branch
      • staged vs unstaged changes
      • untracked files

      Command: git add (select files)

      First, create a file

      nano index.html

      Stage files for the next commit.

      git add index.html

      Stage everything (use carefully):

      git add .

      Staging is curatorial: select what belongs together.

      Optional: git rm

      Remove a tracked file and stage the removal:

      git rm old.html
      +git commit -m "Remove old page"

      For this workshop you probably will not need it.

      Command: git commit (checkpoint)

      git commit -m "Added name to my page"

      Good commit message pattern:

      • What changed
      • Why it changed (reason/intent)
      • Scope stays small

      repeat edit > stage > commit a couple times?

      Command: git log (timeline)

      git log --oneline --graph

      Gives a quick "finding aid" of earlier commits. Press 'q' to exit.

      Command: git checkout (timetravel)

      git checkout your_commit_id

      See your working tree as it would have been at a specific commit on the timeline.

      Command: git clone

      Cloen (copy) a repository in the current folder. First, cd to a logical location in your computer, then:

      git clone https://git.hackersanddesigners.nl/hrk/braids
      +cd braids

      Downloads a repo from the web, complete with the full commit history and all changes.

      Make edits here as you wish then stage and commit them.

      Command: git push

      Push your commits to the server:

      git push -u origin main
      git push

      disabled push rights for now, only for demonstration purposes, will fail

      Command: git pull

      before we do this, one of us changes the background colour and pushes

      Pull updates from server:

      git pull

      During the exercise you mostly push your branch. +Pull is mainly for getting new changes on main (if needed).

      fact: git pull is actually a git fetch && git merge

      Command: git branch

      Choose a slug: lowercase, no spaces. This can be your name or an alias. Example: change people/<your-slug> in the command below to people/alex. From here on out replace <your-slug> with your chosen name.

      List branches:

      git branch

      Create a branch:

      git branch people/<your-slug>

      Switch to branch:

      git checkout people/<your-slug>

      Shortcut (create + switch):

      git checkout -b people/<your-slug>

      Branches are parallel dossiers: safe space for changes.

      Command: git merge

      ?

      Forgejo: what we use today

      • Forgejo is an open-source alternative to Github
      • Forgejo hosts the central repository (remote)

      You will:

      • create an account
      • clone via HTTPS
      • push your branch

      Share your username with us so we can add you as a collaborator

      Rules for today:

      • do NOT push to main
      • create your branch under people/<your-slug>

      Forgejo: account setup

      1. Create account at: git.hackersanddesigners.nl
      2. Confirm you can sign in

      Resources:

      Exercise overview

      You will build a (deliberately) simple page:

      • "Hi, I'm …"
      • maybe a gif?
      • a link?
      • optional: background, glitter, bad taste encouraged

      Workflow loop:

      clone -> branch -> edit -> status -> add -> commit -> push -> view -> iterate

      Exercise: step 1 (clone & branch)

      If everything went well in your initial clone & branch, check the repo with:

      git status
      +git branch

      The first time you checkout from https://git.hackersanddesigners.nl the server will ask you for credentials. These will be remembered, so only once.

      Exercise: step 2 (edit the page)

      Edit the root index.html (and optionally style.css, assets/).

      Make a visible change first:

      • Change the name to your name (or your alias)

      Then check changes:

      git diff
      +git status

      Exercise: step 3 (stage + commit)

      git add index.html
       git commit -m "Customize profile page for <your-slug>"

      If you added assets:

      git add assets/
      -git commit -m "Add assets for <your-slug>"

      Small commits win. One change = one deposit.

      Exercise: step 4 (push your branch)

      git push -u origin people/<your-slug>

      (Again, change <your-slug>!)

      If prompted for credentials, use your Forgejo login method.

      Exercise: step 5 (view live)

      Open the gallery:

      • https://braids.hackersanddesigners.nl/

      Find your card:

      • people/<your-slug>/

      Iterate:

      edit -> status -> add -> commit -> push -> refresh

      Common problems (fast fixes)

      Wrong branch:

      git branch
      +git commit -m "Add assets for <your-slug>"

      Small commits win. One change = one deposit.

      Exercise: step 4 (push your branch)

      git push -u origin people/<your-slug>

      (Again, change <your-slug>!)

      If prompted for credentials, use your Forgejo login method.

      Exercise: step 5 (view live)

      Open the gallery:

      • https://braids.hackersanddesigners.nl/

      Find your card:

      • people/<your-slug>/

      Iterate:

      edit -> status -> add -> commit -> push -> refresh

      Common problems (fast fixes)

      Wrong branch:

      git branch
       git checkout people/<your-slug>

      Nothing staged:

      git status
      -git add index.html

      Push rejected (main protected):

      • You are on main. Switch to your branch.

      Auth issues:

      • HTTPS: check username/password

      Suggested “good enough” commit messages

      Bad:

      • "update"
      • "stuff"
      • "changes"

      Better:

      • "Add animated gif and profile link"
      • "Change background and typography"
      • "Fix broken image path"

      Rule: message should still make sense in 6 months.

      Optional extension (if time remains)

      • Compare two branches visually (gallery view)
      • Show git log to narrate your work as a documented process
      • Merge other branches into your own

      Wrap-up

      Learn more:

      End: remind participants their branches will be removed after the workshop.

      \ No newline at end of file +git add index.html

      Push rejected (main protected):

      • You are on main. Switch to your branch.

      Auth issues:

      • HTTPS: check username/password

      Suggested “good enough” commit messages

      Bad:

      • "update"
      • "stuff"
      • "changes"

      Better:

      • "Add animated gif and profile link"
      • "Change background and typography"
      • "Fix broken image path"

      Rule: message should still make sense in 6 months.

      Optional extension (if time remains)

      • Compare two branches visually (gallery view)
      • Show git log to narrate your work as a documented process
      • Merge other branches into your own

      Wrap-up

      Learn more:

      End: remind participants their branches will be removed after the workshop.

      \ No newline at end of file diff --git a/slides.rst b/slides.rst index bd2ceb0..660b718 100644 --- a/slides.rst +++ b/slides.rst @@ -305,10 +305,15 @@ Core concept: Merging 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: 200px + .. image:: assets/images/merge.png + :width: 300px :scale: 100 % +---- + +.. image:: assets/images/branches.png + :width: 300px + :scale: 100 % ----