CVS - few key commands, mention central repository for e.g. IDL
[ THIS SHOULD DEFINITELY BE ON A SEPARATE PAGE, SO ONE DOESN'T HAVE TO SEE IT ALWAYS WHEN LOOKING FOR GIT DOCUMENTATION ]
Getting started with Git and BitBucket
Git is a version-tracker that allows non-linear workflows, which is perfect for collaborative works (not only for code, but also for e.g. LaTeX documents).
Git tracks the modifications of your code on your local machine and synchronizes your work with a remote repository.
Bitbucket (https://bitbucket.org/) is a collection of remote repositories and should be used together with a version-tracker like Git. Note here that other repositories, such as github, don't allow private repository, but you are forced to share your contents unless you pay a monthly fee.
Configuring a repository project from scratch
First of all install Git on your local machine. For linux users this is
sudo apt-get install git
For the best readability turn on the syntax highlighting. This is not mandatory but helps a lot
git config --global color.ui "auto"
After this step you are ready to configure your local username and email
git config --global user.name "Your Name"
git config --global user.email
"your@email.address"
Then register on Bitbucket (https://bitbucket.org/account/signup/)
IMPORTANT: registration on bitbucket is free only if you are affiliated with an academic institution, hence use your NBI email: it will be automatically recognized as academic.
Once you are registered start a new repository here https://bitbucket.org/repo/create (or using CREATE button in the top bar).
Now you can follow the default instruction from the bitbucket webpage. In particular, to "clone" a copy of the repository on a new host, do
git clone git@bitbucket.org:yourlogin/your_repository
Basic commands
Important commands are
git status
which shows the files modified/created/removed that are not committed yet (in red).
To show the diff of the new modifications use
git diff
that can be employed also for single files using
git diff [file list including wildchar]
This command is very useful when you want to check what you changed before committing it.
To add these files (or a part of them) to the next commit use
git add [file list including wildchar]
To do the same interactively, use
git add -p [nothing -- or file list including wildchar]
Note that to add all the files to the next commit you can use
git add .
To remove or move files, use
git rm [file list including wildchar]
git mv file-or-dir-source file-or-dir-desination
Note that after adding/removing files if you type again
git status
the added files are green.
Now commit the changes to the local repository, with an explanatory comment,
git commit -m "my wonderful changes"
and push it to (synchronize with) the remote repository (although this need not be done for every commit):
git push
where a password could be required (if private repository, or restricted push).
If you have made several local commits you may want to merge them to fewer commits before pushing. To merge the last 4 commits interactively, do
git rebase -i HEAD~4
If you just want to correct the last commit message, you can instead do
git commit --amend
To undo changes check this guide (which is also very clear for other git-bitbucket operations)
https://www.atlassian.com/git/tutorials/undoing-changes/git-checkout
To synchronize your local repository with the bitbucket remote repository just use
git pull
a password could be required (if private repository).
If you have local changes that are not yet committed, then use these commands to temporarily hide ("stash") them, while doing the pull:
git stash
git pull
git stash pop
and then add + commit (+ push). In general, it is a good idea to avoid colliding edits, since it complicates interpreting the history and log of changes.
The SourceTree and SmartGid Graphical User Interfaces
Instead of, or as a complement to using the GIT command line interface you may want to install the SourceTree (MacOs, Windows) or SmartGit (Linux, MacOs, Windows) Graphical User Interfaces, which give helpful graphical overviews of your repositories. Git GUIs are particularly helpful in handling separate edits ("chunks") in source code files, and also simplifies viewing changes and log messages.
FireFox add-on
No, this isn't Facebook
The bitbucket interface looks very similar to Facebook. In order to avoid this misunderstanding with non-bitbucket users you can install the stylish add-on for firefox (https://addons.mozilla.org/en-US/firefox/addon/stylish/) with the following theme https://userstyles.org/styles/98938/no-more-facebook-like-bitbucket
Git Cookbook
This page is intended to serve as a place where we can collect useful recipes for git.
To see a graphic representation of commits, marked with branch names and tags:
git log --all --tags --graph --decorate
(you may want to create an alias for this). On a laptop you may prefer to use instead use SourceTree (MacOS, Windows) or SmartGit (Linux, MacOs, Windows).
Want to see who last modified a specific line and when?
git blame -L115,+20 -- FILENAME
This will show changs to lines 115 --> 115+20 in `filename.f90`.
Do you want to revert one or more changes from a commit (but not the whole commit)? You can do the following:
git checkout -p COMMITHASH^ -- FILE_OF_INTEREST
This will launch an interactive diff where you can selectively apply the "hulks" (changes) from COMMITHASH
to the current version. Select y (for yes) to choose the version from COMMITHASH
, or n (for no) to keep the current version. COMMITHASH
is the git hash for the commit of interest. More information can be found in man git-add
, in the "INTERACTIVE MODE" section, sub-section "patch".
How to do a git "dry run" of a merge (i.e., see what changes will be made without actually making them):
Pull changes but don't merge:
git fetch origin branch/feature
Output to TTY:
git diff HEAD..origin/branch/feature
If you want to use a specific (GUI) tool (like meld):
git difftool HEAD..origin/branch/feature