CommunityData:Git: Difference between revisions
No edit summary |
|||
Line 4: | Line 4: | ||
Mac OS users should check out [https://www.moncefbelyamani.com/how-to-install-xcode-homebrew-git-rvm-ruby-on-mac/ this tutorial], which recommends also setting up the "Command Line Tools" as well as the "homebrew" package manager. | Mac OS users should check out [https://www.moncefbelyamani.com/how-to-install-xcode-homebrew-git-rvm-ruby-on-mac/ this tutorial], which recommends also setting up the "Command Line Tools" as well as the "homebrew" package manager. | ||
Note that RStudio also has Git integration now. Instructions and details available via [https://support.rstudio.com/hc/en-us/articles/200532077-Version-Control-with-Git-and-SVN RStudio support documentation]. | |||
== Configuring Git for submodules == | == Configuring Git for submodules == |
Revision as of 15:18, 22 February 2020
Install Git
To get started, you will need to install git. Doing so requires different steps depending on your operating system. Basic instructions available from the Git website.
Mac OS users should check out this tutorial, which recommends also setting up the "Command Line Tools" as well as the "homebrew" package manager.
Note that RStudio also has Git integration now. Instructions and details available via RStudio support documentation.
Configuring Git for submodules
Once you've installed git, there are some configuration options which will make your life much easier. You can set them globally with the following commands:
git config --global alias.spull '!__git_spull() { git pull "$@" && git submodule sync --recursive && git submodule update --init --recursive; }; __git_spull' git config --global status.submoduleSummary true
These two commands will ensure that git works a little better with submodules. Submodules are essentially git repositories that are buried inside other git repositories. For example, the wikiresearch
repository currently uses the RCommunityData
repository as a submodule. If you're working in a repository like this, you'll want to use git spull
instead of just git pull
which will also check for and pull changes made in any of your submodules.
Gitolite Server
We have a private git server which uses gitolite to manage permissions for git repositories.
Dependencies
Once you've got git installed, you will also need a public SSH key. You can send your public key (usually ~/.ssh/id_rsa.pub) to a current administrator (see the list of administrators below on this page), and they can add you as a new user.
Cloning a repository
"Cloning" a repository downloads the files, as well as the history, of a repository. It also creates a new git instance in that directory, so that you can commit changes to the code.
To clone a repository, run the following command:
git clone --recursive git@code.communitydata.science:REPOSITORY_NAME
Note that you need to use this SSH syntax rather than the git protocol (e.g., git://code.communitydata.science/repo_name
), which doesn't have write permissions.
Creating a new repository
To create a new repository, you will need to have admin rights. Currently, the administrators are Kaylea, Nate, Jeremy, Aaron, Mako, Sayamindu, and Jim. If you'd like to be an administrator, you should contact one of them!
Using git-annex to manage large files in git
Note: This is still experimental, and may go away. Don't put files in it without a backup.
Git is not a very good system for managing large files, which is a problem for us, since we often have large data files. Enter git-annex, a system that works in tandem with git and lets you store large files (but avoids using git as the data store). Our gitolite installation supports git-annex. To start using git-annex, install git-annex locally in your computer. Most GNU/Linux distributions has git-annex packages. Then, in your existing git repository execute the following initialization command:
$ git annex init
This needs to be done only once. To add a file, in your repository, run the following commands:
$ mkdir data
$ cp ~/largedata.csv.bz2 data/
You should encrypt the file if the data is not public. You can use GNU Privacy Guard to do the encryption, and have all your collaborators as recipients for the file. Once encrypted, execute the following commands to include and push the file to the server.
$ git annex add data/largedata.csv.bz2.gpg
$ git commit -m "Added data file"
$ git push --all
$ git annex copy --to origin
Once these commands are successful, your collaborators should be able to get the file with the following command (assuming that they have already run git annex init
):
$ git annex get data/largedata.csv.bz2.gpg
Once you've encrypted non-public data, git-annex is easy to use using the webapp.
$ git annex webapp
Details for Administrators
Creating new repositories
If you are all already administrator, this describes how you will create a new repository.
First, you will need to clone the gitolite-admin repository
$ git clone git@code.communitydata.science:gitolite-admin
And then edit the file conf/gitolite.conf
. To add a new project, simply create a new entry at the bottom of the file.
For example,
repo foo
RW+ = aaron mako
R = jdfoote
would create a new repository at git@code.communitydata.science:foo with aaron and mako as admins, and give jdfoote read-only access *once this file was saved, committed, and pushed*.
You could then go to wherever the files are that you would like to track, and add this repository as a remote, like so:
$ cd foo
$ git init
$ git remote add origin git@code.communitydata.science:foo
$ git add ./ # Adding everything to be tracked in git
$ git commit
$ git push --set-upstream origin master
If this project already exists in git, then it's even easier. Just change the remote, and push it.
$ git remote set-url origin git@code.communitydata.science:foo
$ git push
Adding new users
To add new users, simply add their public key to the keydir/
directory, renamed as username.pub
. The persons username (as called in the code/gitolite.conf
file) will be whatever the username in the filename above is.