xtofl
Posted on March 19, 2020
Context
Imagine a pandemic.
You're suddenly forced to work from home. Network resources are scarse, but you want to be able to train your distributed git skills.
There are a ton of resources out there:
- the git parable (talk about this post)
- extensive katas
- learn git branching
- ...
But don't you need a git server and some separate computers to do all that?
Well, good news: for the bulk of the skills, you can go with a setup on a single PC that allows a single person to mimic the real thing quite well.
And here's a way you can create a disposable sandbox to start training.
Prerequisites
-
git
command line client is installed on your system
The Setup
I want to fake a central repository and two members in the team: me (Alice) and someone else (Bob). (I don't mind role plays)
We want an Authorative Repository to push to and pull from. And we want to have some clones we can do some work in.
And since this should be a sandbox, you want to be able to throw everything away and start from scratch.
Instructions
- Create a sandbox folder (
mkdir sandbox; cd sandbox
) - Create an authorative repository (
git init --bare central.git
) - Be Alice: clone the central (
git clone central.git alices-clone
)git clone central.git alices-clone
cd alices-clone
git config user.name Alice; git config user.email alice@sandbox
cd ..
- Be Bob: clone the central
git clone central.git bobs-clone
cd bobs-clone
git config user.name Bob; git config user.email bob@sandbox
cd ..
There you go. Now all is left: playing around. And then, throwing all away and starting over. That's what sandboxes are for.
(Note: depending on the system, you may need to allow users to push to the central. TBI).
Playing Around
Here's Bob.
PS C:\Users\krpi\sandbox> git clone .\central.git\ bobs-clone; cd bobs-clone
PS C:\Users\krpi\sandbox\bobs-clone> git config user.name Bob; git config user.email bob@sandbox
PS C:\Users\krpi\sandbox\bobs-clone> echo "Do read me" >> README.txt
PS C:\Users\krpi\sandbox\bobs-clone> git add .\README.txt
PS C:\Users\krpi\sandbox\bobs-clone> git commit -m "Add readme"
[master (root-commit) b29fe43] Add readme
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.txt
PS C:\Users\krpi\sandbox\bobs-clone> git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 280 bytes | 140.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To C:/Users/krpi/sandbox/.\central.git\
* [new branch] master -> master
And there is Alice.
PS C:\Users\krpi\sandbox> git clone .\central.git\ alices-clone; cd alices-clone
Cloning into 'alices-clone'...
done.
PS C:\Users\krpi\sandbox\alices-clone> git config user.name Alice; git config user.email alice@sandbox
PS C:\Users\krpi\sandbox\alices-clone> git checkout -b alices-branch
Switched to a new branch 'alices-branch'
PS C:\Users\krpi\sandbox\alices-clone> echo "I am Alice" >> hello.txt
PS C:\Users\krpi\sandbox\alices-clone> git add .\hello.txt; git commit -m "Say hello"
[alices-branch b66072d] Say hello
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 hello.txt
PS C:\Users\krpi\sandbox\alices-clone> git push -u origin alices-branch
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 372 bytes | 186.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To C:/Users/krpi/sandbox/.\central.git\
* [new branch] alices-branch -> alices-branch
Branch 'alices-branch' set up to track remote branch 'alices-branch' from 'origin'.
Hey! There's Bob again.
PS C:\Users\krpi\sandbox\bobs-clone> git fetch
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From C:/Users/krpi/sandbox/.\central.git\
* [new branch] alices-branch -> origin/alices-branch
PS C:\Users\krpi\sandbox\bobs-clone> git log origin/alices-branch
commit b66072d91ad8b8d8869b1eb79021d3069e1b5f30 (origin/alices-branch)
Author: Alice <alice@sandbox>
Date: Thu Mar 19 07:25:37 2020 +0100
Say hello
commit b29fe434df968b17da2c10d58371f50bc7200b68 (HEAD -> master, origin/master)
Author: Bob <bob@sandbox>
Date: Thu Mar 19 07:20:00 2020 +0100
Add readme
Conclusion
I surely hope this wasn't scary at all. This should take away all excuses to do a little git training everyday.
Posted on March 19, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.