For this project, we expect you to look at these concepts:
- Authenticating Git
- Struggling with the sandbox? Try this: Using Docker & WSL on your local host
- Source code management
- Right-engineering, right-documenting
- Git and Github cheat sheet - Everything in less than 30 seconds
Resources for advanced tasks (Read only after finishing the mandatory tasks):
At the end of this project, you are expected to be able to explain to anyone, without the help of Google:
- What is source code management
- What is Git
- What is GitHub
- What is the difference between Git and GitHub
- How to create a repository
- What is a README
- How to write good READMEs
- How to commit
- How to write helpful commit messages
- How to push code
- How to pull updates
- How to create a branch
- How to merge branches
- How to work as collaborators on a project
- Which files should and which files should not appear in your repo
- A
README.md
file at the root of thealx-zero_day
repo, containing a description of the repository - A
README.md
file, at the root of the folder of this project (i.e.0x03-git
), describing what this project is about - Do not use GitHub’s web UI, but the command line to perform the exercise (except for operations that can not possibly be done any other way than through the web UI). You won’t be able to perform many of the task requirements on the web UI, and you should start getting used to the command line for simple tasks because many complex tasks can only be done via the command line.
- Your answer files should only contain the command, and nothing else
At the end of this project you should be able to reproduce and understand these command lines:
$ git clone <repo>
$ touch test
$ git add test
$ git commit -m "Initial commit"
$ git push origin main
You have the following files in your project directory:
julien@ubuntu:/tmp/git_project$ ls
0-test 0-test~ #0-test# file1 file2
You’ve edited 0-test
and you want to add it to your GitHub repo. What is the correct command to add only 0-test
?
-
git add .
-
git add -N 0-test
-
git add 0-test
Tips: You should learn what each of these commands would actually do if you were to execute them!
What command can you use to see what changes have been staged, which haven’t, and which files aren’t being tracked by Git?
-
git init
-
git status
-
git checkout
You will need a GitHub account for all your projects at ALX. If you do not already have a github.com account, you can create an account for free here
To have access to your repositories and authenticate yourself, you need to create a Personal Access Token on Github.
You can follow this tutorial to create a token.
Using the graphic interface on the github website, create your first repository.
- Name:
alx-zero_day
- Description:
I'm now a ALX Student, this is my first repository as a full-stack engineer
- Public repo
- No
README
,.gitignore
, or license
On the intranet, just under the task, click on the button Get a sandbox
and run to start the machine.
Once the container is started, click on Webterm
to open a shell where you can start work from.
On the webterm of the sandbox, do the following:
- Clone your repository
root@896cf839cf9a:/# git clone https://{YOUR_PERSONAL_TOKEN}@github.com/{YOUR_USERNAME}/`alx-zero_day`.git
Cloning into '`alx-zero_day`'...
warning: You appear to have cloned an empty repository.
Pro-Tip: On windows, use CTRL + A + V to paste in the web terminal
- Navigate to this new directory. Tips
root@896cf839cf9a:/# cd `alx-zero_day`/
root@896cf839cf9a:/`alx-zero_day`#
- Create the file
README.md
with the contentMy first readme
. Tips
root@896cf839cf9a:/`alx-zero_day`# echo 'My first readme' > README.md
root@896cf839cf9a:/`alx-zero_day`# cat README.md
My first readme
- Update your git identity
root@896cf839cf9a:/alx-pre_course# git config --global user.email "you@example.com"
root@896cf839cf9a:/alx-pre_course# git config --global user.name "Your Name"
- Add this new file to git, commit the change with this message “My first commit” and push to the remote server / origin
root@896cf839cf9a:/`alx-zero_day`# git add .
root@896cf839cf9a:/`alx-zero_day`# git commit -m 'My first commit'
[master (root-commit) 98eef93] My first commit
1 file changed, 1 insertion(+)
create mode 100644 README.md
root@896cf839cf9a:/`alx-zero_day`# git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 212 bytes | 212.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/{YOUR_USERNAME}/`alx-zero_day`.git
* [new branch] master -> master
Good job!
You pushed your first file in your first repository of the first task of your first ALX School project.
You can now check your repository on GitHub to see if everything is good.
Repo:
- GitHub repository:
alx-zero_day
- File:
README.md
Create a new directory called 0x03-git
in your alx-zero_day
repo.
Make sure you include a not empty README.md
in your directory:
- at the root of your repository
alx-zero_day
- AND in the directory
0x03-git
And important part: Make sure your commit and push your code to Github - otherwise the Checker will always fail.
Repo:
- GitHub repository:
alx-zero_day
For the moment we have an empty project directory containing only a README.md. It’s time to code!
- Create these directories at the root of your project: bash, c, js
- Create these empty files:
c/c_is_fun.c
js/main.js
js/index.js
- Create a file
bash/alx
with these two lines inside:#!/bin/bash
andecho "ALX"
- Create a file
bash/school
with these two lines inside:#!/bin/bash
andecho "School"
- Add all these new files to git
- Commit your changes (message: “Starting to code today, so cool”) and push to the remote server
Repo:
- GitHub repository:
alx-zero_day
- Directory:
0x03-git
- File:
bash/alx, bash/school, c/c_is_fun.c, js/main.js, js/index.js
A branch is like a copy of your project. It’s used mainly for:
- adding a feature in development
- collaborating on the same project with other developers
- not breaking your entire repository
- not upsetting your co-workers
The purpose of a branch is to isolate your work from the main code base of your project and/or from your co-workers’ work.
For this project, create a branch update_script
and in this branch:
- Create an empty file named
bash/98
- Update bash/alx by replacing
echo "ALX"
withecho "ALX School"
- Update bash/school by replacing echo "School" with
echo "The school is open!"
- Add and commit these changes (message: “My personal work”)
- Push this new branch Tips
Perfect! You did an amazing update in your project and it’s isolated correctly from the main branch.
Ho wait, your manager needs a quick fix in your project and it needs to be deployed now:
- Change branch to
main
- Update the file
bash/alx
by replacingecho "ALX"
withecho "ALX School is so cool!"
- Delete the directory
js
- Commit your changes (message: “Hot fix”) and push to the origin
Ouf, hot fix is done!
Repo:
- GitHub repository:
alx-zero_day
- Directory:
0x03-git
- File:
bash/alx, bash/school, bash/98
Of course, you can also work on the same branch as your co-workers and it’s best if you keep up to date with their changes.
For this task – and only for this task – please update your file README.md
in the main branch from GitHub.com. It’s the only time you are allowed to update and commit from GitHub interface.
After you have done that, in your terminal:
- Get all changes of the main branch locally (i.e. your
README.md
file will be updated) - Create a new file
up_to_date
at the root of your directory and in it, write the git command line used - Add
up_to_date
to git, commit (message: “How to be up to date in git”), and push to the origin
Repo:
- GitHub repository:
alx-zero_day
- Directory:
0x03-git
- File:
README.md, up_to_date
Collaboration is cool, but not really when you update the same file at the same time…
To illustrate that, please merge the branch update_script
to main
: “Cool, all my changes will be now part of the main branch, ready to be deployed!”
HHHHHHHAAAAAAAA
CONFLICT (content): Merge conflict in bash/alx
As you can see, you have conflicts between two branches on the same file.
Your goal now is to resolve conflicts by using the version of the branch update_script
, and push the result to the origin.
At the end, you should have all your work from the branch update_script
(new file and two updated files) and all latest main
commits (new files, delete folder, etc.), without conflicts.
Repo:
- GitHub repository:
alx-zero_day
- Directory:
0x03-git
Create a .gitignore
file and define a rule to never push ~
files (generated by Emacs). Tips
Repo:
- GitHub repository:
alx-zero_day
- Directory:
0x03-git
- File:
.gitignore