Differences between revisions 28 and 69 (spanning 41 versions)
Revision 28 as of 2016-12-08 14:50:51
Size: 3224
Editor: ZekeKaufman
Comment:
Revision 69 as of 2019-02-03 13:21:59
Size: 0
Editor: AndrewHoopes
Comment: no longer needed
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
#acl LcnGroup:read,write,delete,revert All:


This page is provided for !FreeSurfer developers to assist in the CVS -> git transition.

This page is not meant to be a comprehensive guide for using git. Git is a feature loaded version control system which at times can be a bit of a hurdle to learn. The following site However, when used in its simplest form it is very similar to most all other version control systems, including CVS. Below are many of the basic CVS commands used by !FreeSurfer developers the git equivalent of that command. The [[https://www.atlassian.com/git/tutorials/what-is-git|Atlassian]] and [[https://git-scm.com/doc|git-scm]] are great resources for those who want to dig deeper and and learn more about git and its features.


== Initial Git Setup ==

When we start out using git we want to set a few of our configuration settings. We only need to do this one time:
{{{
$> cd ~
$> git config --global user.name "Zeke Kaufman"
$> git config --global user.email zkaufman@nmr.mgh.harvard.edu
}}}
For additional examples of git specifics setting (e.g. default editor, color settings), see the following page: https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration

== Checkout out the main branch ==
When working with CVS, we would checkout out the !FreeSurfer repository using the '''{{{cvs checkout dev}}}''' command. In git we 'clone' repositories. This gives us a local version of the repository which we can work with:
{{{
$> git clone /space/freesurfer/repo/freesurfer
}}}



If you wanted to check out a specific branch, you could do that in a couple different ways:
{{{
$> git clone /space/freesurfer/repo/freesurfer
$> cd freesurfer
$> git checkout stable6

or,

$> git clone -b stable6 /space/freesurfer/repo/freesurfer
}}}

Additional examples:

[[https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository#Cloning-an-Existing-Repository|Cloning-an-Existing-Repository]]

[[https://www.atlassian.com/git/tutorials/setting-up-a-repository/git-clone|git-clone]]

== Daily Workflow ==


Commit a modified source code file:
||'''cvs'''||{{{cvs commit -m "Added new capabilities." <file_name>}}}||
||<|2>'''git'''||{{{git commit -m "Added new capabilities." <file_name>}}}||
||{{{git push}}}||

Modify and commit a data file:
||'''cvs'''||{{{cvs commit <file_name>}}}||
||<|5>'''git'''||{{{git annex unlock <file_name>}}}||
||{{{git annex add <file_name>}}}||
||{{{git commit <file_name>}}}||
||{{{git push}}}||
||{{{git annex copy --to origin <file_name>}}}||

Add a data file:
||<|2>'''cvs'''||{{{cvs add <file_name>}}}||
||{{{cvs commit <file_name>}}}||
||<|4>'''git'''||{{{git annex add <file_name>}}}||
||{{{git commit <file_name>}}}||
||{{{git push}}}||
||{{{git annex copy --to origin <file_name>}}}||


Remove data file:
||<|3>'''cvs'''||{{{rm <file_name>}}}||
||{{{cvs rm <file_name>}}}||
||{{{cvs commit -m "Removing <file_name>" <file_name>}}}||
||<|2>'''git'''||{{{git rm <file_name>}}}||
||{{{git commit -m "Removing <file_name>" <file_name>}}}||

Undo 1 commit (before push):
||'''git'''||{{{git reset --soft HEAD~1}}}||
Undo 2 commits:
||'''git'''||{{{git reset --soft HEAD~2}}}||