-
Notifications
You must be signed in to change notification settings - Fork 142
Git usage
The GIT model we have adopted for vistalab is this.
- Obtain a [http://github.com github account]. (They are free.)
- To use software from a repository, clone it from github to your computer
- Before editing, create a branch. (You can push the branch back to github, if you like).
- When the edits are done, and if they are useful, issue a pull request at github. This is an email message asking others to check your edits and agree to merge your edits into the master branch
The [http://github.com/vistalab vistlab github account] and The [http://github.com/scienstanford scienlab github account] include many public repositories. For example, the [http://github.com/vistalab/vistasoft main visatsoft repository] is there. Projects under development are there, but they are not public. These include projects on diffusion, fMRI modeling, and computational modeling.
Some lab members maintain additional personal repositories with related coding projects (Ariel Rokem, Jason Yeatman, and Brian Wandell).
This is a very clear [http://git-scm.com/book book about git] by Scott Chacon. It is worth your time as you get started.
Get a git account by going to [http://github.com github] or go to directly [http://github.com/signup/free get a free account]. If you want an account where you can have a private repository - say you are developing code for a class - then you can make a request [http://github.com/education here].
Git and github can be used in two different modes: if you wish to use git from the command line, you will need to make sure that your computer runs git. You can also download and install the most recent version from [http://git-scm.com/ here]. Alternatively, there are a variety of gui tools you can use to interface with git and github, Github software download. The tortoisegit software seems pretty good.
The web has ''a lot'' of resources for getting started with git. You should probably try to understand what git is doing first. There are also a bunch of online tutorials you can go through.
- [http://www.codeschool.com/courses/try-git A basic tutorial from CodeSchool].
- [http://www.sbf5.com/~cduan/technical/git/ a technical and comprehensive tutorial].
- [http://git-scm.com/book a clear book by Chacon] you can read online for free.
- [http://www.youtube.com/watch?v=7N6VBtkCHSQ Scott Chacon video I]
- [http://www.youtube.com/watch?v=ZDR433b0HJY Scott Chacon video II]
A good cognitive map of that territory is provided by the [http://tom.preston-werner.com/2009/05/19/the-git-parable.html git parable]. Ariel thinks you should go read it. Seriously.
We recommend learning how to use git command lines to interact with the repository. You can [http://git-scm.com/ download git] for all major platforms.
The [http://Github.com github folks] have visual interfaces to git and to github-hosted repositories for some popular operating systems. GIT itself is then part of the distribution.
Download the [http://help.github.com/articles/set-up-git github software]. This will be a form that is specific to your operating system.
- [http://windows.github.com/ Github for windows]
- [http://mac.github.com/ Github for mac]
- [http://git-scm.com/ Linux GUI].
We are sharing the [http://github.com/vistalab vistalab repositories] via a github account.
To work with the vistalab repositories, get a (free) github account for yourself.
- Go to a folder where you want to keep the code (for example, ~/matlab/git/)
- Use the following command to clone your forked vistalab repository onto your local machine
git clone http://github.com/vistalab/vistasoft.git
- When you want to make a change to the code, create a branch to make your changes
git branch [new branch name]
- Move into your new branch
git checkout [new branch name]
- Edit on your branch
- Commit your changes to your branch
- To share the changes on your branch, push it to github where others can see it
git push origin [your branch name]
- You can now see your branch and all of your changes on github!
- If you think the changes are ready to be integrated into the main distribution, issue a [http://help.github.com/articles/using-pull-requests pull request].
= Working with Git Day to Day =
Each operating system has different tools and ways to add a repository. We describe our current experiences here.
If you already have code you want to put in your repository, go to the root directory of the code. Type
git init
If you type
git status
It will announce what files are there but they will not yet be added. To add everything you can type
git add *
This will add everything recursively. To check try
git status
To commit these, you can type
git commit -a
starting your default text editor. To get around this, use
git commit -am"Your commit message goes here"
This completes making the local repository on your machine.
Go to your github web site and sign in. Then create a repository on the github, following the instructions provided [http://help.github.com/articles/creating-a-new-repository here]. When you visit the web-page of the newly-created repository, it will contain the complete constructions of adding your branch to github. After you have added it (the first time), you can easily push any new changes that you have committed with the next line. git push origin [branch name]
First, SVN export versioned items into a directory.
- Create the repository on github.
- Clone it to your local machine
- Move the versioned items into the cloned repository
- git push
Another way is this: Create the local repository and then push up to github. This is more complex because it forces you to name upstream, and so forth. I think this works, but I struggled with it.
- Change into the exported directory and run git init
- Then execute git remote add origin URL-of-GITHUB-REPOSITORY git branch --set-upstream-to=origin/master master git pull git push
To save the history, use [http://github.com/nirvdrum/svn2git svn2git]. We don't do this much.
Git commands for users of SVN: http://git.or.cz/course/svn.html
Look at [https://help.github.com/articles/set-up-git the bottom of this page] for information about how to avoid typing your password every time you push or pull.
[http://githowto.com/ A good resource]
Rather than git add XXX and git commit XXX you can use
git commit -a
To also type a comment use
git commit -am "YOUR COMMENT HERE"
Suppose you created a local branch, '''myBranch''', and you want to expose to others through your GitHub repository. You can push that branch into the github repository using the command
git push -u origin '''myBranch'''
It is useful to set a global default for how you push data to github. The recommended default for our lab is
git config --global push.default simple
This option pushes your local branch (but not others) to github. Thus, you can change thisBranch and thatBranch. But only the changes in thisBranch will be pushed. Furthermore, the push will only occur if the name of the branch you are tracking on github matches the name of your local branch. (It is possible for myBranch to track otherNameBranch on github). Ugh.
The list of options (instead of simple) are [http://stackoverflow.com/questions/948354/git-push-default-behavior described on this page].
Suppose there is a branch called camera on github. You don't have a local version. To get it
git branch --track localName origin/remoteName
For example, to track dev on github with a local branch also named dev, type
git branch --track dev origin/dev
This is a nice way to set an alias to show commits
git config --global alias.hist 'log --pretty=format:"%h %ad | %s%d [%an]" --graph --date=short'
[http://githowto.com/aliases From this page]
[http://stackoverflow.com/questions/2364147/how-to-get-just-one-file-from-another-branch Link]
git checkout master # first get back to master git checkout experiment -- app.js # then copy the version of app.js # from branch "experiment"
Provided that the remote repository is origin, and that you're interested in master:
Get the origin and then
git fetch origin git reset --hard origin/master
This tells to fetch the commits from the remote repository, and position your working copy to the tip of its master branch. All your local commits not in the remote will be gone.
Use git checkout to set the files to a previous commit. For example, suppose you know the SHA number of a commit. Then
git checkout SHA-NUMBER
will keep your repository in place but bring you back to the state at the time of that earlier commit. When you make this change, you will be told you are in a 'detached HEAD' state that lets you look around. To return to the HEAD, you can use git checkout , or, I think git checkout HEAD.
There are related commands (reset and revert). But they do something more scary.
Sometimes you are doing something and need to change to another branch. You aren't ready for a commitment. So, you want to stash your work. You can use
git stash
To see the list of things you have stashed you can use
git stash list
This shows you what has been stashed on all your branches. When you change back to the branch and want to get the stashed stuff back type
git stash apply
Sometimes you merge and then want to undo it. This is straightforward if you have not yet pushed to the repository. In that case you can revert by the command
git revert commit_sha
This puts you back to the commit with the sha number commit_sha. You can see the different commit_sha values and their messages with the command
git log
If you have NOT pushed to github and you just want to go back 1 commit, you can use
git revert HEAD~1
== See what you are about to push ==
If you want to see the differences between your local branch and the one on github, to understand what will happen if you execute a push, you can use
git diff --stat [remote/branch]
For example,
git diff --stat origin/master
== Add a tag (label) to a commit ==
Label a commit (e.g., version 2.3)
git tag (shows the tags) git tag -a v1.4 -m 'my version 1.4' (Adds a tag and a message for this tag)
[http://git-scm.com/book/en/Git-Basics-Tagging From the book]
git config --global user.name
git config --global core.editor
git branch -D branchName % Local branch git push origin --delete branchName % Remote branch
Let's you know who is tracking what
git remote show origin
Once you start having many different branches of your repo, you will want to avoid getting confused about which branch you are currently working on. One way to do that is to make your terminal "git aware", by entering the following lines in your bashrc:
function parse_git_branch { ref=$(git symbolic-ref HEAD 2> /dev/null) || return echo "("${ref#refs/heads/}")" } PS1="\h:\W$RED $(parse_git_branch)$NO_COLOR $"
Git needs to recognize your name and email address to be able to access your online account.
If you do not specify them in the global configuration file they are configured automatically based on your username and hostname on the local computer.
You can set them explicitly as follows: git config --global user.name "Your Name" git config --global user.email [email protected]
After doing this, you may fix the identity used for this commit with: git commit --amend --reset-author
- Vistasoft
- Getting Started
- mrVista Overview
- Anatomy
- Functional MRI
- mrVista
- Retinotopy tutorial
- Population RF methods also prf Model, prf_tutorial, prf tutorial
- Diffusion weighted MRI
- Visualization
- Tractography
- Tutorials
- Software overview