What is Git?

Git is a Source Code Management (SCM), a tool for software developers which supports collaborative development of software within a team, and the tracking of changes to software source code over time.

Git is used by developers, and advanced users who need the very latest changes to the software (before releases occur). Software users generally do not need Git; typically they will download official file releases made available by the project instead.

Existing repositories may be imported via a normal git push (since git is a distributed SCM).

Repository access may be granted or revoked from a developer using the Project Admin interface.

Repository backups and mirroring may be performed using rsync or git clone.

Service usage is not restricted by quotas.

Multiple repositories are supported.

Management

Git service may be enabled for your project as follows:

Login as a project administrator and click on the Admin icon in the navigation bar.
* Click on Tools.
* Click on Git.
* Select a name for the label (this will determine the title of the link in the project navigation)
* Select a mountpoint (this will affect the URL for your repository)

Those instructions may be repeated using a different label and mountpoint to create multiple repositories.

Once Git has been enabled, you may wish to adjust permission grants for your users, if you need to disable one or more user's ability to make changes in the git repository.

The standard way to modify the contents of your repository is using a Git client as detailed in the Git User's Manual. Refer to the Getting Started section for how to make your first commit to your new repository.

We strongly recommend that when modifying a repository, other committers be notified of the direct edit window and that you make your own backups prior to editing the content so you can restore it readily yourself in the case of an accident.

Developer Access (Read/Write)

We provide read/write access to Git via ssh or https. ssh will provide better performance than https, and should be used whenever possible.

To access a Git repository, configure your Git client as follows (replace PROJECTNAME with the UNIX group name of the project, and the default MOUNTPOINT is 'code' ):

ssh://USERNAME@git.code.sf.net/p/PROJECTNAME/MOUNTPOINT (read/write)

If ssh does not work for you, you may use https instead, however, access will be slower:

Getting Started

Your project's Git repository will be completely empty at the start. If you have a local Git version older than 1.6.2, you won't be able to clone (pull) your remote repository while it is empty, so see below for how to set up a local repository to push your content to our servers.

How to create a new local repository

Create an empty repository on your local machine like this:

$mkdirPROJECTNAME$cdPROJECTNAME$gitinit

How to clone an existing repository

For a newer version of git (1.6.2 and later), you can simply clone your empty remote repository and get working:

Before typing 'yes' to accept the host fingerprint, ensure the fingerprint is correct for the host. You can find a listing of SSH host keys in the SSH Host Key Fingerprints list. If you receive a host key warning, please contact the SourceForge.net team.

Setting your git username

Users should commit to their project repository using their SourceForge.net username. If that is not already set globally, you can set it locally for the current Git repository like this:

You can now use some combination of "git add" and "git commit" commands to create one or more commits in your local repository.

How to push a local repository

If you did not clone one of our remote repositories (for instance, if your older git version won't let you clone an empty repository), you will have to take some manual setup steps to be able to push your content to our servers.

For any local Git repository, you can configure it to push data back to our server by doing the following from inside your Git repository (this replicates what a "git clone" from our servers sets up for you automatically):

Note: The use of "origin master" prevents Git from complaining that the remote server has no branches in common with your local repository (which is true at the start when the remote repository is completely empty), and "master" is the default branch in Git.

After the first push, you will be able to use the simpler "git push" to push the master branch to our "origin" server.

Once that is done, you will be able to browse your newly-committed content via gitweb, clone the repository via either read-only or read/write access methods, push more check-ins, etc.

Accessing the repository via the shell

Direct access to the bare repository is also available via [SSH], when logged into the shell, it will be available at:

/home/git/p/PROJECTNAME/MOUNTPOINT.git/

Note that the directory is mounted during the shell creation, if you create a new repository while an existing shell session is still active, use the shutdown command on the shell and start a new session.

Hooks

Direct access to the repository can be used to install custom git hooks server-side.

Note however, that a post-receive hook is used for site-integration, if this hook is changed, the code browser view may not longer automatically update. Instead, you should save any post-receive hook as post-receive-user instead, and it will be called by the default post-receive hook.

If you need to re-create the default post-receive hook, the template for that is:

1
2
3
4
5
6
7
8
9

#!/bin/bash# The following is required for site integration, do not remove/modify.# Place user hook code in post-receive-user and it will be called from here.
curl -s http://sourceforge.net/auth/refresh_repo/p/PROJECTNAME/MOUNTPOINT/
DIR="$(dirname "${BASH_SOURCE[0]}")"if[ -x $DIR/post-receive-user ]; thenexec$DIR/post-receive-user
fi

Backups

SourceForge.net performs routine backups for all of our servers and will restore from these backups in the event of catastrophic server failure. We encourage projects to make their own backups of Git data as that data restore can be performed by the project in the event of accidental data destruction by a member of the project team.

Backups of a Git repository may be made using rsync.

Example (replace PROJECTNAME with the UNIX group name of your project):

$ rsync -av git.code.sf.net::p/PROJECTNAME/MOUNTPOINT.git .

Using rsync is important if repository-side configuration such as hook scripts, a 'description' file, and a non-default 'config' file are used.