Sysadmin/GitKdeOrgManual

From KDE Community Wiki

Overview of facilities

Account management; notably managing your SSH public keys for read-write developer access.
  • git.kde.org
Serves up the repositories, via git:// for anonymous read access and via SSH (on both ports 22 and 443) for read-write developer access (read-only access via HTTP is on the way).
Central project hub and primary repository browser.
Alternative repository browser. At present the only way to view personal clones of project repositories and personal scratch repositories (see below), however the former are planned to appear in projects.kde.org in the future.
Patch review (account sign-up via KDE Identity).
  • commits.kde.org
Provides git commit "short URLs", redirecting to KDE Projects and gitweb.kde.org pages as appropriate (example).

How to get read-write developer access

KDE developer accounts are managed through KDE Identity. If you already have a KDE SVN developer account, it has been imported into KDE Identity and you may use the Password Reset feature to set a password and manage your SSH public keys. If you don't have a developer account yet, you can request Developer Access in the website's menu upon registering and logging into your account.

Overview of repository URL schemes

URL prefixes

Anonymous read-only access uses the following URL prefix:

 git://git.kde.org/

Read-write developer access uses this prefix instead:

 [email protected]:

Repository paths

Following the prefix, here are the path schemes for different types of repositories:

  • <project identifier>.git
A KDE project repository, be it part of the KDE SC, KDE Extragear or KDE Playground.
  • websites/<address sans leading www. and dots replaced by dashes>.git
A KDE website project, e.g. websites/projects-kde-org.git.
  • sysadmin/<repository name>.git
Non-public repositories used by KDE's sysadmin team.
  • clones/<original repository path>/<KDE Identity user name>/<user-chosen repository name>.git
Personal clones of project repositories, e.g. clones/konversation.git/hein/morecowbell.git or clones/websites/projects-kde-org.git/hein/pluginwork.git (more below).
  • scratch/<KDE identity user name>/<user-chosen repository name>.git
Personal scratch repositories are a means to start a new project or just to store your favorite .bashrc in a safe location: anything is allowed so long as it is related to KDE or your work for KDE in some way (more below).

Server-side commands

git.kde.org understands several server-side commands that can be used on the command line via SSH in this fashion:

ssh [email protected] <command> [parameters]

The following is a list of the commands that are currently available, broadly divided into categories as per their purpose.

Commands for information retrieval

  • info
Shows a table of repository paths and path patterns you have the permission to see along with details about your access rights to them.
A brief legend for the permission flags shown in the listing:
  • @R - Read permissions.
  • @W - Write permissions.
  • @C - Create permissions (e.g. the initial push to a newly-created repo).
If you want to list actual repositories corresponding to patterns listed by info, such as your personal scratch repositories, see the expand command described next.
  • expand [regex]
Like info above, but actually walks through the repositories to verify the information. It's much slower as a result, and should be used if info doesn't provide enough information. For example, info will list your personal scratch space only in the form of a pattern while expand can list the actual repositories located there.
The output is limited to about 20 rows. The optional regex parameter allows you to filter the listing.
  • who-pushed <commit sha1 hash>
Shows the KDE Identity user name of the contributor who pushed the specified commit.

Commands to manage personal repositories

  • clone <path to source repository> <clone name>
Can be used to make a personal clone of a project repository.
An example:
 ssh [email protected] clone konversation.git mykonvi.git
This results in a clone at clones/konversation.git/<your KDE Identity user name>/mykonvi.git.
A second example with a longer source repository path:
 ssh [email protected] clone websites/projects-kde-org.git newtheme.git
This results in a clone at clones/websites/projects-kde-org.git/<your KDE Identity user name>/newtheme.git.
More on personal clones here.
  • destroy <repository path>
Used to delete a personal clone of a project repository or a personal scratch repository. Requires the repository to be unlocked first using the unlock command and will ask for confirmation. See also the trash command as an alternative to outright and irrevocable deletion.
  • lock <repository path>
Locks a repository, causing the destroy command to deny deleting it.
Newly-created repositories are locked by default.
  • unlock <repository path>
Unlocks a repository, making it possible to delete it using the destroy command.

Commands to manage the personal trash area

  • trash <repository path>
Moves a repository to the personal trash area, creating an entry in the form <repository name>/<timestamp> there. The timestamps, which have second precision, make it possible to have more than one version of a repository in the trash area at the same time.
Note: Entries in the trash area are automatically removed after 28 days!
  • list-trash
Lists all entries in the personal trash area, in the form <repository name>/<timestamp>.
  • restore <trash area entry>
Restores an entry from the personal trash area (see the list-trash command).

Commands for system administrators

  • sudo <KDE Identity user name> <command>
Used by system administrators to run one of the above as another user.
  • able <en|dis> <@all|repository path>
Used by system administrators to enable or disable writes to particular repositories or all repositories, for maintenance.
  • ohnoes <show|recover> <repository path> <gitref>
Used by system administrators to recover deleted branches or mistaken force pushes (rewinds).

Personal repositories

git.kde.org currently offers two types of personal repositories: Personal clones of project repositories and personal scratch repositories.

Personal clones of project repositories

A personal clone of a project repository can be created using the server-side clone command on the command line:

 ssh [email protected] clone <path to source repository> <clone name>

This will create a clone of the source repository at clones/<path to source repository>/<KDE Identity user name>/<clone name>. (See more examples of clone in action here.)

This scheme makes it very easy to locate all personal clones of a given project and should be preferred over making one in your personal scratch space. (In fact, the server-side clone command won't allow you to clone a project repository into your personal scratch space, but nothing technically prevents you from taking the detour of a local clone to achieve this.)

Personal clones of project repositories currently do not show up on KDE Projects, but we have plans to change that in the future. Until then, you can use gitweb.kde.org to browse these repositories.

Personal scratch repositories

Personal scratch repositories are a means to start a new project or just to store your favorite .bashrc in a safe location: anything is allowed so long as it is related to KDE or your work for KDE in some way.

Creating one is easily done by just pushing:

 git push --all [email protected]:scratch/<your KDE Identity user name>/<repo name of your choosing>.git

(Or you could use git remote add to add a remote to push to.)

Personal scratch repositories can be browsed on gitweb.kde.org.

If you feel your new project is ready for the wider world and/or wish to signal that it welcomes outside contributors, you may wish to promote it to the status of a KDE Playground project. KDE Playground project repositories are located at the top-level, i.e. the repository will be moved out of your scratch space and may have to be renamed in the event of a collision with an existing repository name. KDE Playground projects are featured on KDE Projects and covered by the kde-commits mailing list (and thus CommitFilter), LXR, the EBN and CIA, unlike personal scratch repositories.

To request your scratch repository be promoted to the status of a KDE Playground project, you currently need to file a sysadmin request. In the future we plan to provide a fully automated facility on KDE Projects.

Note that we have deliberately decided not to allow the direct creation of KDE Playground projects; the path to existence for a KDE Playground repository project always leads through a personal scratch space first. This is to give you the power to decide whether your project is ready, and also to force you to deliberate whether it truly is.

Requesting project migrations from KDE SVN or Gitorious.org

To get your project moved from KDE SVN or Gitorious.org to git.kde.org, you have to file a sysadmin request providing the following information:

  • The name and description of the project.
  • The current location of the project.
  • Its current or intended module (e.g. playground/utils or extragear/network).
  • Which KDE Identity user name(s) should have admin rights to the repository and the entry on KDE Projects.
  • The email address that the ReviewBoard group for the project should send emails to.
  • The date and time the migration should take place (can be "asap").

When we have completed processing your request, there will be an empty repository at the chosen path (more here) that the repository admins can push the data into.