Git repository on this server
Repository Types
This server can host two types of Git repositories.
- Central repositories
- These repositories are managed by Gitolite tool which allows convenient management of developer permissions. Repositories, which are world readable can be browsed online.
- Personal repositories
- Any user with shell access to this server can can create his/her own git repository under his/her home directory and make it public using git protocol.
Central Repositories
Write access to central repositories can only be given to users who sent their Open SSH public key to the administrator together with their university assigned login name (if any). The SSH key can be created in Linux/Unix (or in MSysGit shell in Windows) by:
ssh-keygen
It is stored by default at ~/.ssh/id_rsa.pub.
During the key creation you will be asked for a passphrase. If you do not specify any passphrase, anybody with access to your ~/.ssh directory could access your repositories. If you specify the key, the passphrase will need to be entered whenever to use the key. By using ssh-add command you can specify the passphrase only once and the decrypted key will be remebered in the memory.
Creating central repositories
To create the repository send an email to the administrator with the name of the repository, a short description and a list of people (SSH public keys) who should have access to the repository.
Automatic creation of repositories
Our group staff members can create their repositories without asking the administrator. It is simply a matter of pushing the repository to a special URL containing the login like this:
git push ssh://git@rtime.felk.cvut.cz/«login»/«whatever» HEAD
This will create a new repository called «whatever» (it it does not exist yet) and push the current HEAD to it. If you want to make this repository default for pushing and pulling (i.e. you can type git push/pull without parameters), you can run instead:
git push --set-upstream ssh://git@rtime.felk.cvut.cz/«login»/«whatever» HEAD
Gitweb description for automatic repositories
Similar to the getperms/setperms commands, there are the getdesc/setdesc commands. I.e. you can set the description by:
echo "Description" | ssh git@rtime.felk.cvut.cz setdesc <repo>
Managing central repositories
Finding available repositories
You can find the list of repositories you have access to by running:
ssh git@rtime.felk.cvut.cz info [filter]
where filter is optional string used to filter the list.
It there are wildcard (automatic) repositories, as in the example below, you will only see the wildcard pattern and not the created repositories.
C R W fpga/[a-zA-Z0-9].*
To expand the wildcards, use the command expand instead of info. This command is a way slower than info command!
ssh git@rtime.felk.cvut.cz expand ssh git@rtime.felk.cvut.cz expand fpga
Permissions to automatic repositories
The owners of automatically created repositories can manage the access permissions by themselves:
cat > perms READERS pepa franta WRITERS kerel lojza (hit ctrl-d here) ssh git@rtime.felk.cvut.cz setperms «login»/«whatever» < myperms
The current permissions can be viewed by
ssh git@rtime.felk.cvut.cz getperms «login»/«whatever»
More information can be found in Gitolite manual.
To allow public access and listing on gitweb page use the following command sequence:
ssh git@rtime.felk.cvut.cz getperms repo-name > perms echo "READERS @all" >> perms ssh git@rtime.felk.cvut.cz setperms repo-name < perms
This script can be used to make permission management easier.
Personal repositories
A personal repository can be created this way:
ssh login@rtime.felk.cvut.cz mkdir $HOME/myproject.git cd $HOME/myproject.git git init --bare --shared=everybody
If you want to make your repository public, it has to be accessible by user gitdaemon. It is usually sufficient to give "x" permission to your home directory:
setfacl -m user:gitdaemon:x $HOME
Accessing the repository
Everybody can use one of following commands to work with the code in the repository (it is not necessary add origin and configure remote branches as described above):
Central repository
Read-only access for public repositories:
git clone git://rtime.felk.cvut.cz/repo-name.git
Access managed by gitolite (for users with registered SSH key):
git clone ssh://git@rtime.felk.cvut.cz/repo-name
Personal repository
Read-only access for public repositories: git clone git://rtime.felk.cvut.cz/~yourlogin/repo-name.git
First push
After an empty repository is created either by you (personal) of by an admin (central), you can push (upload) the data to it:
- (Optional -- needed only for personal repos): Setup passwordless login to the server
- Install Git on your local computer
For git 1.6.2 and newer
- Clone the empty repository.
- Put your sources into your cloned repository
git add . # tells git to track all files in your project git commit # commits the added files to the repository
- Push your sources to the server
git push
For older git versions
- Put your sources into your local repository
cd your/project git init # initializes git repository in your project's directory git add . # tells git to track all files in your project git commit # commits the added files to the repository
- Then "connect" your repository to the one on this server (replace login by your login and repo-name by the name of repository created for you)
git remote add origin git@rtime.felk.cvut.cz:repo-name # this is for central repos git config branch.master.remote origin git config branch.master.merge refs/heads/master
- Push your sources to the server
git push --all
Pushing to non-master branches
If you are not allowed to push to the master branch but a different one, you have to push like this:
git push origin master:your-branch
which pushes our local master branch to the remote your-branch
To make this behavior default run
git config remote.origin.push master:your-branch
And from now on, it is sufficient to run only
git push
Contributing to other projects
Using personal repository to contribute to other projects
If you do not have write access to the repository of some project (not necessary a central repository on this server), you can work in your personal repository then ask somebody with write access to merge your changes.
- Clone a central repository
git clone git://rtime.felk.cvut.cz/project.git
- Add your rtime personal repository as remote (using SSH access)
git remote add personal yourlogin@rtime.felk.cvut.cz:myproject.git
- Edit files in project...
- Commit your changes
git commit ...
- Push your changes to your personal repository
git push personal
- Write email to somebody with write access to merge changes in git://rtime.felk.cvut.cz/~yourlogin/myproject.git
Merging changes from forks
git remote add fixes git://rtime.felk.cvut.cz/project/forkname.git git fetch fixes (or git remote update) git merge fixes/master