Sysadmin/GitKdeOrgManual: Difference between revisions
commits.kde.org is discontinued (?) |
|||
(154 intermediate revisions by 48 users not shown) | |||
Line 1: | Line 1: | ||
[[File:Mascot konqi-app-system.png|thumbnail|right|[[Konqi]] and the gears.]] | |||
== Overview of facilities == | == Overview of facilities == | ||
* '''[ | * '''[https://invent.kde.org/ Invent]''' (invent.kde.org) | ||
: | :Patch review (account sign-up via [http://identity.kde.org/ KDE Identity]), repository browser and other services. | ||
* ''' | === Discontinued services === | ||
: | The following services have been discontinued. Usually their role is now provided by other systems, but they typically are missing some important features which the previous systems had. The redesign unfortunately breaks the workflow e.g. in KDevelop which is not yet adapted to the new setup. The culled systems are listed here for reference as they may well still be referenced in older documentation. | ||
* '''commits.kde.org''' | |||
:Provides Git commit "short URLs", redirecting to the repository browser pages as appropriate ([http://commits.kde.org/324dd0cd/a8d1175f61e678f61b3643c867f212ad26ce6f44 example]). | |||
* '''[http://projects.kde.org/ KDE Projects]''' (projects.kde.org) | * '''[http://projects.kde.org/ KDE Projects]''' (projects.kde.org) | ||
:Central project hub and primary repository browser. | :Central project hub and primary repository browser. | ||
:Replaced by: the sysadmin/repo-metadata repository (metadata information); phabricator.kde.org (browser) | |||
* '''[http:// | * '''[http://commitfilter.kde.org commitfilter.kde.org]''' | ||
: | :Sends an email with each commit for the projects you want to watch. | ||
* ''' | * '''git.kde.org''' | ||
: | :The main git server. Should be used only for pushing new commits to a repository over the SSH protocol. | ||
* ''' | * '''anongit.kde.org''' | ||
: | :Several servers which allow read-only access to the repositories via the git:// and http:// protocols. They are requested to update when anyone pushes to a repo on git.kde.org, so it can be thought of as being always up-to-date. | ||
* '''[https://cgit.kde.org/ cgit.kde.org]''' | |||
:Repository browser. It shows also personal clones of project repositories and personal scratch repositories ([[#Personal repositories|see below]]),. | |||
* '''[https://phabricator.kde.org/ Phabricator]''' (phabricator.kde.org) | |||
:Patch review (account sign-up via [http://identity.kde.org/ KDE Identity]). [[Infrastructure/Phabricator|Phabricator]], repository browser, calendar and other services. Phabricator is currently being replaced by Invent and only the workboard component has not been migrated to Invent yet. | |||
== How to get read-write developer access == | |||
KDE developer accounts are managed through [http://identity.kde.org/ 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. | |||
== Information For KDE Developers == | |||
For general information visit the page about [[Infrastructure/Git | the use of Git by KDE]]. | |||
To configure Git for your KDE Development environment, please see the [http://techbase.kde.org/Development/Git/Configuration KDE Git Configuration] page on TechBase. | |||
You can find some simple step-by-step recipes for using the KDE Git repositories on the [http://techbase.kde.org/Development/Git/Recipes KDE Git Recipes] page on TechBase. | |||
== Some notes about repository URLs == | |||
=== URL prefixes === | |||
(KDevelop 5.x users please note: If you came here via the link in KDevelop, note that KDE projects has been '''discontinued''' and replaced by ''Invent''. So the neat automatic import of KDE projects ''no longer works'' and you have to do everything manually instead. Sorry!) | |||
=== Let Git rewrite URL prefixes === | |||
Instead of remembering URL prefixes, you can also put the following in your <tt>~/.config/git/config</tt>: | |||
[url "https://invent.kde.org/"] | |||
: | insteadOf = kde: | ||
[url "ssh://git@invent.kde.org/"] | |||
pushInsteadOf = kde: | |||
Then, to clone e. g. the Amarok repo, just do | |||
git | $ git clone kde:multimedia/amarok.git | ||
By using the <tt>kde:</tt> prefix, read access will automatically happen over HTTPS, and authenticated SSH is only required for pushes. | |||
== Commit hook keywords == | |||
See [[Policies/Commit_Policy#Special_keywords_in_GIT_and_SVN_log_messages | Special keywords in GIT and SVN log messages]] | |||
== Personal repositories == | |||
: | invent.kde.org currently offers two types of personal repositories: Personal clones of project repositories and personal repositories. | ||
=== Personal clones of project repositories === | |||
A personal clone of a project repository can be created using the gitlab web interface. | |||
This will create a clone of the source repository in your personal namespace. | |||
=== Personal repositories === | |||
=== Personal | |||
Personal scratch repositories are a means to start a new project or just to store your favorite <tt>.bashrc</tt> in a safe location: anything is allowed so long as it is related to KDE or your work for KDE in some way. | |||
You can create and delete a new personal repository using the gitlab web interface. | |||
To request your scratch repository be promoted to the status of a KDE Playground project, you currently need to file a [https://go.kde.org/systickets sysadmin repo request]. For details, see the description of an [[Policies/Application Lifecycle|Application Lifecycle]]. | |||
== Advanced Git == | |||
=== Safety Precautions === | |||
With these techniques, always work on a disposable copy of the repo with all the remotes removed, so if you screw up, it doesn't really matter. Also, work on a separate branch. That way, you can usually use <tt>git reset --hard <original-branch></tt> to get back to the starting state. | |||
Also, make sure there are no grafts around (eg: linking to the old kdelibs history in the case of frameworks). The safest way to do this is to use fresh checkouts. | |||
=== Merging repositories === | |||
The <tt>git-merge-repo</tt> script in [https://projects.kde.org/projects/kde/kdesdk/kde-dev-scripts kde-dev-scripts] can merge the tree and history of one git repository into another. | |||
First, create a commit in the source repo that removes any files you don't want to copy, and rearrange the remaining files to be as you want them to appear in the target repo. It is important the HEAD of the source and target repositories have completely disjoint trees (so you could copy one tree into the other with no file conflicts). | |||
Then go to the root of the target repository and run | |||
/path/to/kde-dev-scripts/git-merge-repo <path to source repo> | |||
This will preserve commit identities (unless you filter the source repository - see below). | |||
Note | :<span style="color:red">'''Note:'''</span> Before pushing such a merge, talk to [http://sysadmin.kde.org/ sysadmin] (ideally on #kde-sysadmin in irc). They can temporarily disable commit hooks (like CCMAIL and BUG) so that people do not get emails about old commits. | ||
=== | === Filtering === | ||
<tt>git filter-branch</tt> allows you to edit history. This is useful when you want to merge only a small part of one repository into another. You can trim the tree, and also alter the commit messages (for example to add information about the origin of the commits). | |||
A combination of <tt>--tree-filter</tt>, <tt>--prune-empty</tt> and <tt>--msg-filter</tt> generally gets what you want. For example, | |||
git filter-branch --prune-empty \ | |||
--tree-filter "find -type f -\! -path './.git/*' -\! -name foo.\* -delete" \ | |||
--msg-filter 'cat; echo; echo "Commit $GIT_COMMIT in <source-repo>"' \ | |||
HEAD | |||
This example will remove everything that does not match <tt>foo.*</tt>. Note the <tt>-path</tt> argument to <tt>find</tt> that makes sure you don't delete any of git's own files. <tt>--prune-empty</tt> will remove non-merge commits that no longer have any effect on the tree (you can run <tt>git rebase</tt> after to trim the merge commits if you want). <tt>--msg-filter</tt> adds information about where the commit came from (don't forget to change <tt><source-repo></tt>!) | |||
More complex filters are possible. Have a look at the man page for <tt>git-filter-branch</tt>. Note that while you could use the commit message filter to neuter commit hook keywords like CCMAIL, it is better to ask a sysadmin to disable the commit hooks temporarily while you push. | |||
See [http://whileimautomaton.net/2010/04/03012432 mastering git filter-branch: points to extract a subproject] for more helpful hints. |
Latest revision as of 21:49, 26 May 2023
Overview of facilities
- Invent (invent.kde.org)
- Patch review (account sign-up via KDE Identity), repository browser and other services.
Discontinued services
The following services have been discontinued. Usually their role is now provided by other systems, but they typically are missing some important features which the previous systems had. The redesign unfortunately breaks the workflow e.g. in KDevelop which is not yet adapted to the new setup. The culled systems are listed here for reference as they may well still be referenced in older documentation.
- commits.kde.org
- Provides Git commit "short URLs", redirecting to the repository browser pages as appropriate (example).
- KDE Projects (projects.kde.org)
- Central project hub and primary repository browser.
- Replaced by: the sysadmin/repo-metadata repository (metadata information); phabricator.kde.org (browser)
- Sends an email with each commit for the projects you want to watch.
- git.kde.org
- The main git server. Should be used only for pushing new commits to a repository over the SSH protocol.
- anongit.kde.org
- Several servers which allow read-only access to the repositories via the git:// and http:// protocols. They are requested to update when anyone pushes to a repo on git.kde.org, so it can be thought of as being always up-to-date.
- Repository browser. It shows also personal clones of project repositories and personal scratch repositories (see below),.
- Phabricator (phabricator.kde.org)
- Patch review (account sign-up via KDE Identity). Phabricator, repository browser, calendar and other services. Phabricator is currently being replaced by Invent and only the workboard component has not been migrated to Invent yet.
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.
Information For KDE Developers
For general information visit the page about the use of Git by KDE.
To configure Git for your KDE Development environment, please see the KDE Git Configuration page on TechBase.
You can find some simple step-by-step recipes for using the KDE Git repositories on the KDE Git Recipes page on TechBase.
Some notes about repository URLs
URL prefixes
(KDevelop 5.x users please note: If you came here via the link in KDevelop, note that KDE projects has been discontinued and replaced by Invent. So the neat automatic import of KDE projects no longer works and you have to do everything manually instead. Sorry!)
Let Git rewrite URL prefixes
Instead of remembering URL prefixes, you can also put the following in your ~/.config/git/config:
[url "https://invent.kde.org/"] insteadOf = kde: [url "ssh://[email protected]/"] pushInsteadOf = kde:
Then, to clone e. g. the Amarok repo, just do
$ git clone kde:multimedia/amarok.git
By using the kde: prefix, read access will automatically happen over HTTPS, and authenticated SSH is only required for pushes.
Commit hook keywords
See Special keywords in GIT and SVN log messages
Personal repositories
invent.kde.org currently offers two types of personal repositories: Personal clones of project repositories and personal repositories.
Personal clones of project repositories
A personal clone of a project repository can be created using the gitlab web interface.
This will create a clone of the source repository in your personal namespace.
Personal 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.
You can create and delete a new personal repository using the gitlab web interface.
To request your scratch repository be promoted to the status of a KDE Playground project, you currently need to file a sysadmin repo request. For details, see the description of an Application Lifecycle.
Advanced Git
Safety Precautions
With these techniques, always work on a disposable copy of the repo with all the remotes removed, so if you screw up, it doesn't really matter. Also, work on a separate branch. That way, you can usually use git reset --hard <original-branch> to get back to the starting state.
Also, make sure there are no grafts around (eg: linking to the old kdelibs history in the case of frameworks). The safest way to do this is to use fresh checkouts.
Merging repositories
The git-merge-repo script in kde-dev-scripts can merge the tree and history of one git repository into another.
First, create a commit in the source repo that removes any files you don't want to copy, and rearrange the remaining files to be as you want them to appear in the target repo. It is important the HEAD of the source and target repositories have completely disjoint trees (so you could copy one tree into the other with no file conflicts).
Then go to the root of the target repository and run
/path/to/kde-dev-scripts/git-merge-repo <path to source repo>
This will preserve commit identities (unless you filter the source repository - see below).
- Note: Before pushing such a merge, talk to sysadmin (ideally on #kde-sysadmin in irc). They can temporarily disable commit hooks (like CCMAIL and BUG) so that people do not get emails about old commits.
Filtering
git filter-branch allows you to edit history. This is useful when you want to merge only a small part of one repository into another. You can trim the tree, and also alter the commit messages (for example to add information about the origin of the commits).
A combination of --tree-filter, --prune-empty and --msg-filter generally gets what you want. For example,
git filter-branch --prune-empty \ --tree-filter "find -type f -\! -path './.git/*' -\! -name foo.\* -delete" \ --msg-filter 'cat; echo; echo "Commit $GIT_COMMIT in <source-repo>"' \ HEAD
This example will remove everything that does not match foo.*. Note the -path argument to find that makes sure you don't delete any of git's own files. --prune-empty will remove non-merge commits that no longer have any effect on the tree (you can run git rebase after to trim the merge commits if you want). --msg-filter adds information about where the commit came from (don't forget to change <source-repo>!)
More complex filters are possible. Have a look at the man page for git-filter-branch. Note that while you could use the commit message filter to neuter commit hook keywords like CCMAIL, it is better to ask a sysadmin to disable the commit hooks temporarily while you push.
See mastering git filter-branch: points to extract a subproject for more helpful hints.