Collaboration with GitHub

Remote repositories (remotes)

A remote is a Git repository hosted on a server (GitHub, GitLab, Bitbucket). It enables collaboration by synchronizing code between developers.

# View configured remotes
git remote -v

# Add a remote
git remote add origin https://github.com/user/projet.git

# Change a remote's URL
git remote set-url origin git@github.com:user/projet.git

Push — send code

# Push the current branch
git push origin main

# First push of a new branch (with tracking)
git push -u origin feature/login
# Afterwards, a simple git push is enough
git push

# Push all branches
git push --all origin

# Push tags
git push --tags

Pull — retrieve code

# Fetch and merge changes
git pull origin main

# Equivalent to:
git fetch origin
git merge origin/main

# Pull with rebase (cleaner history)
git pull --rebase origin main

Fetch — retrieve without merging

# Fetch remote information without modifying your files
git fetch origin

# View remote branches
git branch -r

# View differences with the remote
git diff main origin/main

# Switch to a remote branch
git checkout -b feature/api origin/feature/api

Pull Requests (PR)

A Pull Request is a request to merge one branch into another, with a code review process.

Pull Request workflow

1. Create a branch
   git checkout -b feature/cart

2. Develop and commit
   git add .
   git commit -m "Add the shopping cart"

3. Push the branch
   git push -u origin feature/cart

4. Create the PR on GitHub
   → Clear title and detailed description

5. Code review
   → Colleagues comment and approve

6. Merge the PR
   → Squash, merge, or rebase

7. Delete the branch
   git branch -d feature/cart

Writing a good Pull Request

## Description
Addition of the shopping cart system allowing users
to add products and place orders.

## Changes
- Creation of the CartComponent
- Addition of CartService with localStorage management
- Integration with the /orders API

## How to test
1. Log in with a user account
2. Add a product to the cart
3. Verify that the counter updates
4. Complete the order

## Screenshots
[If relevant, add screenshots]

Merge strategies

Strategy Result When to use
Merge commit Preserves all commits + merge commit When full history matters
Squash and merge A single clean commit Feature with many small commits
Rebase and merge Linear history Preference for a clean history

Working as a team

Fork and open source contribution

# 1. Fork the project on GitHub (via the web interface)

# 2. Clone your fork
git clone git@github.com:your-user/projet.git
cd projet

# 3. Add the original repository as a remote
git remote add upstream https://github.com/original/projet.git

# 4. Create a branch for your contribution
git checkout -b fix/typo-readme

# 5. Make your changes and commit
git add .
git commit -m "Fix typos in the README"

# 6. Push to your fork
git push origin fix/typo-readme

# 7. Create a PR from your fork to the original repository

# Keep your fork up to date
git fetch upstream
git checkout main
git merge upstream/main
git push origin main

Code review — best practices

As a reviewer:

  • Be constructive and kind
  • Ask questions rather than imposing
  • Focus on logic, not style (the linter handles that)
  • Approve when it's ready, don't block on minor details

As an author:

  • Keep PRs small and focused (< 400 lines ideally)
  • Respond to all comments
  • Don't take feedback personally

Tags and releases

Tags mark important versions in the history.

# Create an annotated tag
git tag -a v1.0.0 -m "First stable release"

# Create a tag on an older commit
git tag -a v0.9.0 abc1234 -m "Beta version"

# List tags
git tag
git tag -l "v1.*"                # Filter

# Push tags
git push origin v1.0.0
git push --tags                  # All tags

# Delete a tag
git tag -d v1.0.0                # Local
git push origin --delete v1.0.0  # Remote

Semantic Versioning (SemVer)

v MAJOR . MINOR . PATCH
  |       |       └── Bug fixes (backward compatible)
  |       └── New features (backward compatible)
  └── Breaking changes (not backward compatible)

Examples:
v1.0.0 → v1.0.1  # Bug fix
v1.0.1 → v1.1.0  # New feature
v1.1.0 → v2.0.0  # Breaking change

GitHub Actions — introduction to CI/CD

GitHub Actions allows you to automate tasks on every push or PR.

# .github/workflows/ci.yml
name: CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install dependencies
        run: npm ci

      - name: Run tests
        run: npm test

      - name: Run the linter
        run: npm run lint

Collaboration best practices

  1. Always go through PRs — never push directly to main
  2. Protect the main branch — require at least one approval
  3. Sync regularly with git pull --rebase
  4. Communicate in PRs — use descriptions and comments
  5. Use conventions for branch names and commit messages
  6. Automate with CI/CD — tests, lint, build on every PR
  7. Tag your releases with semantic versioning

We use Microsoft Clarity to understand how the site is used and improve it. By continuing to browse, you accept it. You can disable it at any time.