Tag Archives: Version Control

How to Use Git

Motivation:

You want to use Git to version your files or share your files with other people.

Solution:
  • Register a GitHub or a GitLab account.
  • Create a GitHub repository or a GitLab project.
  • Download and install a Git client.
  • Pull (checkout) a remote repository (e.g. https://github.com/huybien/asp.net-core.git) to an empty local folder (e.g. C:\Users\admin\Downloads\code).
    cd C:\Users\admin\Downloads\code
    git init
    git remote add origin -f https://github.com/huybien/asp.net-core.git
    git pull origin main
    / * or * /
    git pull origin master
  • Pull (checkout) a remote repository (e.g. https://github.com/huybien/asp.net-core.git) to a local folder that contains existing code (e.g. C:\Users\admin\Downloads\code).
    cd C:\Users\admin\Downloads\code
    git init --initial-branch=main
    git remote add origin https://github.com/huybien/asp.net-core.git
    git fetch --all
    git reset --hard origin/main
    git add *.*
    git commit -m "new files added"
    git push -u origin main
    
  • Push local files to a remote empty repository.
    git credential-manager delete https://github.com
    git config --global user.email "info@huybien.com"
    git config --global user.email
    git config --global user.name "Huy Bien"
    git config --global user.name
    git init
    git add *.*
    git commit -m "first commit"
    git branch -M main
    git remote add origin https://github.com/huybien/asp.net-core.git
    git push -u origin main
  • Push changes to a remote repository.
    git credential-manager delete https://github.com
    git config --global user.email "info@huybien.com"
    git config --global user.email
    git add *.*
    git commit -m "CP form"
    git branch -M main
    git push -u origin main
  • Update (fetch and merge) a local repository.
    git pull origin main
    /* or */
    git branch --set-upstream-to=origin/main main
    git pull
    
  • Force updating (fetch and overwrite) the current repository.
    git fetch --all 
    git reset --hard origin/main
    git clean -fd 
    git pull
  • Force updating (fetch and overwrite) a local repository (e.g. C:\Users\admin\Downloads\code).

    git -C C:\Users\admin\Downloads\code fetch --all
    git -C C:\Users\admin\Downloads\code reset --hard origin/main
    git -C C:\Users\admin\Downloads\code clean -fd 
    git -C C:\Users\admin\Downloads\code pull
  • Reset (Revert) a local repository to a previous version.
    cd C:\Users\admin\Downloads\code 
    git log --oneline 
    git reset --hard 4355842  
    // where 4355842 is a version id.
  • Remove all cached files.
    git rm -r --cached .

 

 

Topic 10 – Software Construction

Why do I need to learn about software construction?

Knowing how to write code does not mean that you know how to create real-world software. In real world, you will need to know how to manage your code, how to read the existing code, how to write code following standard styles, how to ensure that your code is working, how to automate your the process of building, testing and deploying your code, how to handle error in your applications, how to optimize your code for speed, how to write secure code, how to avoid code duplication, how to create readable code, how to create code faster. That's why you need to learn about software construction.

What can I do after finishing learning software construction?

You will know how to create software in a real world team and environment.

Hmm! Is it really useful?

If you have a doubt about its usefulness then you can delay learning it until you are tasked to create a software system and you complete a half of it and are stuck there because when you add one more feature you will get tons of bugs due to the new code. After you finish fixing 1 bug, you get 3 other bugs due to the modified code that fixes the bug.
Another scenario is that when it takes another person 6 months to read and understand the code that you wrote in 3 months in order to fix a bug or to add a new feature.

Alright! What should I do now?

Software construction requires a lot of reading. In order to get familiar with software construction you will need to read at least below books.

Please read this Steve McConnell (2004). Code Complete. Microsoft Press book first.
After that please read this Jon Loeliger and Matthew McCullough (2012). Version Control with Git: Powerful Tools and Techniques for Collaborative Software Development. O'Reilly Media book.
Alternatively, you can read  this Ben Collins-Sussman et al. (2011). Version Control with Subversion book.
After that please read this Robert C. Martin (2009). Clean Code A Handbook of Agile Software Craftsmanship. Pearson Education book.
After that please read 
- this Andy Hunt, Dave Thomas and Matt Hargett (2007). Pragmatic Unit Testing in C# with NUnit. Pragmatic Bookshelf book, and 
- this Kent Beck (2002). Test Driven Development By Example. Addison Wesley book.
After that please read 
- this Martin Fowler et al. (1999). Refactoring Improving The Design Of Existing Code. Addison Wesley book, and 
- its newer version Martin Fowler (2019). Refactoring. Improving the Design of Existing Code. 2nd Edition. Addison-Wesley Professional also.
After that please read this Elton Stoneman (2020). Learn Docker in a Month of Lunches. Manning Publications book.
If you have to work with legacy code then please read 
- this Michael Feathers (2004). Working Effectively with Legacy Code. Prentice Hall PTR book, and
- this Diomidis Spinellis et al. (2003). Code Reading: The Open Source Perspective. Addison-Wesley Professional book.
After that please read 
- this Brian L. Gorman (2020). Practical Entity Framework. Apress book, and
- this Suhas Chatekar (2015). Learning NHibernate 4. Packt Publishing book.
After that please read this "Continuous Integration: Improving Software Quality and Reducing Risk" book.
After that please read this "Matt Perdeck (2010). ASP.NET Site Performance Secrets" book.
After finishing the books please click Topic 11 - Software Testing to continue.