|
Size: 394
Comment:
|
Size: 4578
Comment:
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 1: | Line 1: |
| == Checkout out the main branch: == | #acl LcnGroup:read,write,delete,revert All: |
| Line 3: | Line 3: |
| '''CVS''' | 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: |
| Line 5: | Line 13: |
| export CVSROOT=/space/repo/1/dev cvs checkout dev |
$> cd ~ $> git config --global user.name "Zeke Kaufman" $> git config --global user.email zkaufman@nmr.mgh.harvard.edu |
| Line 8: | Line 17: |
| 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 | |
| Line 9: | Line 19: |
| '''git''' | == 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: |
| Line 11: | Line 26: |
| git clone /space/freesurfer/repo/freesurfer | $> git clone /space/freesurfer/repo/freesurfer |
| Line 15: | Line 30: |
| Checkout the stable branch: | If you wanted to check out a specific branch, you could do that in a couple different ways: |
| Line 17: | Line 33: |
| # CVS export CVSROOT=/space/repo/1/dev cvs checkout -r stable6 dev |
$> git clone /space/freesurfer/repo/freesurfer $> cd freesurfer $> git checkout stable6 or, $> git clone -b stable6 /space/freesurfer/repo/freesurfer |
| Line 22: | Line 42: |
| Additional information and 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 == === Updating your code === In CVS, when we want the most up-to-date version of the code, we issue a '''{{{cvs update}}}''' command. This will update our files to the latest version, restore any missing files, and warn us of any conflicts. The nearest equivalent in git is the '''{{{git pull}}}''' command. This will update our local repository and update all the necessary files to the most recent version. ''It is good practice to always issue a '''{{{git pull}}}''' command before starting to work on any files.'' |
|
| Line 23: | Line 55: |
| # git git clone -b stable6 /space/freesurfer/repo/freesurfer |
$> git pull |
| Line 27: | Line 58: |
| One major difference between '''{{{cvs update}}}''' and '''{{{git pull}}}''' command is that '''{{{git pull}}}''' will not restore any missing files (i.e. files that we deleted locally). In git, if we want to restore locally deleted files, we need to take the additional step of issuing a '''{{{git checkout}}}''' command. For example: | |
| Line 28: | Line 60: |
| Replace a data file: | {{{ $> rm README $> git pull $> git status deleted: README.txt $> git checkout README.txt }}} Additional information and examples: [[https://www.atlassian.com/git/tutorials/syncing/git-pull|git-pull]] === Commit a modified source code file === Git and CVS can be virtually identical when it comes to committing changes. The primary difference is that git requires the additional step of pushing to the central repository. You always need to issue a ||'''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}}}|| |
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 Atlassian and 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 information and examples:
Cloning-an-Existing-Repository
Daily Workflow
Updating your code
In CVS, when we want the most up-to-date version of the code, we issue a cvs update command. This will update our files to the latest version, restore any missing files, and warn us of any conflicts. The nearest equivalent in git is the git pull command. This will update our local repository and update all the necessary files to the most recent version. It is good practice to always issue a git pull command before starting to work on any files.
$> git pull
One major difference between cvs update and git pull command is that git pull will not restore any missing files (i.e. files that we deleted locally). In git, if we want to restore locally deleted files, we need to take the additional step of issuing a git checkout command. For example:
$> rm README
$> git pull
$> git status
deleted: README.txt
$> git checkout README.txtAdditional information and examples:
Commit a modified source code file
Git and CVS can be virtually identical when it comes to committing changes. The primary difference is that git requires the additional step of pushing to the central repository. You always need to issue a
cvs |
cvs commit -m "Added new capabilities." <file_name> |
git |
git commit -m "Added new capabilities." <file_name> |
git push |
Modify and commit a data file:
cvs |
cvs commit <file_name> |
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:
cvs |
cvs add <file_name> |
cvs commit <file_name> |
|
git |
git annex add <file_name> |
git commit <file_name> |
|
git push |
|
git annex copy --to origin <file_name> |
Remove data file:
cvs |
rm <file_name> |
cvs rm <file_name> |
|
cvs commit -m "Removing <file_name>" <file_name> |
|
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 |
