Git Workflow¶
This pages shows the recommended Git workflow to keep the local repository clean and organized while ensuring smooth collaboration among team members.
Prerequisites¶
Make sure you have Git (version 2.23 and above) installed and properly configured especially for authentication.
Fork and clone the repository¶
Fork the repository to your own namespace, and let us take https://github.com/<username>/ss-python as example.
Clone the repository and navigate to the root directory:
git clone git@github.com:<username>/ss-python.git
cd ss-python
Configure the remote¶
Add and update the upstream remote repository:
git remote add upstream https://github.com/serious-scaffold/ss-python
git fetch upstream
Configure git to pull main branch from the upstream remote:
git config --local branch.main.remote upstream
Configure git never to push to the upstream remote:
git remote set-url --push upstream git@github.com/<username>/ss-python.git
Verify the remote configuration¶
List the remote repositories with urls:
git remote -v
You should have two remote repositories: origin to your forked CPython repository, and upstream pointing to the official CPython repository:
origin git@github.com:<username>/ss-python.git (fetch)
origin git@github.com:<username>/ss-python.git (push)
upstream https://github.com/serious-scaffold/ss-python (fetch)
upstream git@github.com:<username>/ss-python.git (push)
Note that the push url of upstream repository is the forked repository.
Show the upstream for main branch:
git config branch.main.remote
You should see upstream here.
Work on a feature branch¶
Create and switch to a new branch from main:
git switch -c <branch-name> main
Stage the changed files:
git add -p # to review and add changes to existing files
git add <filename1> <filename2> # to add new files
Commit the staged files:
git commit -m "the commit message"
Push the committed changes:
git push
Create a pull request¶
Navigate to the hosting platform and create a pull request.
After the pull request is merged, you need to delete the branch in your namespace.
Note
It is recommended to configure the automatic deletion of the merged branches.
Housekeeping the cloned repository¶
Update the main branch from upstream:
git switch main
git pull upstream main
Remove deleted remote-tracking references:
git fetch --prune origin
Remove local branches:
git branch -D <branch-name>
After all these operations, you should be ready to Work on a feature branch again.