<?xml version="1.0"?>
<!DOCTYPE riscos-prm PUBLIC "-//Gerph//DTD PRM documentation 1.03//EN"
                            "http://gerph.org/dtd/103/prm.dtd">

<riscos-prm>
<chapter title="PyromaniacGit">
<section title="Introduction">
<p>
    Git is a source control management system used across the world for storing
    and managing software repositories. It is a distributed source control system
    designed to allow multiple stands of changes to be made by different individuals
    and brought together. In addition to a large user base, git scales well between
    managing small and large projects. It is the defacto industry standard for
    modern software development.
</p>

<p>
    The PyromaniacGit module provides an interface from within RISC OS to the
    Git source control management tool provided by the host system. By interfacing
    to the host system, it avoids needing to provide a native RISC OS implementation
    and provides many of the facilities that are expected by such a tool.
</p>

</section>

<section title="Overview">
<p>
    The Git source control system is used the world over, and many documents
    describe its usage far better than can be done justice here. However, a
    short overview of how the source control system can be used may help to
    illustrate a common case.
</p>

<subsection title="Making changes to an existing repository">
<p>
    One of the most common operations with Git is to make changes to an existing
    repository. The workflow may differ depending on whether you are continuing
    making changes, where the repository lives, and your preferences, but in
    general the workflow will be something like this:
</p>

<p>
    <list>
        <item>Locate the repository you wish to change. This might mean finding
            the repository online, or within the local filesystem.</item>
        <item>Clone the repository to a working directory where you will make
            changes. This copies the repository and its history to your local
            system so that you can examine and use the files locally.</item>
        <item>Create a new branch. The branch allows you to keep your changes away from the original code and describes what is being modified.</item>
        <item>Modify some files to do what you want.</item>
        <item>Build, test or otherwise check that they do actually do what you want.</item>
        <item>Stage the changes for commit. This marks them as being ready for commit as a checkpoint that you may return to. You can continue to modify files after this, and then stage more changes later.</item>
        <item>Commit the changes. This places the staged files in the repository's history.</item>
        <item>Push the changes to the original repository. This makes the changes available to other people.</item>
        <item>Invite others to review the changes and comment on them.</item>
        <item>Make changes to based on the comments.</item>
        <item>Stage, commit and push, as before. Repeat the review process.</item>
        <item>Merge the changes from your branch into the original code.</item>
    </list>
</p>
</subsection>
</section>


<section title="Terminology">
<p>
    Within the Git management system there are many terms and phrases which are
    used to describe operations. The core Git documentation describes many of
    these in greater detail, and with greater accuracy, than here. However, it
    is useful to include some of the terms here as an introduction.
</p>
<p>
    <definition-table>
        <definition name="Repository">A Git Repository is a collection of the
            details about an entire software project's history and its meta data.
            It contains historic change details in the differences in files,
            the annotations made as commit messages, details about who made them
            and when, and administrative information such as branches and tags.
            The repository is usually local when it is being worked on, but can
            be transferred to remote servers so that others may work with it.
            The repository files are usually stored in the '.git' directory
            within the working directory.
        </definition>

        <definition name="Working directory">The working directory is where
            source files have been checked out at a given point in history.
            The working directory may be clean (having no changes compared to
            the version stored in the repository) or dirty (having changed
            files).
        </definition>

        <definition name="Branch">A branch is a continuation of development which
            has diverged from another branch, which has been given a name. A Git
            repository has at least one branch, but commonly has many branches
            for work in progress, releases or just to store ideas. A branch
            can contain any number of changes to source files.</definition>

        <definition name="Commit">The history of changes within a repository
            is organised by 'commits'. Each commit is a collection of the changes
            that have been made to the files within the repository, and some
            information about those changes. Associate with the commit is a
            message describing the changes and metadata such as the name of
            the author of the change and the date that it occurred. A commit
            is identified by a unique identifier - a hash called the 'SHA' -
            which can be used to return to that point in time. The act of
            creating a new commit in the history is called 'committing'.
        </definition>

        <definition name="Index">'Index' is the slightly confusing name for
            files which have been staged for commit. The name comes from the
            way in which the files are stored internally. Staged files in
            the index are safe and you can revert your current changes to
            the point at which they were added to the 'index'. The index only
            exists in the local repository, and is not visible to anyone
            else. To make the staged files available to others, and remove
            them from the 'index', they must be committed. Files in the index
            are also referred to as having been 'cached'.
        </definition>

        <definition name="Staging">Staging is the act of marking some changes
            as being a good checkpoint by moving them to the index. Files that
            have been staged may be committed, or they be compared to the
            current working directory, or the working directory can be reverted
            to that checkpoint.
        </definition>

        <definition name="Merge">A merge is when two (or more) branches of
            development are brought together into a single branch. A merge
            is usually made when the changes on a branch have been reviewed
            and are felt to be acceptable for use in a branch. However, the
            merge can go the other way as well. If the original branch has
            had changes made to it, it can be useful to merge the original branch
            into another, to 'catch up' with the original.</definition>

        <definition name="Clone">To work with any repository, it is necessary
            to take a copy of it, together with its history. This is called
            'cloning' the repository. The clone is a snapshot of the current
            state of that repository. The original repository may have other
            people work with it, and so it may be necessary to 'pull' more
            changes later, to catch up to the latest version.</definition>

        <definition name="Remote repository">A repository present on your
            system usually has a remote repository associated with it. The
            remote repository usually has a simple name like 'origin'.
            Changes in your local repository may be pushed to the remote
            repository to publish them for others to see. The remote repository
            may have its changes pulled into your local repository so that
            you can see changes that other people have made.</definition>

        <definition name="Fetch">A remote repository will be updated by
            other people. In order for you to see those changes, it is
            necessary to fetch the changes from the repository. Fetching
            the changes will make them available to your local repository
            but not modify any local branches or your working directory.
        </definition>

        <definition name="Pull">When changes are made to a remote repository
            it is usually necessary to pull them into your branch. The
            'pull' operation is actually a combination of fetching the changes
            from the remote repository, and then merging those changes into
            your current branch.</definition>

        <definition name="Pull Request">A 'Pull request', sometimes called a
            'PR' or 'Merge request' is a request for a set of changes which
            you have made to be reviewed by the original author (or others)
            with the intention of merging the change into the original branch.
            The term is a misnomer these days, as the 'pull request' is
            usually a 'push' of the changes to a remote repository, which is
            then reviewed before merging with a branch.</definition>

        <definition name="Diff">A 'diff' is a set of differences between two
            versions of a file. Usually a diff is represented by lines that
            have been removed (usually indicated by a '-' prefix) and lines
            that have been added (usually indicated by a '+' prefix). A 'diff'
            is also used to refer to a collection of these differences for
            files which make up a given change or commit.</definition>
    </definition-table>
</p>
</section>


<section title="Technical details">
<p>
    The Git implementation provided by RISC OS Pyromaniac is as faithful as it
    can be to the original unix version of the Git tool. There are differences
    and features which are not implemented - particularly those which are more
    advanced and are not required for day-to-day usage of sources.
</p>

<p>
    The PyromaniacGit tool does not make assumptions or allowances for the
    version of Git which is installed on the host system. As such, your experience
    may differ if an earlier or later version of the host git tool is installed.
    Git commands such as 'git switch' only exist on later versions of the git
    tool, but they are provided nonetheless by the PyromaniacGit implementation.
    If a command is not supported by the host git, an error will be reported.
</p>

<subsection title="RISC OS specifics">
    <p>The tool applies certain restrictions and has some changes from the
        original, in order to match with the way in which RISC OS functions.
        To the average user these will not be noticed, but it is useful to
        be aware of where the behaviour is different.</p>

    <subsubsection title="Filenames and filetypes">
        <p>
            Files used by the PyromaniacGit tool must live on the host
            filesystem and be accessible to the host git tool. When a filename
            is supplied to the <command>*Git</command> tool, it should be
            preceeded by a '--' sequence to ensure that it is clear that
            a filename is expected. Filenames will be converted from the
            RISC OS format to the native format before being supplied to
            the host git tool.
        </p>
        <p>
            This has an effect on how the files are handled when it comes
            to filetypes. Filetypes are part of the filename in the host
            storage for RISC OS Pyromaniac, and as such the filename supplied
            on the command line will be expanded to include a filetype.
        </p>
        <p>
            Certain commands such as <command>*Git revparse --show-toplevel</command>
            are only used to generate filenames. These commands are processed
            to turn the host filename format into RISC OS filename format.
            However, these commands are the exception rather than the rule. In
            most other cases, filenames output by PyromaniacGit will appear in
            host format. Commands such as <command>*Git status</command> will
            therefore use the host filename format.
        </p>
        <p>This may change in the future, but it is a current limitation.
        </p>
    </subsubsection>

    <subsubsection title="Identifier alphabets">
        <p>
        Within Git on other systems, identifiers are expected to be supplied
        in UTF-8 format. However, RISC OS does not generally use UTF-8 for
        its input or output, and relies on a global configuration called the
        alphabet. PyromaniacGit will convert identifiers from the global
        alphabet to UTF-8 before passing these to the host git tool. This
        includes identifiers such as:
        </p>
        <p>
            <list>
                <item>Repository names</item>
                <item>Branch names</item>
                <item>Tag names</item>
            </list>
        </p>
        <p>
            Messages supplied to the Git tool (for example, on commit)
            on the command line with the '-m' switch, or within files with
            the '--file' switch, will also be converted from the current
            alphabet to UTF-8 before being passed to the host tool.
        </p>
        <p>
            All output from the tool is converted from UTF-8 to the current
            alphabet before being passed to the RISC OS VDU system.</p>
        <p>
            This means that if you type <userinput>*Git branch £</userinput>,
            a branch named '£' will be created using the UTF-8 encoding, and
            if you type <userinput>*Git branch</userinput>, the branch name
            will appear as the pound sign character, as expected.
        </p>
    </subsubsection>

    <subsubsection title="System variables">
        <p>
            The original git system uses environment variables to configure
            some settings within the system. These variables are in the usual
            POSIX form of capital letters, separated by underscores. This is
            not the RISC OS way of doing things, so the variables used by
            the RISC OS clients are similar to those names, but use mixed
            case and separated by '$' between the common sections.
        </p>
        <p>
            There are a lot of environment variables which can be set, not
            all of which make sense under RISC OS. The system variables are
            documented within this chapter. Many of the variables follow the
            same pattern, in the original system, which is replicated on
            RISC OS.
        </p>
        <p>
            <list>
                <item>Variables which specify a file or directory name are
                    given in RISC OS format and will be converted before
                    being passed to the host git command.</item>
                <item>Variables which specify a list of files or directory
                    names are given in RISC OS format, separated by commas.
                    In the original, they would be separated by colons,
                    but a colon is part of the filename specification on
                    RISC OS.</item>
                <item>Variables which may trace different parts of the code,
                    may be specified with a RISC OS filename, or a number.
                </item>
                <item>Variables which specify names (such as the committer
                    or author names) are converted from the current alphabet
                    to UTF-8.
                </item>
            </list>
        </p>
        <p>
            Information about the system variables can also be obtained through
            the command <command>*Help GitVariables</command>.
        </p>
    </subsubsection>

    <subsubsection title="Output colour translation">
        <p>
            Output from the PyromaniacGit tool is expected to be at the
            command line by users. As such the tool is able to convert the
            colour control sequences (often called ANSI or VT control codes)
            into RISC OS text selection sequences. This means that the
            output you see within RISC OS will most closely resemble that
            which you would have seen in a non-RISC OS environment.
        </p>

        <p>
            In particular this means that the output from
            <command>*Git diff</command> and <command>*Git log</command>
            are coloured to make it easier to read them.
        </p>
    </subsubsection>

    <subsubsection title="Configuration file">
        <p>
            The configuration file, usually '.gitconfig' in your home directory, would
            be used to set up some configuration. This file is not available under
            PyromaniacGit as it introduces some significant security problems. This can
            be overridden in the configuration, but should not be necessary for most
            uses.
        </p>
        <p>
            Some git configuration options have been made available as separate
            PyromanigGit configuration options which can be specified through the
            <command>*PyromaniacConfig</command> or the '--config' command line switch.
        </p>
        <p>
            This includes the configuration of the credentials store, which keeps
            track of the authentication details used for remote operations. This can
            be set in RISC OS using the system variable <reference type='sysvar' name='Git$Credentials$Store'/>.
        </p>
    </subsubsection>

    <subsubsection title="User identification">
        <p>
            Usually the identification of the user is derived from the system's
            user name and host name, if it is not configured in the configuration
            file or environment variables. PyromaniacGit offers system variables
            which will provide these names, as there is no default on RISC OS
            Pyromaniac for a user name. The variable is set by default to dummy
            values from the RISC OS Pyromaniac configuration.
        </p>
    </subsubsection>

    <subsubsection title="Remote authentication">
        <p>
            Authentication with a remote server is usually by entering user and
            password details with a prompt. This is implemented within RISC OS
            Pyromaniac by a callback to RISC OS to request the user name and
            password details, and will by default be passed to the standard
            <reference type="swi" name="OS_ReadLine" href='?'/> interface.
        </p>
        <p>
            Under the original git system, the credentials management would be
            set in the configuration file. PyromaniacGit offers a single management
            system based on the 'credential store'. The credential store places
            the credentials in a file, which will be used first when authentication
            is needed for a server. The credentials store is managed as a RISC OS
            filename given by <reference type='sysvar' name='Git$Credentials$Store'/>.
        </p>
    </subsubsection>

    <subsubsection title="Editing messages">
        <p>
            When committing code, and for certain operations like 'rebase', it is
            necessary to supply a message or edit text. Under the original git
            system this launches the user's configured editor to perform this
            operation.
        </p>
        <p>
            Under PyromaniacGit, the request to edit text in this way is passed
            to the 'TextEditor' system, as used by the Twin module for its editing.
            By default this is configured to use the host's 'nano' editor (which
            is common on POSIX systems, but might not be present under Windows).
            However, if the TextEditor is configured to use a different editor
            system, the Git system will use this as well. This means that, for
            example, when configued to use the 'wxwidgets' text editor, a
            UI window will be opened to edit the content.
        </p>
    </subsubsection>
</subsection>

<subsection title="Supported operations">
<p>
    The PyromaniacGit implementation does not support all the operations that can be
    performed by the standard git tool. However, most day to day operations are
    supported. This should allow both new and regular users of git to use the system
    as they would expect.
</p>
<p>
    For more details, see <reference type='command' name='Git'/>.
</p>
</subsection>

</section>



<section title="System variables">

<sysvar-definition name="Git$AlternateObjectDirectories"
                   description="List of comma separated object directories to search. ">
<use>

<p>The system variable <sysvar>Git$AlternateObjectDirectories</sysvar> is equivalent to the POSIX
environment variable GIT_ALTERNATE_OBJECT_DIRECTORIES.</p>

<p>List of comma separated object directories to search. <br/>
Format: List of directory names in RISC OS format, separated by commas. </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$AskPass"
                   description="Tool to invoke to request passwords from the user. Not supported under RISC OS Pyromaniac. ">
<use>

<p>The system variable <sysvar>Git$AskPass</sysvar> is equivalent to the POSIX
environment variable GIT_ASKPASS.</p>

<p>Tool to invoke to request passwords from the user. Not supported under RISC OS Pyromaniac. </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Author$Date"
                   description="Timestamp used for the &quot;author&quot; field. ">
<use>

<p>The system variable <sysvar>Git$Author$Date</sysvar> is equivalent to the POSIX
environment variable GIT_AUTHOR_DATE.</p>

<p>Timestamp used for the &quot;author&quot; field. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Author$Email'/>
  <reference type='sysvar' name='Git$Author$Name'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Author$Email"
                   description="Email address for the &quot;author&quot; field. ">
<use>

<p>The system variable <sysvar>Git$Author$Email</sysvar> is equivalent to the POSIX
environment variable GIT_AUTHOR_EMAIL.</p>

<p>Email address for the &quot;author&quot; field. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Author$Date'/>
  <reference type='sysvar' name='Git$Author$Name'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Author$Name"
                   description="Human readable name in the &quot;author&quot; field. ">
<use>

<p>The system variable <sysvar>Git$Author$Name</sysvar> is equivalent to the POSIX
environment variable GIT_AUTHOR_NAME.</p>

<p>Human readable name in the &quot;author&quot; field. <br/>
Format: A string in the current RISC OS alphabet. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Author$Date'/>
  <reference type='sysvar' name='Git$Author$Email'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$CeilingDirectories"
                   description="List of comma separated directories above which we should not search for  .git. ">
<use>

<p>The system variable <sysvar>Git$CeilingDirectories</sysvar> is equivalent to the POSIX
environment variable GIT_CEILING_DIRECTORIES.</p>

<p>List of comma separated directories above which we should not search for  .git. <br/>
Format: List of directory names in RISC OS format, separated by commas. </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Committer$Date"
                   description="Timestamp used for the &quot;committer&quot; field. ">
<use>

<p>The system variable <sysvar>Git$Committer$Date</sysvar> is equivalent to the POSIX
environment variable GIT_COMMITTER_DATE.</p>

<p>Timestamp used for the &quot;committer&quot; field. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Committer$Email'/>
  <reference type='sysvar' name='Git$Committer$Name'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Committer$Email"
                   description="Email address for the &quot;committer&quot; field. ">
<use>

<p>The system variable <sysvar>Git$Committer$Email</sysvar> is equivalent to the POSIX
environment variable GIT_COMMITTER_EMAIL.</p>

<p>Email address for the &quot;committer&quot; field. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Committer$Date'/>
  <reference type='sysvar' name='Git$Committer$Name'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Committer$Name"
                   description="Human readable name in the &quot;committer&quot; field. ">
<use>

<p>The system variable <sysvar>Git$Committer$Name</sysvar> is equivalent to the POSIX
environment variable GIT_COMMITTER_NAME.</p>

<p>Human readable name in the &quot;committer&quot; field. <br/>
Format: A string in the current RISC OS alphabet. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Committer$Date'/>
  <reference type='sysvar' name='Git$Committer$Email'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Common$Dir"
                   description="Absolute directory to search for non-worktree files. ">
<use>

<p>The system variable <sysvar>Git$Common$Dir</sysvar> is equivalent to the POSIX
environment variable GIT_COMMON_DIR.</p>

<p>Absolute directory to search for non-worktree files. <br/>
Format: Directory or filename in RISC OS format (which must exist). </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Config$Count"
                   description="Count of the configuration variables supplied in Git$Config$Key$# and Git$ Config$Value$#. Not supported under RISC OS Pyromaniac. ">
<use>

<p>The system variable <sysvar>Git$Config$Count</sysvar> is equivalent to the POSIX
environment variable GIT_CONFIG_COUNT.</p>

<p>Count of the configuration variables supplied in Git$Config$Key$# and Git$ Config$Value$#. Not supported under RISC OS Pyromaniac. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Config$Global'/>
  <reference type='sysvar' name='Git$Config$NoSystem'/>
  <reference type='sysvar' name='Git$Config$System'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Config$Global"
                   description="User configuration, which on POSIX would be ~/.gitconfig. Not supported under RISC OS Pyromaniac. ">
<use>

<p>The system variable <sysvar>Git$Config$Global</sysvar> is equivalent to the POSIX
environment variable GIT_CONFIG_GLOBAL.</p>

<p>User configuration, which on POSIX would be ~/.gitconfig. Not supported under RISC OS Pyromaniac. <br/>
Format: Directory or filename in RISC OS format. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Config$Count'/>
  <reference type='sysvar' name='Git$Config$NoSystem'/>
  <reference type='sysvar' name='Git$Config$System'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Config$NoSystem"
                   description="Disable the system git configuration if set to non-empty. Not supported under RISC OS Pyromaniac. ">
<use>

<p>The system variable <sysvar>Git$Config$NoSystem</sysvar> is equivalent to the POSIX
environment variable GIT_CONFIG_NOSYSTEM.</p>

<p>Disable the system git configuration if set to non-empty. Not supported under RISC OS Pyromaniac. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Config$Count'/>
  <reference type='sysvar' name='Git$Config$Global'/>
  <reference type='sysvar' name='Git$Config$System'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Config$System"
                   description="System configuration filename, which on POSIX would be /etc/gitconfig. Not supported under RISC OS Pyromaniac. ">
<use>

<p>The system variable <sysvar>Git$Config$System</sysvar> is equivalent to the POSIX
environment variable GIT_CONFIG_SYSTEM.</p>

<p>System configuration filename, which on POSIX would be /etc/gitconfig. Not supported under RISC OS Pyromaniac. <br/>
Format: Directory or filename in RISC OS format. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Config$Count'/>
  <reference type='sysvar' name='Git$Config$Global'/>
  <reference type='sysvar' name='Git$Config$NoSystem'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Diff$External"
                   description="Tool to invoke to perform diffs. Not supported under RISC OS Pyromaniac. ">
<use>

<p>The system variable <sysvar>Git$Diff$External</sysvar> is equivalent to the POSIX
environment variable GIT_EXTERNAL_DIFF.</p>

<p>Tool to invoke to perform diffs. Not supported under RISC OS Pyromaniac. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Diff$Opts'/>
  <reference type='sysvar' name='Git$Diff$PathCounter'/>
  <reference type='sysvar' name='Git$Diff$PathTotal'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Diff$Opts"
                   description="Options for performing diffs. ">
<use>

<p>The system variable <sysvar>Git$Diff$Opts</sysvar> is equivalent to the POSIX
environment variable GIT_DIFF_OPTS.</p>

<p>Options for performing diffs. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Diff$External'/>
  <reference type='sysvar' name='Git$Diff$PathCounter'/>
  <reference type='sysvar' name='Git$Diff$PathTotal'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Diff$PathCounter"
                   description="Counter of the path being processed, supplied to the external diff tool. Not supported under RISC OS Pyromaniac. ">
<use>

<p>The system variable <sysvar>Git$Diff$PathCounter</sysvar> is equivalent to the POSIX
environment variable GIT_DIFF_PATH_COUNTER.</p>

<p>Counter of the path being processed, supplied to the external diff tool. Not supported under RISC OS Pyromaniac. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Diff$External'/>
  <reference type='sysvar' name='Git$Diff$Opts'/>
  <reference type='sysvar' name='Git$Diff$PathTotal'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Diff$PathTotal"
                   description="Total paths being processed, supplied to the external diff tool. Not supported under RISC OS Pyromaniac. ">
<use>

<p>The system variable <sysvar>Git$Diff$PathTotal</sysvar> is equivalent to the POSIX
environment variable GIT_DIFF_PATH_TOTAL.</p>

<p>Total paths being processed, supplied to the external diff tool. Not supported under RISC OS Pyromaniac. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Diff$External'/>
  <reference type='sysvar' name='Git$Diff$Opts'/>
  <reference type='sysvar' name='Git$Diff$PathCounter'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Editor"
                   description="Tool used to edit messages. Not supported under RISC OS Pyromaniac. ">
<use>

<p>The system variable <sysvar>Git$Editor</sysvar> is equivalent to the POSIX
environment variable GIT_EDITOR.</p>

<p>Tool used to edit messages. Not supported under RISC OS Pyromaniac. </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Flush"
                   description="Flush output stream more regularly when set to &quot;1&quot;. ">
<use>

<p>The system variable <sysvar>Git$Flush</sysvar> is equivalent to the POSIX
environment variable GIT_FLUSH.</p>

<p>Flush output stream more regularly when set to &quot;1&quot;. </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$GitDir"
                   description="Location of the .git directory. ">
<use>

<p>The system variable <sysvar>Git$GitDir</sysvar> is equivalent to the POSIX
environment variable GIT_DIR.</p>

<p>Location of the .git directory. <br/>
Format: Directory or filename in RISC OS format. </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Index$File"
                   description="Name of the index file to use, eg &quot;/tmp-index&quot;. ">
<use>

<p>The system variable <sysvar>Git$Index$File</sysvar> is equivalent to the POSIX
environment variable GIT_INDEX_FILE.</p>

<p>Name of the index file to use, eg &quot;/tmp-index&quot;. <br/>
Format: Directory or filename in RISC OS format. </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Merge$Verbosity"
                   description="How verbose the recursive merge should be (0-5). ">
<use>

<p>The system variable <sysvar>Git$Merge$Verbosity</sysvar> is equivalent to the POSIX
environment variable GIT_MERGE_VERBOSITY.</p>

<p>How verbose the recursive merge should be (0-5). </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Namespace"
                   description="Names ref namespace to use. ">
<use>

<p>The system variable <sysvar>Git$Namespace</sysvar> is equivalent to the POSIX
environment variable GIT_NAMESPACE.</p>

<p>Names ref namespace to use. </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$ObjectDirectory"
                   description="Absolute directory for the &quot;objects&quot;. ">
<use>

<p>The system variable <sysvar>Git$ObjectDirectory</sysvar> is equivalent to the POSIX
environment variable GIT_OBJECT_DIRECTORY.</p>

<p>Absolute directory for the &quot;objects&quot;. <br/>
Format: Directory or filename in RISC OS format (which must exist). </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$OptionalLocks"
                   description="Avoids taking locks when run in the background when set to &quot;0&quot;. ">
<use>

<p>The system variable <sysvar>Git$OptionalLocks</sysvar> is equivalent to the POSIX
environment variable GIT_OPTIONAL_LOCKS.</p>

<p>Avoids taking locks when run in the background when set to &quot;0&quot;. </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Pager"
                   description="Tool used to page output to the terminal. Not supported under RISC OS Pyromaniac. ">
<use>

<p>The system variable <sysvar>Git$Pager</sysvar> is equivalent to the POSIX
environment variable GIT_PAGER.</p>

<p>Tool used to page output to the terminal. Not supported under RISC OS Pyromaniac. </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$PathSpecs$Glob"
                   description="Treat all path specs as globs. ">
<use>

<p>The system variable <sysvar>Git$PathSpecs$Glob</sysvar> is equivalent to the POSIX
environment variable GIT_GLOB_PATHSPECS.</p>

<p>Treat all path specs as globs. </p>
</use>

<related>
  <reference type='sysvar' name='Git$PathSpecs$ICase'/>
  <reference type='sysvar' name='Git$PathSpecs$Literal'/>
  <reference type='sysvar' name='Git$PathSpecs$NoGlob'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$PathSpecs$ICase"
                   description="Treat all path specs as case-insensitive. ">
<use>

<p>The system variable <sysvar>Git$PathSpecs$ICase</sysvar> is equivalent to the POSIX
environment variable GIT_ICASE_PATHSPECS.</p>

<p>Treat all path specs as case-insensitive. </p>
</use>

<related>
  <reference type='sysvar' name='Git$PathSpecs$Glob'/>
  <reference type='sysvar' name='Git$PathSpecs$Literal'/>
  <reference type='sysvar' name='Git$PathSpecs$NoGlob'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$PathSpecs$Literal"
                   description="Treat all path specs as literal, rather than globs. ">
<use>

<p>The system variable <sysvar>Git$PathSpecs$Literal</sysvar> is equivalent to the POSIX
environment variable GIT_LITERAL_PATHSPECS.</p>

<p>Treat all path specs as literal, rather than globs. </p>
</use>

<related>
  <reference type='sysvar' name='Git$PathSpecs$Glob'/>
  <reference type='sysvar' name='Git$PathSpecs$ICase'/>
  <reference type='sysvar' name='Git$PathSpecs$NoGlob'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$PathSpecs$NoGlob"
                   description="Treat all path specs as literal. ">
<use>

<p>The system variable <sysvar>Git$PathSpecs$NoGlob</sysvar> is equivalent to the POSIX
environment variable GIT_NOGLOB_PATHSPECS.</p>

<p>Treat all path specs as literal. </p>
</use>

<related>
  <reference type='sysvar' name='Git$PathSpecs$Glob'/>
  <reference type='sysvar' name='Git$PathSpecs$ICase'/>
  <reference type='sysvar' name='Git$PathSpecs$Literal'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$ProgressDelay"
                   description="Seconds before showing the progress indicator. ">
<use>

<p>The system variable <sysvar>Git$ProgressDelay</sysvar> is equivalent to the POSIX
environment variable GIT_PROGRESS_DELAY.</p>

<p>Seconds before showing the progress indicator. </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Protocol"
                   description="Set key-value pairs for the low level protocol. ">
<use>

<p>The system variable <sysvar>Git$Protocol</sysvar> is equivalent to the POSIX
environment variable GIT_PROTOCOL.</p>

<p>Set key-value pairs for the low level protocol. </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Protocol$Allow"
                   description="A colon-separated list of protocols which are allowed. ">
<use>

<p>The system variable <sysvar>Git$Protocol$Allow</sysvar> is equivalent to the POSIX
environment variable GIT_ALLOW_PROTOCOL.</p>

<p>A colon-separated list of protocols which are allowed. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Protocol$FromUser'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Protocol$FromUser"
                   description="Prevent protocols used by fetch/push/clone configured to user state when  set to &quot;0&quot;. ">
<use>

<p>The system variable <sysvar>Git$Protocol$FromUser</sysvar> is equivalent to the POSIX
environment variable GIT_PROTOCOL_FROM_USER.</p>

<p>Prevent protocols used by fetch/push/clone configured to user state when  set to &quot;0&quot;. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Protocol$Allow'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$RefLogAction"
                   description="Records a reason for an action in the reflog. ">
<use>

<p>The system variable <sysvar>Git$RefLogAction</sysvar> is equivalent to the POSIX
environment variable GIT_REFLOG_ACTION.</p>

<p>Records a reason for an action in the reflog. <br/>
Format: A string in the current RISC OS alphabet. </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$RefParanoia"
                   description="Include broken or badly named refs when set to &quot;1&quot;. ">
<use>

<p>The system variable <sysvar>Git$RefParanoia</sysvar> is equivalent to the POSIX
environment variable GIT_REF_PARANOIA.</p>

<p>Include broken or badly named refs when set to &quot;1&quot;. </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$SSH$Command"
                   description="Tool to invoke in place of SSH to connect to an SSH host.. Not supported under RISC OS Pyromaniac. ">
<use>

<p>The system variable <sysvar>Git$SSH$Command</sysvar> is equivalent to the POSIX
environment variable GIT_SSH_COMMAND.</p>

<p>Tool to invoke in place of SSH to connect to an SSH host.. Not supported under RISC OS Pyromaniac. </p>
</use>

<related>
  <reference type='sysvar' name='Git$SSH$Variant'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$SSH$Variant"
                   description="Type of SSH tool supplied in Git$SSH$Command. Not supported under RISC OS Pyromaniac. ">
<use>

<p>The system variable <sysvar>Git$SSH$Variant</sysvar> is equivalent to the POSIX
environment variable GIT_SSH_VARIANT.</p>

<p>Type of SSH tool supplied in Git$SSH$Command. Not supported under RISC OS Pyromaniac. </p>
</use>

<related>
  <reference type='sysvar' name='Git$SSH$Command'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$TerminalPrompt"
                   description="Disables prompt if set to &quot;0&quot;. ">
<use>

<p>The system variable <sysvar>Git$TerminalPrompt</sysvar> is equivalent to the POSIX
environment variable GIT_TERMINAL_PROMPT.</p>

<p>Disables prompt if set to &quot;0&quot;. </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Trace"
                   description="Enable general trace messages (0, 1, 2 for levels, or filename). ">
<use>

<p>The system variable <sysvar>Git$Trace</sysvar> is equivalent to the POSIX
environment variable GIT_TRACE.</p>

<p>Enable general trace messages (0, 1, 2 for levels, or filename). <br/>
Format: The number 0, 1, 2 or a filename in RISC OS format. </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Trace$CURL"
                   description="Enable trace messages for network transfers (0, 1, 2 for levels, or  filename). ">
<use>

<p>The system variable <sysvar>Git$Trace$CURL</sysvar> is equivalent to the POSIX
environment variable GIT_TRACE_CURL.</p>

<p>Enable trace messages for network transfers (0, 1, 2 for levels, or  filename). <br/>
Format: The number 0, 1, 2 or a filename in RISC OS format. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Trace$CURL$NoData'/>
  <reference type='sysvar' name='Git$Trace$CURL$RedactCookies'/>
  <reference type='sysvar' name='Git$Trace$PackAccess'/>
  <reference type='sysvar' name='Git$Trace$PackFile'/>
  <reference type='sysvar' name='Git$Trace$Packet'/>
  <reference type='sysvar' name='Git$Trace$Performance'/>
  <reference type='sysvar' name='Git$Trace$Setup'/>
  <reference type='sysvar' name='Git$Trace$Shallow'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Trace$CURL$NoData"
                   description="Enable trace messages for network transfers without the data dumps (0, 1,  2 for levels, or filename). ">
<use>

<p>The system variable <sysvar>Git$Trace$CURL$NoData</sysvar> is equivalent to the POSIX
environment variable GIT_TRACE_CURL_NO_DATA.</p>

<p>Enable trace messages for network transfers without the data dumps (0, 1,  2 for levels, or filename). <br/>
Format: The number 0, 1, 2 or a filename in RISC OS format. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Trace$CURL'/>
  <reference type='sysvar' name='Git$Trace$CURL$RedactCookies'/>
  <reference type='sysvar' name='Git$Trace$PackAccess'/>
  <reference type='sysvar' name='Git$Trace$PackFile'/>
  <reference type='sysvar' name='Git$Trace$Packet'/>
  <reference type='sysvar' name='Git$Trace$Performance'/>
  <reference type='sysvar' name='Git$Trace$Setup'/>
  <reference type='sysvar' name='Git$Trace$Shallow'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Trace$CURL$RedactCookies"
                   description="Hide the cookies named in this variable when tracing. ">
<use>

<p>The system variable <sysvar>Git$Trace$CURL$RedactCookies</sysvar> is equivalent to the POSIX
environment variable GIT_REDACT_COOKIES.</p>

<p>Hide the cookies named in this variable when tracing. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Trace$CURL'/>
  <reference type='sysvar' name='Git$Trace$CURL$NoData'/>
  <reference type='sysvar' name='Git$Trace$PackAccess'/>
  <reference type='sysvar' name='Git$Trace$PackFile'/>
  <reference type='sysvar' name='Git$Trace$Packet'/>
  <reference type='sysvar' name='Git$Trace$Performance'/>
  <reference type='sysvar' name='Git$Trace$Setup'/>
  <reference type='sysvar' name='Git$Trace$Shallow'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Trace$PackAccess"
                   description="Enable trace messages for access to packs (0, 1, 2 for levels, or filename ). ">
<use>

<p>The system variable <sysvar>Git$Trace$PackAccess</sysvar> is equivalent to the POSIX
environment variable GIT_TRACE_PACK_ACCESS.</p>

<p>Enable trace messages for access to packs (0, 1, 2 for levels, or filename ). <br/>
Format: The number 0, 1, 2 or a filename in RISC OS format. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Trace$CURL'/>
  <reference type='sysvar' name='Git$Trace$CURL$NoData'/>
  <reference type='sysvar' name='Git$Trace$CURL$RedactCookies'/>
  <reference type='sysvar' name='Git$Trace$PackFile'/>
  <reference type='sysvar' name='Git$Trace$Packet'/>
  <reference type='sysvar' name='Git$Trace$Performance'/>
  <reference type='sysvar' name='Git$Trace$Setup'/>
  <reference type='sysvar' name='Git$Trace$Shallow'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Trace$PackFile"
                   description="Enable trace messages for packfiles (0, 1, 2 for levels, or filename). ">
<use>

<p>The system variable <sysvar>Git$Trace$PackFile</sysvar> is equivalent to the POSIX
environment variable GIT_TRACE_PACKFILE.</p>

<p>Enable trace messages for packfiles (0, 1, 2 for levels, or filename). <br/>
Format: The number 0, 1, 2 or a filename in RISC OS format. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Trace$CURL'/>
  <reference type='sysvar' name='Git$Trace$CURL$NoData'/>
  <reference type='sysvar' name='Git$Trace$CURL$RedactCookies'/>
  <reference type='sysvar' name='Git$Trace$PackAccess'/>
  <reference type='sysvar' name='Git$Trace$Packet'/>
  <reference type='sysvar' name='Git$Trace$Performance'/>
  <reference type='sysvar' name='Git$Trace$Setup'/>
  <reference type='sysvar' name='Git$Trace$Shallow'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Trace$Packet"
                   description="Enable trace messages for transfers between programs (0, 1, 2 for levels).  ">
<use>

<p>The system variable <sysvar>Git$Trace$Packet</sysvar> is equivalent to the POSIX
environment variable GIT_TRACE_PACKET.</p>

<p>Enable trace messages for transfers between programs (0, 1, 2 for levels).  <br/>
Format: The number 0, 1, 2 or a filename in RISC OS format. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Trace$CURL'/>
  <reference type='sysvar' name='Git$Trace$CURL$NoData'/>
  <reference type='sysvar' name='Git$Trace$CURL$RedactCookies'/>
  <reference type='sysvar' name='Git$Trace$PackAccess'/>
  <reference type='sysvar' name='Git$Trace$PackFile'/>
  <reference type='sysvar' name='Git$Trace$Performance'/>
  <reference type='sysvar' name='Git$Trace$Setup'/>
  <reference type='sysvar' name='Git$Trace$Shallow'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Trace$Performance"
                   description="Enable performance related trace messages (0, 1, 2 for levels, or filename ). ">
<use>

<p>The system variable <sysvar>Git$Trace$Performance</sysvar> is equivalent to the POSIX
environment variable GIT_TRACE_PERFORMANCE.</p>

<p>Enable performance related trace messages (0, 1, 2 for levels, or filename ). <br/>
Format: The number 0, 1, 2 or a filename in RISC OS format. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Trace$CURL'/>
  <reference type='sysvar' name='Git$Trace$CURL$NoData'/>
  <reference type='sysvar' name='Git$Trace$CURL$RedactCookies'/>
  <reference type='sysvar' name='Git$Trace$PackAccess'/>
  <reference type='sysvar' name='Git$Trace$PackFile'/>
  <reference type='sysvar' name='Git$Trace$Packet'/>
  <reference type='sysvar' name='Git$Trace$Setup'/>
  <reference type='sysvar' name='Git$Trace$Shallow'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Trace$Setup"
                   description="Enable trace messages for the early setup of the system (0, 1, 2 for  levels, or filename). ">
<use>

<p>The system variable <sysvar>Git$Trace$Setup</sysvar> is equivalent to the POSIX
environment variable GIT_TRACE_SETUP.</p>

<p>Enable trace messages for the early setup of the system (0, 1, 2 for  levels, or filename). <br/>
Format: The number 0, 1, 2 or a filename in RISC OS format. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Trace$CURL'/>
  <reference type='sysvar' name='Git$Trace$CURL$NoData'/>
  <reference type='sysvar' name='Git$Trace$CURL$RedactCookies'/>
  <reference type='sysvar' name='Git$Trace$PackAccess'/>
  <reference type='sysvar' name='Git$Trace$PackFile'/>
  <reference type='sysvar' name='Git$Trace$Packet'/>
  <reference type='sysvar' name='Git$Trace$Performance'/>
  <reference type='sysvar' name='Git$Trace$Shallow'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Trace$Shallow"
                   description="Enable trace messages for shallow repositories (0, 1, 2 for levels, or  filename). ">
<use>

<p>The system variable <sysvar>Git$Trace$Shallow</sysvar> is equivalent to the POSIX
environment variable GIT_TRACE_SHALLOW.</p>

<p>Enable trace messages for shallow repositories (0, 1, 2 for levels, or  filename). <br/>
Format: The number 0, 1, 2 or a filename in RISC OS format. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Trace$CURL'/>
  <reference type='sysvar' name='Git$Trace$CURL$NoData'/>
  <reference type='sysvar' name='Git$Trace$CURL$RedactCookies'/>
  <reference type='sysvar' name='Git$Trace$PackAccess'/>
  <reference type='sysvar' name='Git$Trace$PackFile'/>
  <reference type='sysvar' name='Git$Trace$Packet'/>
  <reference type='sysvar' name='Git$Trace$Performance'/>
  <reference type='sysvar' name='Git$Trace$Setup'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Trace2"
                   description="Enable more detailed trace messages (0, 1, 2 for levels, or filename). ">
<use>

<p>The system variable <sysvar>Git$Trace2</sysvar> is equivalent to the POSIX
environment variable GIT_TRACE2.</p>

<p>Enable more detailed trace messages (0, 1, 2 for levels, or filename). <br/>
Format: The number 0, 1, 2 or a filename in RISC OS format. </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Trace2$Event"
                   description="Enable JSON formatted trace messages (0, 1, 2 for levels, or filename). ">
<use>

<p>The system variable <sysvar>Git$Trace2$Event</sysvar> is equivalent to the POSIX
environment variable GIT_TRACE2_EVENT.</p>

<p>Enable JSON formatted trace messages (0, 1, 2 for levels, or filename). <br/>
Format: The number 0, 1, 2 or a filename in RISC OS format. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Trace2$Perf'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Trace2$Perf"
                   description="Enable column based trace messages (0, 1, 2 for levels, or filename). ">
<use>

<p>The system variable <sysvar>Git$Trace2$Perf</sysvar> is equivalent to the POSIX
environment variable GIT_TRACE2_PERF.</p>

<p>Enable column based trace messages (0, 1, 2 for levels, or filename). <br/>
Format: The number 0, 1, 2 or a filename in RISC OS format. </p>
</use>

<related>
  <reference type='sysvar' name='Git$Trace2$Event'/>

</related>
</sysvar-definition>


<sysvar-definition name="Git$WorkTree"
                   description="Location of the root for your work tree. ">
<use>

<p>The system variable <sysvar>Git$WorkTree</sysvar> is equivalent to the POSIX
environment variable GIT_WORK_TREE.</p>

<p>Location of the root for your work tree. <br/>
Format: Directory or filename in RISC OS format (which must exist). </p>
</use>

<related>

</related>
</sysvar-definition>


<sysvar-definition name="Git$Credentials$Store"
                   description="Filename to store credentials in (instead of ~/.git-credentials). ">
<use>

<p>Filename to store credentials in (instead of ~/.git-credentials). </p>
</use>

<related>

</related>
</sysvar-definition>




</section>


<section title="*Commands">

<command-definition name="Git"
                    description="Git source control management">

<syntax>
    <userreplace>command</userreplace>
    <optional>
        <userreplace>subcommand</userreplace>
    </optional>
    <optional>
        <userreplace>switches</userreplace>
    </optional>
    <optional>
        <text>-- </text>
        <userreplace>filenames</userreplace>
    </optional>
</syntax>

<syntax>
    <text>help</text>
    <optional>
        <userreplace>command</userreplace>
    </optional>
</syntax>

<parameter name="help">
 Request help on the command given, or on git in general if no command name given.
</parameter>

<parameter name="command">
 Command to perform (or to obtain help on, in the case of the 'help' command).
</parameter>

<parameter name="subcommand">
 Variant of the command to perform.
</parameter>

<use>
<p>The <command>*Git</command> command is used to perform operations on the Git
source control management system. Under RISC OS Pyromaniac it interfaces indirectly
with the native 'git' tool. Each of the commands has a different syntax, which can
be obtained using the command <command>*Git help <userreplace>command></userreplace></command>.
</p>

<p>
    The commands currently supported by git are:
</p>
<p>
    <definition-table>
        <definition name='add'>Add file contents to the index</definition>
        <definition name='annotate'>Annotate file lines with commit information</definition>
        <definition name='blame'>Show what revision and author last modified each line of a file</definition>
        <definition name='branch'>List, create, or delete branches</definition>
        <definition name='checkout'>Switch branches or restore working tree files</definition>
        <definition name='cherry-pick'>Apply the changes introduced by some existing commits</definition>
        <definition name='clean'>Remove untracked files from the working tree</definition>
        <definition name='clone'>Clone a repository into a new directory</definition>
        <definition name='commit'>Record changes to the repository</definition>
        <definition name='describe'>Give an object a human readable name based on an available ref</definition>
        <definition name='diff'>Show changes between commits, commit and working tree, etc</definition>
        <definition name='fetch'>Fetch from another repository or a local branch</definition>
        <definition name='grep'>Print lines matching a pattern</definition>
        <definition name='help'>Display help for a given command</definition>
        <definition name='init'>Create an empty Git repository or reinitialize an existing one</definition>
        <definition name='log'>Show commit logs</definition>
        <definition name='merge'>Join two or more development histories together</definition>
        <definition name='mv'>Move or rename a file or directory</definition>
        <definition name='pull'>Fetch from and integrate with another repository or a local branch</definition>
        <definition name='push'>Push to a remote repository</definition>
        <definition name='rebase'>Reapply commits on top of another base tip</definition>
        <definition name='reflog'>Manage reflog information</definition>
        <definition name='remote'>
            <p>Manage set of tracked repositories. Supported subcommands:</p>
            <p>
                <list>
                    <item>add - Add a managed remote repository</item>
                    <item>list - List the remotes repositories</item>
                    <item>rename - Rename a managed remote repository</item>
                    <item>remove - Remove a managed remote repository</item>
                    <item>show - Show information on a remote repository</item>
                </list>
            </p>
        </definition>
        <definition name='reset'>Reset current HEAD to the specified state</definition>
        <definition name='restore'>Restore working tree files</definition>
        <definition name='rev-parse'>Pick out and massage parameters</definition>
        <definition name='rm'>Remove files from the working tree and from the index</definition>
        <definition name='shortlog'>Summarize 'git log' output</definition>
        <definition name='show'>Show various types of objects</definition>
        <definition name='stash'>
            <p>Stash the changes in a dirty working directory away. Supported subcommands:</p>
            <p>
                <list>
                    <item>list - List the stash entries</item>
                    <item>push - Save your local modifications to a new stash entry and roll back to HEAD</item>
                    <item>pop - Remove a single stashed state from the stash list and apply it on top of the current working tree state</item>
                    <item>apply - Like pop, but do not remove the state from the stash list</item>
                    <item>save - Save your local modifications to a new stash entry and roll back to HEAD</item>
                    <item>drop - Remove a stash entry from those we have stored</item>
                </list>
            </p>
        </definition>
        <definition name='status'>Show the working tree status</definition>
        <definition name='switch'>Switch branches</definition>
        <definition name='tag'>Create, list, and delete tags on objects</definition>
        <definition name='version'>Report the version of git on the host and RISC OS system</definition>
    </definition-table>
</p>
</use>

<example>
<command>*Git clone https://github.com/gerph/riscos-presenter</command>
</example>


<related>
    <!-- Should I include a link to all the system variables? -->
</related>

</command-definition>

</section>

</chapter>

<!-- MetaData -->
<meta>
 <maintainer>
  <email name="Gerph" address="gerph@gerph.org" />
 </maintainer>
 <disclaimer>
    <p>
        &copy; Gerph, 2022.
    </p>
 </disclaimer>

 <history>
  <revision number="1" author="Gerph" date="24 Dec 2022" title="Initial version">
    <change>Created some basic information on how PyromaniacGit works.</change>
  </revision>
 </history>

</meta>
</riscos-prm>
