Jump to content

Git repository on this server: Difference between revisions

From HW wiki
 
(42 intermediate revisions by 2 users not shown)
Line 1: Line 1:
== Repository Types ==
Repositories on rtime server are managed by [http://github.com/sitaramc/gitolite Gitolite tool], which allows to conveniently manage repository permissions. World readable repositories can be [http://rtime.felk.cvut.cz/gitweb browsed online].
This server can host two types of Git repositories.
;Central repositories: These repositories are managed by [http://github.com/sitaramc/gitolite Gitolite tool] which allows convenient management of developer permissions. Repositories, which are world readable can be [http://rtime.felk.cvut.cz/gitweb 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 ==
In addition to gitolite repositories, users with shell account can create [[Git repositories in home directories|Git repositories in their home directory]]. This does not require any coordination with the administrator.


Write access to central repositories can only be given to users who sent their Open SSH public key to the [http://rtime.felk.cvut.cz/~sojka/ administrator] together with their university assigned login name (if any). The SSH key can be created in Linux/Unix (or in [http://code.google.com/p/msysgit/ MSysGit] shell in Windows) by:
== Getting write access to repositories ==


  ssh-keygen
Write access to the repositories can only be given to users who send the following information to the [http://rtime.felk.cvut.cz/~sojka/ administrator]:


It is stored by default at <tt>~/.ssh/id_rsa.pub</tt>.
# OpenSSH public key
# Login name (for ČVUT people) or email address (for others).  


During the key creation you will be asked for a passphrase. If you do not specify any passphrase, anybody with access to your <tt>~/.ssh</tt> directory could access your repositories. If you specify the key, the passphrase will need to be entered whenever to use the key. By using <tt>ssh-add</tt> command you can specify the passphrase only once and the decrypted key will be remebered in the memory.
=== SSH key creation ===


=== Creating central repositories ===
The SSH key can be created with one of the following ways. Note that under Windows, methods 1 and 2 only work if [[Media:git-plink.jpg|OpenSSH]] has been selected during Git installation.


To create the repository send an email to the [http://rtime.felk.cvut.cz/~sojka/ 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.
# Under Linux/Unix (or in Git Bash under Windows) run: <pre>ssh-keygen</pre>
# In Git Gui (under Linux or Windows) choose [[Media:Git-gui-key.jpg|Help -> Show SSH key -> Generate key]].
# Under Windows use PuTTYgen. Use this if you have chosen to [[Media:git-plink.jpg|use Plink]] during Git installation.


=== Automatic creation of repositories ===
It is stored by default at <tt>~/.ssh/id_rsa.pub</tt>.


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:
=== Password-protected keys ===


git push ssh://git@rtime.felk.cvut.cz/«login»/«whatever» HEAD
During the key creation you will be asked for a passphrase. If you do not specify any passphrase, anybody with access to your <tt>~/.ssh</tt> directory could access your repositories. If you specify the passphrase, it will need to be entered whenever you want to push to or pull from the server. By using <tt>ssh-add</tt> command (or Pageant program under Windows) you can specify the passphrase only once and the decrypted key will be remembered in the memory.


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 <tt>git push/pull</tt> without parameters), you can run instead:
== Creating repositories ==


git push --set-upstream ssh://git@rtime.felk.cvut.cz/«login»/«whatever» HEAD
There are two ways how a repository can be created:


==== Permissions to automatic repositories ====
# Send an email to the [http://rtime.felk.cvut.cz/~sojka/ administrator] with the name of the repository, a short description and a list of people (login or email) who should have access to the repository. The administrator creates the repository for you and notifies you when it's done.
# Our group staff members can create their repositories without asking the administrator. See below.


It is also posible to assign basic permissions to the repositories created in this way:
=== Automatic creation of repositories (staff members only) ===
cat > perms
READERS pepa franta
WRITERS kerel lojza
(hit ctrl-d here)
ssh git@rtime.felk.cvut.cz setperms «login»/«whatever» < myperms


It is simply a matter of pushing the repository to a special URL containing the login, like this:


The current permissions can be viewed by
git push --set-upstream ssh://git@rtime.felk.cvut.cz/«login»/«whatever» HEAD


ssh git@rtime.felk.cvut.cz getperms «login»/«whatever»
This will create a new repository called «whatever» (if it does not exist yet) and push the current HEAD to it. It also makes this repository the default for pushing and pulling (this is what --set-upstream does).


More information can be found in [https://github.com/sitaramc/gitolite/blob/master/doc/wildcard-repositories.mkd#_handing_out_rights_to_wildcard_matched_repos Gitolite manual].
Such repository is by default accessible only to the creator. If you want this repository to be public, run
ssh git@rtime.felk.cvut.cz perms «login»/«whatever» + READERS @all


==== Gitweb description for automatic repositories ====
If you want to set a [https://rtime.felk.cvut.cz/gitweb/orte.git Gitweb description] for public repositories created this way, use gitolite's desc commands. I.e. you can set the description by:
ssh git@rtime.felk.cvut.cz desc «login»/«whatever» "Description"


Similar to the getperms/setperms commands, there are the getdesc/setdesc commands. I.e. you can set the description by:
== Accessing the repository ==
echo "Description" | ssh git@rtime.felk.cvut.cz setdesc <repo>


== Personal repositories ==
After [[Git#Install_Git|installing Git]] on your local computer, you
can access the repository as follows.


A personal repository can be created this way:
=== Cloning the repository ===


  ssh ''login''@rtime.felk.cvut.cz
Read/Write access (for users with registered SSH key):
mkdir $HOME/''myproject''.git
  git clone ssh://git@rtime.felk.cvut.cz/''repo-name''
cd $HOME/''myproject''.git
git init --bare --shared=everybody


If you want to make your repository public, it has to be accessible by user <tt>gitdaemon</tt>. It is usually sufficient to give "x" permission to your home directory:
Read-only access (for public repositories only):
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
  git clone git://rtime.felk.cvut.cz/''repo-name''.git
git clone http://rtime.felk.cvut.cz/git/''repo-name''.git


Access managed by gitolite (for users with registered SSH key):
=== First push to admin-created repositories ===
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:
After an empty repository is created by the admin, you can push (i.e. upload) the data to it:


* (Optional -- needed only for personal repos): Setup [[Passwordless_SSH|passwordless login to the server]]
* [[#Cloning the repository|Clone]] the empty repository.
* [[Git#Install_Git|Install Git]] on your local computer
 
==== For git 1.6.2 and newer ====
* [[#Accessing_the_repository|Clone]] the empty repository.
* Put your sources into your cloned repository
* Put your sources into your cloned repository
  git add .            # tells git to track all files in your project
  git add .            # tells git to track all files in your project
Line 90: Line 69:
* Push your sources to the server
* Push your sources to the server
  git push
  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 ===
=== 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:
If you are not allowed to push to the master branch but to a different one, you have to push like this:
  git push origin master:your-branch
  git push origin master:your-branch
which pushes our local master branch to the remote your-branch
which pushes your local master branch to the remote branch ''your-branch''.


To make this behavior default run
To make this behavior default run
Line 116: Line 82:
  git push
  git push


== Contributing to other projects ==
== Managing repositories ==


=== Using personal repository to contribute to other projects ===
=== Finding available repositories ===


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.
You can find the list of repositories you have access to by running:


# Clone a central repository <pre>git clone git://rtime.felk.cvut.cz/project.git</pre>
ssh git@rtime.felk.cvut.cz info [filter]
# Add your rtime personal repository as remote (using SSH access) <pre>git remote add personal yourlogin@rtime.felk.cvut.cz:myproject.git</pre>
# Edit files in project...
# Commit your changes <pre>git commit ...</pre>
# Push your changes to your personal repository <pre>git push personal</pre>
# Write email to somebody with write access to merge changes in <tt>git://rtime.felk.cvut.cz/~''yourlogin''/''myproject''.git</tt>


where filter is optional string used to filter the list.


== Merging changes from forks ==
=== Permissions to automatic repositories ===
 
git remote add fixes git://rtime.felk.cvut.cz/project/forkname.git
git fetch fixes (or git remote update)
git merge fixes/master
 
== Managing central repositories ==
 
=== Finding available repositories ===
 
The default command to get lists repositories accessible by invoking
user


ssh git@rtime.felk.cvut.cz info
The owners of automatically created repositories can manage the access permissions by themselves.


If a rights are defined by globbing than only rights assigned to patterns
The current permissions can be listed by:
are shown


  C R  W      fpga/[a-zA-Z0-9].*
  ssh git@rtime.felk.cvut.cz perms -l «repo»


The command <tt>expand</tt> can be used to find all or matching
You can add permissions for either reading of writing the repo with:
existing repositories accessible by particular user
ssh git@rtime.felk.cvut.cz perms «repo» + READERS «login»
ssh git@rtime.felk.cvut.cz perms «repo» + WRITERS «login»


ssh git@rtime.felk.cvut.cz expand
The permissions can be removed by replacing '''+''' with '''-'''.
ssh git@rtime.felk.cvut.cz expand fpga


=== Setup setup permissions ===
To make your repository visible on [https://rtime.felk.cvut.cz/gitweb/ gitweb], run:
ssh git@rtime.felk.cvut.cz perms «repo» + READERS @all


Only repository owner assigned by main central repository administrator
== Links to git related documents ==
can manage the rights. The set of actual rights to repository
can be obtained by <tt>getperms</tt> command, permission
list can be modified and applied by <tt>setperms</tt> command.
I.e. to allow public access and listing on [http://rtime.felk.cvut.cz/gitweb/ gitweb]
page use next commands sequence


  ssh git@rtime.felk.cvut.cz getperms ''repo-name'' > perms
* [http://support.dce.felk.cvut.cz/mediawiki/index.php/gitolite Gitolite documentation on DCE IT pages]
  echo "READERS @all" >> perms
  ssh git@rtime.felk.cvut.cz setperms ''repo-name'' < perms


[[Category:Git]]
[[Category:Git]]

Latest revision as of 13:54, 12 April 2019

Repositories on rtime server are managed by Gitolite tool, which allows to conveniently manage repository permissions. World readable repositories can be browsed online.

In addition to gitolite repositories, users with shell account can create Git repositories in their home directory. This does not require any coordination with the administrator.

Getting write access to repositories

Write access to the repositories can only be given to users who send the following information to the administrator:

  1. OpenSSH public key
  2. Login name (for ČVUT people) or email address (for others).

SSH key creation

The SSH key can be created with one of the following ways. Note that under Windows, methods 1 and 2 only work if OpenSSH has been selected during Git installation.

  1. Under Linux/Unix (or in Git Bash under Windows) run:
    ssh-keygen
  2. In Git Gui (under Linux or Windows) choose Help -> Show SSH key -> Generate key.
  3. Under Windows use PuTTYgen. Use this if you have chosen to use Plink during Git installation.

It is stored by default at ~/.ssh/id_rsa.pub.

Password-protected keys

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 passphrase, it will need to be entered whenever you want to push to or pull from the server. By using ssh-add command (or Pageant program under Windows) you can specify the passphrase only once and the decrypted key will be remembered in the memory.

Creating repositories

There are two ways how a repository can be created:

  1. Send an email to the administrator with the name of the repository, a short description and a list of people (login or email) who should have access to the repository. The administrator creates the repository for you and notifies you when it's done.
  2. Our group staff members can create their repositories without asking the administrator. See below.

Automatic creation of repositories (staff members only)

It is simply a matter of pushing the repository to a special URL containing the login, like this:

git push --set-upstream ssh://git@rtime.felk.cvut.cz/«login»/«whatever» HEAD

This will create a new repository called «whatever» (if it does not exist yet) and push the current HEAD to it. It also makes this repository the default for pushing and pulling (this is what --set-upstream does).

Such repository is by default accessible only to the creator. If you want this repository to be public, run

ssh git@rtime.felk.cvut.cz perms «login»/«whatever» + READERS @all

If you want to set a Gitweb description for public repositories created this way, use gitolite's desc commands. I.e. you can set the description by:

ssh git@rtime.felk.cvut.cz desc «login»/«whatever» "Description"

Accessing the repository

After installing Git on your local computer, you can access the repository as follows.

Cloning the repository

Read/Write access (for users with registered SSH key):

git clone ssh://git@rtime.felk.cvut.cz/repo-name

Read-only access (for public repositories only):

git clone git://rtime.felk.cvut.cz/repo-name.git
git clone http://rtime.felk.cvut.cz/git/repo-name.git

First push to admin-created repositories

After an empty repository is created by the admin, you can push (i.e. upload) the data to it:

  • 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

Pushing to non-master branches

If you are not allowed to push to the master branch but to a different one, you have to push like this:

git push origin master:your-branch

which pushes your local master branch to the remote branch 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

Managing 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.

Permissions to automatic repositories

The owners of automatically created repositories can manage the access permissions by themselves.

The current permissions can be listed by:

ssh git@rtime.felk.cvut.cz perms -l «repo»

You can add permissions for either reading of writing the repo with:

ssh git@rtime.felk.cvut.cz perms «repo» + READERS «login»
ssh git@rtime.felk.cvut.cz perms «repo» + WRITERS «login»

The permissions can be removed by replacing + with -.

To make your repository visible on gitweb, run:

ssh git@rtime.felk.cvut.cz perms «repo» + READERS @all

Links to git related documents