Create new Bare Repository
These steps will create a new bare repository called learningGit in ~/code/learnGit/bareRepo/.
- Create the containing directory
- Go to the correct directory
- Create a new bare repository
- Move into the new repository
- Look at the contents of the bare repository
mkdir -p ~/code/learnGit/bareRepo/
cd ~/code/learnGit/bareRepo/
git init --bare --shared learningGit
cd learningGit
ls
|
|
Create Working Repositories
For this example, we are going to create 2 working repositories.
This is so you can see how changes don't affect the other repositories unless pushes & pulls are done.
Create a Working Repository
These steps will create a new working repository called learningGit in ~/code/learnGit/ that is a clone of ~/code/learnGit/bareRepo/learningGit.
- Move to the appropriate directory
- Clone the initial repository
- Move into the working directory
- Look at the contents (Note: learningGit has not yet had any files added to it)
cd ~/code/learnGit
git clone ~/code/learnGit/bareRepo/learningGit
cd learningGit
ls -a
|
|
Create a Second Working Repository
These steps will create a second working repository called learningGit2 in ~/code/learnGit/ that is a clone of ~/code/learnGit/bareRepo/learningGit.
- Move to the appropriate directory
- Clone the initial repository
- Move into the working directory
- Look at the contents (Note: learningGit has not yet had any files added to it)
cd ~/code/learnGit
git clone ~/code/learnGit/bareRepo/learningGit learningGit2
cd learningGit2
ls -a
|
|
Add Files to the Repository
This will create a couple of files in the learningGit repository.
Create the New Files
These steps create README.txt and README1.txt in ~/code/learnGit/learningGit/.
The files will not show up in ~/code/learnGit/learningGit2/.
- Move to the ~/code/learnGit/learningGit
- Look at the current status to see nothing.
- Create README.txt
- Create README1.txt
- Look at the git status to see 2 untracked files.
- Move to the learningGit2 directory
- Check that the files are not there
- Check the status in learningGit2
cd ~/code/learnGit/learningGit
git status
echo This repo is for Learning Git. > README.txt
echo Another file in the repository > README1.txt
git status
cd ~/code/learnGit/learningGit2
ls
git status
Note: the files are not yet stored in the repository.
|
|
Stage the files
This step stages the addition of README.txt and README1.txt in ~/code/learnGit/learningGit/.
The files will not show up in ~/code/learnGit/learningGit2/.
- Move back to the learningGit directory
- Stage the files
- Look at the git status to see 2 staged files.
- Move back to the learningGit2 directory
- Try to pull files
- Check the contents of learningGit2 to verify the files are NOT there.
cd ../learningGit
git add .
git status
cd ../learningGit2
git pull
ls
Note: the files are staged, but not yet stored in the ~/code/learnGit/learningGit repository.
|
|
Commit the Files
This step stores README.txt and README1.txt in the local repository.
The files will not show up in ~/code/learnGit/learningGit2/.
- Move back to the learningGit directory
- Commit the files
- Look at the git status to see no uncommitted changes.
- Move back to the learningGit2 directory
- Try to pull files
- Check the contents of learningGit2 to verify the files are NOT there.
cd ../learningGit
git commit -m "Add the first files"
git status
cd ../learningGit2
git pull
ls
Note: the files are stored in the ~/code/learnGit/learningGit repository, but are not yet in the bare repository.
|
|
Push the files to the bare repository
This step pushes the files to the bare repository.
The files will show up in ~/code/learnGit/learningGit2/.
- Move back to the learningGit directory
- Push the files without specifying the remote or branch (fails)
- Push the files specifying the remote and the branch (succeeds)
- Look at the git status to see no uncommitted changes.
- Move back to the learningGit2 directory
- Try to pull files
- Check the contents of learningGit2 to verify the files are there.
cd ../learningGit
git push
git push origin master
git status
cd ../learningGit2
git pull
ls
The files are now stored in the bare repository, so any new repositories that are clone from it will see the files.
|
|
Undo File Modifications (uncommitted) in the Repository
In the end, this has no affect on the learningGit repositories.
Modify the Files
These steps update README.txt in ~/code/learnGit/learningGit/.
- Move to the ~/code/learnGit/learningGit
- Look at the current status to see nothing.
- Modify README.txt
- Look at the git status to see the changed file.
- Look at the changes.
cd ~/code/learnGit/learningGit
git status
echo AccidentallyOverwrote > README.txt
git status
git diff
|
|
Stage the Modified File
This step stages the modification of README.txt in ~/code/learnGit/learningGit/.
- Stage the file
- Look at the git status to see the staged file.
- Look at the diffs, there are no differences
git add README.txt
git status
git diff
|
|
Unstage the File
This step unstages the modification to README.txt.
- Unstage the file
- Look at the git status to see the unstaged file
- Look at the diffs (they are back).
git reset HEAD README.txt
git status
git diff
|
|
Undo the Modifications
This step undoes the modifications to README.txt.
Your modifications are lost, since they were never stored in the database.
- Look at README.txt
- Undo the modification
- Check the status
- Check the diffs
- Look at README.txt
cat README.txt
git checkout -- README.txt
git status
git diff
cat README.txt
|
|
Remove a File from the Repository
This will remove a file from the learningGit repositories.
Remove the File
These steps removes README1.txt from ~/code/learnGit/learningGit/.
- Look at the current status to see nothing.
- Remove README.txt
- Look at the git status to see the removed file.
- Look at the changes.
git status
ls
rm README1.txt
git status
git diff
|
|
Stage the File Removal
This step stages the removal of README1.txt in ~/code/learnGit/learningGit/.
- Stage the file
- Look at the git status to see the staged file.
- Look at the diffs, there are no differences
git rm README1.txt
git status
git diff
|
|
Commit the File Removal
This step commits the removal of README1.txt.
- Commit the file removal
- Look at the git status to see no modified files
git commit -m "Remove unnecessary file, README1.txt."
git status
|
|
Push & Pull the File Removal
This step pushes the removal of README1.txt to the main repository and pulls it into learningGit2.
- Push the file removal to the origin repository
- Move to learningGit2
- See what files are there
- Check the status
- Pull the latest changes
- See what files are there
- Check the log
git push
cd ~/code/learnGit/learningGit2
ls
git status
git pull
ls
git log
|
|
Ignore Files
This sets up a .gitignore file in the repository.
Create Files That Should be Ignored
These steps creates temp1.o in ~/code/learnGit/learningGit/ and temp2.o in ~/code/learnGit/learningGit2/.
- Move to ~/code/learnGit/learningGit/
- Create temp1.o
- Check status
- Move to ~/code/learnGit/learningGit2/
- Create temp2.o
- Check status
cd ~/code/learnGit/learningGit
touch temp1.o
git status
cd ~/code/learnGit/learningGit2
touch temp2.o
git status
|
|
Accidentally Stage the file, then Unstage
This step accidentally stages an undesired file due to using the "git add ." and then unstages the file.
- Add everything
- Check status
- Undo the add
- Check status
git add .
git status
git reset HEAD temp2.o
git status
|
|
Ignore .o Files
Adds a .gitignore to ignore .o files.
- Create a .gitignore file containing *.o to ignore .o files
- Check status
- Stage the .gitignore file
- Commit the .gitignore file
- Push the .gitignore file
- Get the status
echo "*.o" > .gitignore
git status
git add .gitignore
git commit -m "Add .gitignore file to ignore *.o files"
git push
git status
|
|
Pull .gitignore into other repository
Pulls the .gitignore file into the other repository
- Move to ~/code/learnGit/learningGit/
- Check status
- Pull in the changes
- Get the status
cd ~/code/learnGit/learningGit/
git status
git pull
git status
ls -a
|
|