Compare commits
8 Commits
advanced-c
...
c39573573f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c39573573f | ||
|
|
ee67433fdd | ||
|
|
100e89b23d | ||
| b58080b8e8 | |||
|
|
6cf0418ebd | ||
|
|
a8e9507f89 | ||
| 2240cbe10d | |||
|
|
a895abdd03 |
@@ -307,44 +307,6 @@ git merge main
|
||||
git pull origin main
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### "I'm on the wrong branch!"
|
||||
|
||||
```pwsh
|
||||
# Switch to the correct branch
|
||||
git switch correct-branch
|
||||
|
||||
# Check current branch anytime
|
||||
git branch
|
||||
```
|
||||
|
||||
### "I made commits on the wrong branch!"
|
||||
|
||||
Don't panic! You can move commits to another branch:
|
||||
|
||||
```pwsh
|
||||
# Create the correct branch from current state
|
||||
git branch correct-branch
|
||||
|
||||
# Switch to wrong branch and remove the commits
|
||||
git switch wrong-branch
|
||||
git reset --hard HEAD~2 # Remove last 2 commits (adjust number)
|
||||
|
||||
# Switch to correct branch - commits are there!
|
||||
git switch correct-branch
|
||||
```
|
||||
|
||||
### "The merge created unexpected results!"
|
||||
|
||||
```pwsh
|
||||
# Undo the merge
|
||||
git merge --abort
|
||||
|
||||
# Or if already committed:
|
||||
git reset --hard HEAD~1
|
||||
```
|
||||
|
||||
### "I want to see what changed in a merge!"
|
||||
|
||||
```pwsh
|
||||
@@ -368,13 +330,13 @@ git diff main..feature-branch
|
||||
|
||||
After completing this module, you understand:
|
||||
|
||||
- ✅ Branches create independent lines of development
|
||||
- ✅ `git switch -c` creates a new branch
|
||||
- ✅ Changes in one branch don't affect others
|
||||
- ✅ `git merge` combines branches
|
||||
- ✅ Merge commits have two parent commits
|
||||
- ✅ `git log --graph` visualizes branch history
|
||||
- ✅ Branches are pointers, not copies of files
|
||||
- Branches create independent lines of development
|
||||
- `git switch -c` creates a new branch
|
||||
- Changes in one branch don't affect others
|
||||
- `git merge` combines branches
|
||||
- Merge commits have two parent commits
|
||||
- `git log --graph` visualizes branch history
|
||||
- Branches are pointers, not copies of files
|
||||
|
||||
## Next Steps
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -34,7 +34,7 @@ Participants need:
|
||||
|
||||
---
|
||||
|
||||
## Pre-Workshop Setup
|
||||
## Setup
|
||||
|
||||
### Step 1: Add User Accounts
|
||||
|
||||
@@ -235,5 +235,3 @@ To reuse the repository:
|
||||
- **Keep groups small** (2 people per repository) for more interaction
|
||||
- **Encourage communication** - the exercise works best when people talk
|
||||
- **Let conflicts happen** - they're the best learning opportunity
|
||||
- **Walk the room** - help students who get stuck
|
||||
- **Point students to 03_TASKS.md** - Simple explanations of clone, push, pull, and fetch for beginners
|
||||
|
||||
@@ -25,7 +25,7 @@ Before starting, ensure you have:
|
||||
```
|
||||
|
||||
- **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
|
||||
@@ -46,14 +46,14 @@ Open your terminal and run:
|
||||
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:**
|
||||
@@ -61,7 +61,7 @@ Enter file in which to save the key (/Users/yourname/.ssh/id_rsa):
|
||||
|
||||
### Passphrase (Optional but Recommended)
|
||||
|
||||
You'll be prompted to enter a passphrase, just press `Enter` no password is needed:
|
||||
You'll be prompted to enter a passphrase, just press `Enter` no password is needed (recommended but not needed):
|
||||
|
||||
```
|
||||
Enter passphrase (empty for no passphrase):
|
||||
@@ -72,7 +72,6 @@ Enter same passphrase again:
|
||||
|
||||
Check that your keys were created:
|
||||
|
||||
**Linux/Mac:**
|
||||
**Windows PowerShell:**
|
||||
```powershell
|
||||
dir $HOME\.ssh\
|
||||
@@ -164,33 +163,14 @@ git clone git@ssh.dev.azure.com:v3/myorg/git-workshop/great-print-project
|
||||
|
||||
**How to find your SSH URL:**
|
||||
1. Navigate to your repository in Azure DevOps
|
||||

|
||||
2. Click **Clone** in the top-right
|
||||
3. Select **SSH** from the dropdown
|
||||
4. Copy the SSH URL
|
||||
|
||||

|
||||

|
||||
*Select SSH from the clone dialog to get your repository's SSH URL*
|
||||
|
||||
### Convert Existing HTTPS Repository to SSH
|
||||
|
||||
If you already cloned a repository using HTTPS, you can switch it to SSH:
|
||||
|
||||
```bash
|
||||
cd /path/to/your/repository
|
||||
git remote set-url origin git@ssh.dev.azure.com:v3/{organization}/{project}/{repository}
|
||||
```
|
||||
|
||||
**Verify the change:**
|
||||
```bash
|
||||
git remote -v
|
||||
```
|
||||
|
||||
You should see SSH URLs:
|
||||
```
|
||||
origin git@ssh.dev.azure.com:v3/myorg/git-workshop/great-print-project (fetch)
|
||||
origin git@ssh.dev.azure.com:v3/myorg/git-workshop/great-print-project (push)
|
||||
```
|
||||
|
||||
### Daily Git Operations
|
||||
|
||||
All standard Git commands now work seamlessly with SSH:
|
||||
@@ -214,7 +194,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)
|
||||
@@ -235,15 +214,9 @@ cat ~/.ssh/id_rsa.pub
|
||||
# Display public key (Windows)
|
||||
type $HOME\.ssh\id_rsa.pub
|
||||
|
||||
# Test SSH connection
|
||||
ssh -T git@ssh.dev.azure.com
|
||||
|
||||
# Clone with SSH
|
||||
git clone git@ssh.dev.azure.com:v3/{org}/{project}/{repo}
|
||||
|
||||
# Convert HTTPS to SSH
|
||||
git remote set-url origin git@ssh.dev.azure.com:v3/{org}/{project}/{repo}
|
||||
|
||||
# Check remote URL
|
||||
git remote -v
|
||||
```
|
||||
@@ -256,7 +229,7 @@ git@ssh.dev.azure.com:v3/{organization}/{project}/{repository}
|
||||
|
||||
**Example:**
|
||||
```
|
||||
git@ssh.dev.azure.com:v3/mycompany/git-workshop/great-print-project
|
||||
git@ssh.dev.azure.com:v3/novenco/software/git-workshop
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -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
|
||||
|
||||
148
01-essentials/08-multiplayer/README.md
Normal file
148
01-essentials/08-multiplayer/README.md
Normal file
@@ -0,0 +1,148 @@
|
||||
# Multiplayer Git
|
||||
|
||||
Work with others using branches and pull requests.
|
||||
|
||||
## Goal
|
||||
|
||||
Learn to collaborate on a shared repository using:
|
||||
- **Branches** - work independently without breaking main
|
||||
- **Pull Requests** - review and merge changes safely
|
||||
|
||||
## The Workflow
|
||||
|
||||
```
|
||||
1. Create branch → 2. Make changes → 3. Push branch
|
||||
↓
|
||||
6. Delete branch ← 5. Merge PR ← 4. Create PR
|
||||
```
|
||||
|
||||
This is how professional teams work together on code.
|
||||
|
||||
---
|
||||
|
||||
## Step 1: Clone the Repository
|
||||
|
||||
Get the repository URL from your facilitator, then:
|
||||
|
||||
```powershell
|
||||
git clone <repository-url>
|
||||
code <repository-name>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Step 2: Create a Branch
|
||||
|
||||
Never work directly on `main`. Create your own branch:
|
||||
|
||||
```powershell
|
||||
git switch -c <branch>
|
||||
```
|
||||
|
||||
This creates a new branch and switches to it.
|
||||
|
||||
---
|
||||
|
||||
## Step 3: Make Changes
|
||||
|
||||
1. Open `numbers.txt` in VS Code
|
||||
2. Move one number to its correct position
|
||||
3. Save the file (`Ctrl+S`)
|
||||
|
||||
---
|
||||
|
||||
## Step 4: Commit and Push
|
||||
|
||||
```powershell
|
||||
git add .
|
||||
git commit -m "fix: move 7 to correct position"
|
||||
git push feature-2
|
||||
```
|
||||
|
||||
Your branch is now on Azure DevOps.
|
||||
|
||||
---
|
||||
|
||||
## Step 5: Create a Pull Request
|
||||
|
||||
1. Go to Azure DevOps in your browser
|
||||
2. Navigate to **Repos** → **Pull Requests**
|
||||
3. Click **New Pull Request**
|
||||
4. Set:
|
||||
- **Source branch:** `feature/<your-name>`
|
||||
- **Target branch:** `main`
|
||||
5. Add a title describing your change
|
||||
6. Click **Create**
|
||||
|
||||
---
|
||||
|
||||
## Step 6: Review and Merge
|
||||
|
||||
1. Review the changes shown in the PR
|
||||
2. If everything looks good, click **Complete**
|
||||
3. Select **Complete merge**
|
||||
4. Your changes are now in `main`
|
||||
|
||||
---
|
||||
|
||||
## Step 7: Update Your Local Main
|
||||
|
||||
After merging, update your local copy:
|
||||
|
||||
```powershell
|
||||
git switch main
|
||||
git pull
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Step 8: Repeat
|
||||
|
||||
1. Create a new branch for your next change
|
||||
2. Make changes, commit, push
|
||||
3. Create another PR
|
||||
4. Continue until all numbers are sorted
|
||||
|
||||
---
|
||||
|
||||
## Quick Reference
|
||||
|
||||
| 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 pull` | Get latest changes from remote |
|
||||
|
||||
---
|
||||
|
||||
## Common Issues
|
||||
|
||||
### "I accidentally committed to main"
|
||||
|
||||
Switch to a new branch and push from there:
|
||||
```powershell
|
||||
git switch -c feature/<your-name>
|
||||
git push -u origin feature/<your-name>
|
||||
```
|
||||
|
||||
### "My PR has conflicts"
|
||||
|
||||
1. Update your branch with latest main:
|
||||
```powershell
|
||||
git switch main
|
||||
git pull
|
||||
git switch feature/<your-name>
|
||||
git merge main
|
||||
```
|
||||
2. Resolve conflicts in VS Code
|
||||
3. Commit and push again
|
||||
|
||||
### "I need to make more changes to my PR"
|
||||
|
||||
Just commit and push to the same branch - the PR updates automatically:
|
||||
```powershell
|
||||
git add .
|
||||
git commit -m "fix: address review feedback"
|
||||
git push
|
||||
```
|
||||
BIN
01-essentials/08-multiplayer/images/05_repos.png
Normal file
BIN
01-essentials/08-multiplayer/images/05_repos.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 53 KiB |
BIN
01-essentials/08-multiplayer/images/06_choose_ssh.png
Normal file
BIN
01-essentials/08-multiplayer/images/06_choose_ssh.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 165 KiB |
50
install.ps1
50
install.ps1
@@ -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()]
|
||||
|
||||
Reference in New Issue
Block a user