7 Commits

Author SHA1 Message Date
Bjarke Sporring
cba2d9bb16 chore: cleanup 2026-01-16 12:15:11 +01:00
Bjarke Sporring
968a44f9a5 fix: cleanup some explanations 2026-01-16 12:11:03 +01:00
Bjarke Sporring
c39573573f fix: remove mention of rebase 2026-01-16 11:13:11 +01:00
Bjarke Sporring
ee67433fdd refactor: minor cleanup and expanding explanations for multiplayer 2026-01-16 11:12:53 +01:00
Bjarke Sporring
100e89b23d refactor: update docs for the install.ps1 script 2026-01-16 10:26:02 +01:00
b58080b8e8 Merge pull request 'refactor-reset-revert' (#3) from refactor-reset-revert into main
Reviewed-on: #3
2026-01-16 09:19:41 +00:00
2240cbe10d Merge pull request 'refactor-reset-revert' (#1) from refactor-reset-revert into main
Reviewed-on: #1
2026-01-15 16:32:19 +00:00
5 changed files with 70 additions and 91 deletions

View File

@@ -4,7 +4,7 @@
By the end of this module, you will:
- Understand what cherry-picking is and how it works
- Know when to use cherry-pick vs merge or rebase
- Know when to use cherry-pick vs merge
- Apply specific commits from one branch to another
- Understand common use cases for cherry-picking
- Learn how cherry-pick creates new commits with different hashes

View File

@@ -34,7 +34,7 @@ Participants need:
---
## Pre-Workshop Setup
## Setup
### Step 1: Add User Accounts
@@ -131,15 +131,6 @@ git add numbers.txt
git commit -m "feat: add shuffled numbers for challenge"
git push
```
### Step 4: Verify Student Access
Students added to the project automatically have access. Verify:
1. Go to **Project Settings****Repositories****number-challenge**
2. Click **Security** tab
3. Verify project team has **Contribute** permission
---
## During the Workshop
@@ -153,12 +144,12 @@ Students added to the project automatically have access. Verify:
### The Exercise Flow
1. **Students pull** the latest changes
2. **One person** moves a number to its correct position
2. **One person** creates a branch, moves a number to its correct position
3. **They commit and push**
4. **Others pull** and see the change
5. **Repeat** until sorted
### Creating Conflicts (The Learning Moment)
### Same branch conflicts
Conflicts happen naturally when multiple people edit at once. You can encourage this:
@@ -166,13 +157,6 @@ Conflicts happen naturally when multiple people edit at once. You can encourage
- Watch them experience the push rejection
- Guide them through pulling and resolving the conflict
### Monitoring Progress
Check progress in Azure DevOps:
- **Repos → Commits**: See who's contributing
- **Repos → Files → numbers.txt**: See current state
### Common Issues
**"I can't push!"**

View File

@@ -20,15 +20,15 @@ SSH (Secure Shell) keys provide a secure way to authenticate with Azure DevOps w
Before starting, ensure you have:
- **Git 2.23 or higher** installed
```powershell
```pwsh
git --version
```
- **Azure DevOps account** with access to your organization/project
- If you don't have one, create a free account at [dev.azure.com](https://dev.azure.com)
- If you don't ask your organisation for an invitation
- **PowerShell 7+ or Bash terminal** for running commands
```powershell
```pwsh
pwsh --version
```
@@ -42,18 +42,18 @@ SSH authentication uses a key pair: a private key (stays on your computer) and a
Open your terminal and run:
```powershell
```pwsh
ssh-keygen -t rsa
```
**Note about RSA:** Azure DevOps currently only supports RSA SSH keys. While newer algorithms like Ed25519 offer better security and performance, they are not yet supported by Azure DevOps. See the note at the end of this guide for more information.
**Note about RSA:** Azure DevOps currently only supports RSA SSH keys. While newer algorithms like Ed25519 offer better security and performance, they are not yet supported by Azure DevOps.
### Save Location
When prompted for the file location, press `Enter` to accept the default:
```
Enter file in which to save the key (/Users/yourname/.ssh/id_rsa):
Enter file in which to save the key (C:\Users\YourName\.ssh\id_rsa):
```
**Default locations:**
@@ -73,7 +73,7 @@ Enter same passphrase again:
Check that your keys were created:
**Windows PowerShell:**
```powershell
```pwsh
dir $HOME\.ssh\
```
@@ -108,27 +108,17 @@ Now you'll upload your public key to Azure DevOps.
Open your terminal and display your public key:
**Linux/Mac:**
```bash
cat ~/.ssh/id_rsa.pub
```
**Windows PowerShell:**
```powershell
```pwsh
type $HOME\.ssh\id_rsa.pub
```
**Windows Command Prompt:**
```cmd
type %USERPROFILE%\.ssh\id_rsa.pub
```
The output will look like this:
```
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC2YbXnrSK5TTflZSwUv9KUedvI4p3JJ4dHgwp/SeJGqMNWnOMDbzQQzYT7E39w9Q8ItrdWsK4vRLGY2B1rQ+BpS6nn4KhTanMXLTaUFDlg6I1Yn5S3cTTe8dMAoa14j3CZfoSoRRgK8E+ktNb0o0nBMuZJlLkgEtPIz28fwU1vcHoSK7jFp5KL0pjf37RYZeHkbpI7hdCG2qHtdrC35gzdirYPJOekErF5VFRrLZaIRSSsX0V4XzwY2k1hxM037o/h6qcTLWfi5ugbyrdscL8BmhdGNH4Giwqd1k3MwSyiswRuAuclYv27oKnFVBRT+n649px4g3Vqa8dh014wM2HDjMGENIkHx0hcV9BWdfBfTSCJengmosGW+wQfmaNUo4WpAbwZD73ALNsoLg5Yl1tB6ZZ5mHwLRY3LG2BbQZMZRCELUyvbh8ZsRksNN/2zcS44RIQdObV8/4hcLse30+NQ7GRaMnJeAMRz4Rpzbb02y3w0wNQFp/evj1nN4WTz6l8= your@email.com
```
**Copy the entire output** (from `ssh-rsa` to your email address).
**Copy the entire output** (from `ssh-rsa` to and including your email address).
### Paste and Name Your Key
@@ -152,12 +142,12 @@ Now that SSH is configured, you can use it for all Git operations.
To clone a repository using SSH:
```bash
```pwsh
git clone git@ssh.dev.azure.com:v3/{organization}/{project}/{repository}
```
**Example** (replace placeholders with your actual values):
```bash
```pwsh
git clone git@ssh.dev.azure.com:v3/myorg/git-workshop/great-print-project
```
@@ -175,7 +165,7 @@ git clone git@ssh.dev.azure.com:v3/myorg/git-workshop/great-print-project
All standard Git commands now work seamlessly with SSH:
```bash
```pwsh
# Pull latest changes
git pull
@@ -195,7 +185,6 @@ git push -u origin feature-branch
## Additional Resources
- **Azure DevOps SSH Documentation**: [https://docs.microsoft.com/en-us/azure/devops/repos/git/use-ssh-keys-to-authenticate](https://docs.microsoft.com/en-us/azure/devops/repos/git/use-ssh-keys-to-authenticate)
- **SSH Key Best Practices**: [https://security.stackexchange.com/questions/tagged/ssh-keys](https://security.stackexchange.com/questions/tagged/ssh-keys)
- **Git with SSH**: [https://git-scm.com/book/en/v2/Git-on-the-Server-Generating-Your-SSH-Public-Key](https://git-scm.com/book/en/v2/Git-on-the-Server-Generating-Your-SSH-Public-Key)
---
@@ -204,17 +193,14 @@ git push -u origin feature-branch
### Common Commands
```bash
```pwsh
# Generate RSA key
ssh-keygen -t
# Display public key (Linux/Mac)
cat ~/.ssh/id_rsa.pub
# Display public key (Windows)
# Display public key
type $HOME\.ssh\id_rsa.pub
# Clone with SSH
# Clone with SSH. You can find this url on Azure DevOps
git clone git@ssh.dev.azure.com:v3/{org}/{project}/{repo}
# Check remote URL

View File

@@ -12,7 +12,6 @@ Learn to collaborate on a shared repository using:
```
1. Create branch → 2. Make changes → 3. Push branch
6. Delete branch ← 5. Merge PR ← 4. Create PR
```
@@ -110,9 +109,15 @@ git pull
1. Both people should create a branch with changes to `feature-1` and `feature-2`, you task is to change the position of number 5. Where you place it is up to you.
2. Now both people should push their respective branch `git push <the-branch>`
3. Now merge `feature-1` branch first, going throught the Pull Request flow.
1. Person A pushes their branch `git push feature-1`
2. Person B pushes their branch `git push feature-2`
3. Now merge `feature-1` branch first, going throught the Pull Request flow (see Step 5).
4. Then merge `feature-2` branch second, and notice you'll get a MERGE CONFLICT.
5. It is not the owner of `feature-2` branch to resolve the conflict. This is done by merge the `main` branch into `feature-2` locally and so the owner of `feature-2` has to do the following
5. The owner of `feature-2` (Person B) is now tasked with resolving the conflict.
In order to solve merge conflicts through a Shared Server (Azure DevOps) you have to do merges in <q>reverse</q>, meaning: Instead of, like in module <q>03-branching-and-merging</q>, merging the feature-branch into the `main` branch, we merge the `main` branch into the feature branch.
Doing so ensures that the `main` branch maintains the integrity it's supposed to have and the conflicts are solved on the feature-branch side before being merged into the `main` branch. The idea here being that, we ONLY modify the main branch through merges facilitated (and reviewed) by Pull Requests. We want the `main` branch to be as stable as possible.
```pwsh
# First get the latest changes on main
git switch main
@@ -123,7 +128,8 @@ git pull
# Now we resolve the merge. We're merging the main branch INTO the feature-2 branch.
git merge main
# Resolve the merge conflict in numbers.txt
# Resolve the merge conflict in numbers.txt by opening in VSCode and choosing the changes you want.
# How you solve it is up to you.
# Once resolved
git add numbers.txt
git commit
@@ -137,30 +143,29 @@ git pull
| Command | What It Does |
|---------|--------------|
| `git switch -c <name>` | Create and switch to new branch |
| `git push -u origin <branch>` | Push branch to Azure DevOps |
| `git switch main` | Switch to main branch |
| `git switch -c <branch-name>` | Create and switch to new branch |
| `git switch <branch-name>` | Switch to branch |
| `git push` | Push branch to Azure DevOps |
| `git pull` | Get latest changes from remote |
---
## Common Issues
## Cheatsheet
### "My PR has conflicts"
1. Update your branch with latest main:
```powershell
git switch main
git pull
git switch <branch-name>
git merge main
```
2. Resolve conflicts in VS Code
3. Commit and push again
### Solving merge conflicts
```pwsh
git switch main
git pull
git switch <branch-name>
git merge main
# ... Solve the conflicts
git push
```
### "I need to make more changes to my PR"
Just commit and push to the same branch - the PR updates automatically:
```powershell
```pwsh
git add .
git commit -m "fix: address review feedback"
git push

View File

@@ -1,35 +1,39 @@
#!/usr/bin/env pwsh
<#
.SYNOPSIS
Installs all prerequisites for Git Workshop using winget and clones the repository.
.SYNOPSIS
Installs all prerequisites for Git Workshop using winget (which is a CLI
tool to the Windows Package Manager Server) and clones the workshop
repository.
.DESCRIPTION
This script automates the installation of required tools for the Git Workshop:
- PowerShell 7 (cross-platform PowerShell)
- Git 2.23+ (version control system)
- Visual Studio Code (code editor with Git integration)
.DESCRIPTION
This script automates the installation of required tools for the Git Workshop:
- PowerShell 7 (cross-platform PowerShell)
- Git 2.23+ (version control system)
- Visual Studio Code (code editor with Git integration)
Optional tools (with user prompts):
- Windows Terminal (modern terminal experience)
Optional tools (with user prompts):
- Windows Terminal (modern terminal experience)
The script checks for existing installations, shows clear progress, and verifies
each installation succeeded. At the end, it clones the repository and can
open it in VSCode for immediate workshop access.
The script checks for existing installations, shows clear progress, and verifies
each installation succeeded. At the end, it clones the repository and can
open it in VSCode for immediate workshop access.
One-shot installation:
Invoke-RestMethod -Uri https://git.frod.dk/floppydiscen/git-workshop/raw/branch/main/install.ps1 | Invoke-Expression
One-shot installation:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://git.frod.dk/floppydiscen/git-workshop/raw/branch/main/install.ps1 | Invoke-Expression
.EXAMPLE
PS> Invoke-RestMethod -Uri https://git.frod.dk/floppydiscen/git-workshop/raw/branch/main/install.ps1 | Invoke-Expression
Runs the complete installation and setup in one command.
.EXAMPLE
PS> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
PS> Invoke-RestMethod -Uri https://git.frod.dk/floppydiscen/git-workshop/raw/branch/main/install.ps1 | Invoke-Expression
Runs the complete installation and setup in one command.
.EXAMPLE
PS> .\install.ps1
Runs the installation script with interactive prompts.
.EXAMPLE
PS> .\install.ps1
Runs the installation script with interactive prompts.
.NOTES
Requires Windows 11 with winget (App Installer) available.
Some installations may require administrator privileges.
.NOTES
Requires Windows 11 with winget (App Installer) available.
Some installations may require administrator privileges.
#>
[CmdletBinding()]