Difference between revisions of "Git"

From PHASTA Wiki
Jump to: navigation, search
Line 1: Line 1:
[[Category:Software Engineering]]
 
  
== Introduction ==
+
'''Git''' is a distributed revision control system (VCS), designed to work well with highly non-linear workflows. It was initially conceived to support development of the Linux kernel, and has since become the most widely-used VCS for software development.
  
Git is a distributed revision control system (VCS), designed to work well with highly non-linear workflows. It was initially conceived to support development of the Linux kernel, and has since become the most widely-used VCS for software development.
+
Git is used to maintain most of the software used by the group, including [[PHASTA]], [[Chef]], [[VTKpytools|vtkpytools]], and more. Learning git will allow you to make changes to these codes and share them with the group, in addition to allowing you to test proof-of-concept codes without fear of accidentally deleting code.
  
This page is essentially a cheat-sheet for git commands frequently used by our group.
+
== Learning Git ==
  
If you're completely new to <code>git</code> or version control in general, [https://learngitbranching.js.org/ Learn Git Branching] is a great interactive, visual training program show the basics.
+
If you're completely new to <code>git</code> or version control in general, [https://learngitbranching.js.org/ Learn Git Branching] is a great interactive, visual training program show the basics. Even if you're not completely new to git, it may help you to understand some concepts you didn't before.
  
== Basic Git ==
+
=== Basic Git ===
  
 
Basic information to get started with Git can be found at http://rogerdudler.github.io/git-guide/.
 
Basic information to get started with Git can be found at http://rogerdudler.github.io/git-guide/.
Line 66: Line 65:
 
: <code>git log --help</code> (more information)
 
: <code>git log --help</code> (more information)
  
== Advanced Git ==
 
  
 
== Git Prompt Statement (PS1) ==
 
== Git Prompt Statement (PS1) ==
Line 73: Line 71:
 
# Edit your <code>~/.bashrc</code> to say <code>source ~/.git-prompt.sh</code> before the lines that set your <code>PS1</code>
 
# Edit your <code>~/.bashrc</code> to say <code>source ~/.git-prompt.sh</code> before the lines that set your <code>PS1</code>
 
# Modify your <code>PS1</code> string to include <code>$(__git_ps1 "(%s)")</code> where you want the current branch to appear in your prompt
 
# Modify your <code>PS1</code> string to include <code>$(__git_ps1 "(%s)")</code> where you want the current branch to appear in your prompt
 +
 +
[[Category:Software Engineering]]

Revision as of 08:16, 5 September 2020

Git is a distributed revision control system (VCS), designed to work well with highly non-linear workflows. It was initially conceived to support development of the Linux kernel, and has since become the most widely-used VCS for software development.

Git is used to maintain most of the software used by the group, including PHASTA, Chef, vtkpytools, and more. Learning git will allow you to make changes to these codes and share them with the group, in addition to allowing you to test proof-of-concept codes without fear of accidentally deleting code.

Learning Git

If you're completely new to git or version control in general, Learn Git Branching is a great interactive, visual training program show the basics. Even if you're not completely new to git, it may help you to understand some concepts you didn't before.

Basic Git

Basic information to get started with Git can be found at http://rogerdudler.github.io/git-guide/.

Git repository (repo)
Is a directory that contains files of the current branch and a hidden .git directory
Contains an Index in .git that acts as a staging area for all your branches
Contains a HEAD in .git that points to the last commit you made
Your PHASTA repository should always be at ~/git-phasta/phasta
Create a new repository
git init
Checkout a repository
git clone /path/to/repo
git clone user@host:/path/to/repo
Add files to be tracked in the git index
git add <filename1> <filename2> ...
git add *
git add -u (all files updated since last commit)
Commit changes to HEAD
git commit -m "my_username: my comments about this commit"
Push changes to remote repo
git push origin master (pushes the master branch to the original/main repo)
Connect to a remote server
git remote add origin <server> (connects <server> to your main, or origin repository)
git remote add myrepo <server> (connects <server> to a named branch called mybranch)
Note: <server> could be user@host:/path/to/repo
Create and delete branch
git checkout -b branch_name (creates and checkout branch)
git checkout master (checkout master branch)
git branch -d branch_name (delete branch we just created)
Push branch to a remote
git push origin branch (pushes from your main origin repo)
Update and merge
git pull (so all branches are up-to-date for the merge)
git merge origin/master (merges current branch with origin's master branch)
If a merge has conflicts, you need to edit the conflict files provided by Git, and then mark them as merged with git add
Compare code in different branches
git diff <branch_a> <branch_b>
View history of commits
git log
git log --author=foo
git log --pretty=oneline (show each commit as one line)
git log --graph --oneline --decorate --all (ASCII tree of branches, commits, merges)
git log --name-status (show which files changed in each commit)
git log --help (more information)


Git Prompt Statement (PS1)

  1. Acquire git-prompt.sh from https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh, and save it somewhere like ~/.git-prompt.sh
  2. Edit your ~/.bashrc to say source ~/.git-prompt.sh before the lines that set your PS1
  3. Modify your PS1 string to include $(__git_ps1 "(%s)") where you want the current branch to appear in your prompt