plucky (1) git-hub.1.gz

Provided by: git-hub_2.1.3-1_all bug

NAME

       git-hub - Git command line interface to GitHub

SYNOPSIS

       git hub [global options]  <command> [options] [arguments]

DESCRIPTION

       git  hub  is  a simple command line interface to github, enabling most useful GitHub tasks (like creating
       and listing pull request or issues) to be accessed directly through the git command line.

       To use this command you'll probably need to make an  initial  configuration  to  get  authorization  from
       GitHub.  To  do this you can use the setup command.  See the CONFIGURATION section for more configuration
       options.

GLOBAL OPTIONS

       -h, --help
              Show this help and exit.

       --version
              Show program's version number and exit.

       -v, --verbose
              Be more verbose (can be specified multiple times to get extra verbosity)

       -s, --silent
              Be less verbose (can be specified multiple times to get less verbosity)

COMMANDS

       setup  This command performs an initial setup to connect to GitHub. It basically asks for a username  and
              a GitHub Personal Access Token (PAT), which is needed to perform most actions.

              The  token  will  be stored it in the Git configuration variable hub.oauthtoken for future use. If
              you don't have one, you can create it (check GitHub docs if you need more help).  Make  sure  your
              PAT has at least repo and user scope.

              The  username  is  also  stored  for  future  use in the hub.username variable. If the base URL is
              specified, it is stored in hub.baseurl too.

              By default configuration is stored in the repository's .git/config file (using git config). If you
              want  your  configuration  to  be global to your user or system-wide, use the --global or --system
              option respectively. These options are passed straight to git config.

              -u USERNAME, --username=USERNAME
                     GitHub's username (login name), will be stored in the configuration variable  hub.username.
                     If  an  e-mail  is provided, then a username matching that e-mail will be searched and used
                     instead, if found (for this to work the e-mail must be part of the public profile).

              -o TOKEN, --oauthtoken=TOKEN
                     GitHub's Personal Access  Token  (PAT),  will  be  stored  in  the  configuration  variable
                     hub.username.  If  an  e-mail  is  provided,  then  a username matching that e-mail will be
                     searched and used instead, if found (for this to work the e-mail must be part of the public
                     profile).

              -b URL, --baseurl=URL
                     GitHub's  base  URL  to  use to access the API. Set this when your GitHub API is in another
                     location other than the default (Enterprise servers usually use https://host/api/v3).

              --global
                     Store settings in the global configuration  (see  --global  option  in  git  config(1)  for
                     details).

              --system
                     Store  settings  in  the  system  configuration  (see  --system option in git config(1) for
                     details).

       clone REPO [DEST]
              This command is used to clone REPO, a GitHub repository, to a DEST directory (defaults to the name
              of  the  project being cloned). If the repository is specified in <owner>/<project> form, the REPO
              will be used as upstream and a personal fork will be looked up. If none is found, a new fork  will
              be  created.  In  both cases, the fork will be cloned instead of the upstream repository. The REPO
              can be specified as a regular clone URL too (http, ssh,  git),  in  that  case  the  URL  will  be
              inspected and the hub.urltype will be set as appropriate.

              If  only  <project>  is specified as REPO, then the configuration hub.username is used as <owner>,
              and the parent repository is looked up at GitHub to determine the real upstream repository.

              The upstream  repository  is  cloned  as  --upstreamremote  (or  hub.upstreamremote,  upstream  by
              default),  the  remote  for the fork is added as --forkremote (or hub.forkremote, fork by default)
              and the fork is set as the git remote.pushdefault (so pushing  will  hit  the  fork  by  default),
              unless --no-triangular is used (please see the option for more details).

              After  cloning  and fetching, the git configuration variables hub.upstream, hub.upstreamremote and
              hub.forkremote are set in the new cloned repo (see CONFIGURATION).

              -U NAME, --upstreamremote=NAME
                     Use NAME as the upstream remote repository name instead of the default 'upstream').

              -F NAME, --forkremote=NAME
                     Use NAME as the fork remote repository name instead of the default 'fork').

              -t, --triangular
                     Use Git's triangular workflow configuration (this is the default). This option clones  from
                     the  parent/upstream  repository,  and  adds the fork as a remote repository. Then sets the
                     remote.pushdefault Git  option  and  hub.forkremote  git-hub  option  to  the  just  cloned
                     repository.

                     The  effect  of this having the upstream repository used by default when you pull but using
                     your fork when you push, which  is  typically  what  you  want  when  using  GitHub's  pull
                     requests.

                     Git  version 1.8.3 or newer is needed to use this option (and 1.8.4 or newer is recommended
                     due to some issues in 1.8.3 related to this).

                     To change the default you can set the option hub.triangular. See CONFIGURATION for details.

              --no-triangular
                     Don't use Git's triangular workflow configuration (this is  only  available  for  backwards
                     compatibility  but  is  not  recommended).  This  option  clones from the forked repository
                     instead of cloning the upstream/parent repo, so both pulls and pushes will be done with the
                     fork by default.

                     This  option  could  be also used to clone a GitHub repository without forking it, but some
                     functionality of the tool will be lost.

              GIT CLONE OPTIONS
                     Any standard git clone option can be passed. Not all of them might make sense when  cloning
                     a GitHub repo to be used with this tool though.

              This  command  will  run  the hub.hookscript on some events, please have a look at HOOK SCRIPT for
              more details.

       issue  This command is used to manage GitHub issues through a set of subcommands.

              list   Show a list of open issues.

                     -c, --closed
                            Show closed issues instead.

                     -C, --created-by-me
                            Show only issues created by me

                     -A, --assigned-to-me
                            Show only issues assigned to me

              show ISSUE [ISSUE ...]
                     Show issues identified by ISSUE.

              new    Create a new issue.

                     The content of the template files ISSUE_TEMPLATE or ISSUE_TEMPLATE.md will be added to  the
                     issue  message  if  any  of those template files is found in the top-level directory of the
                     project, the .github directory or the .git directory.  The order for template files lookups
                     matters  and  it  follows  the  order  as  described  above  for  template  file  names and
                     directories. And only the content of the first template found will be added.

                     -m MSG, --message=MSG
                            Issue title (and description). The first line is used as the  issue  title  and  any
                            text  after an empty line is used as the optional body.  If this option is not used,
                            the default GIT_EDITOR is opened to write one.

                     -l LABEL, --label=LABEL
                            Attach LABEL to the issue (can be specified multiple times to set multiple labels).

                     -a USER, --assign=USER
                            Assign a user to the issue. USER must be a valid GitHub login name.

                     -M ID, --milestone=ID
                            Assign the milestone identified by the number ID to the issue.

                     --no-template
                            Do not add the template content to the message.

              update ISSUE
                     Similar to new but update an existing issue identified by ISSUE.

                     A convenient shortcut to close an issue is provided by the close subcommand.

                     -m MSG, --message=MSG
                            New issue title (and description). The first line is used as the issue title and any
                            text after an empty line is used as the optional body.

                     -t TITLE, --title=TITLE
                            New issue title.

                     -e, --edit-message
                            Open  the  default  GIT_EDITOR  to  edit  the current title (and description) of the
                            issue.

                     -o, --open
                            Reopen the issue.

                     -c, --close
                            Close the issue.

                     -l LABEL, --label=LABEL
                            If one or more labels are specified, they will replace  the  current  issue  labels.
                            Otherwise  the  labels are unchanged. If one of the labels is empty, the labels will
                            be cleared (so you can use -l'' to clear the labels of an issue.

                     -a USER, --assign=USER
                            Assign a user to the issue. USER must be a valid GitHub login name.

                     -M ID, --milestone=ID
                            Assign the milestone identified by the number ID to the issue.

              comment ISSUE
                     Add a new comment to an existing issue identified by ISSUE.

                     -m MSG, --message=MSG
                            Comment to be added to the issue. If this option is not used, the default GIT_EDITOR
                            is opened to write the comment.

              close ISSUE
                     Alias  for  update --close. (+ comment if --message or --edit-message is specified). Closes
                     issue identified by ISSUE.

                     -m MSG, --message=MSG
                            Add a comment to the issue before closing it.

                     -e, --edit-message
                            Open the default GIT_EDITOR to write a comment to  be  added  to  the  issue  before
                            closing it.

       pull   This  command  is  used  to  manage  GitHub  pull requests. Since pull requests in GitHub are also
              issues, most of the subcommands are repeated from the issue command for convenience. Only the list
              and new commands are really different, and attach and rebase are added.

              list   Show a list of open pull requests.

                     --closed
                            Show closed pull requests instead.

              show PULL [PULL ...]
                     Alias for issue show.

              checkout PULL ...
                     Checkout  the remote branch (head) of the pull request. This command first fetches the head
                     reference from the pull request and then calls the standard git checkout  command  and  any
                     extra  argument  will  be  passed  to git checkout as-is, after the reference that was just
                     fetched.  Remember this creates a detached checkout by default,  use  -b  if  you  want  to
                     create  a new branch based on the pull request. Please take a look at git checkout help for
                     more details.

              new [HEAD]
                     Create a new pull request. If HEAD is specified, it will be used as the branch (or git ref)
                     where  your  changes  are implemented.  Otherwise the current branch is used. If the branch
                     used as head is not pushed to your fork remote, a push will be  automatically  done  before
                     creating the pull request.

                     The repository to issue the pull request from is taken from the hub.forkrepo configuration,
                     which defaults to hub.username/<hub.upstream project part>.

                     The content of the template files PULL_REQUEST_TEMPLATE or PULL_REQUEST_TEMPLATE.md will be
                     added  to the pull request message if any of those template files is found in the top-level
                     directory of the project, the .github directory or  the  .git  directory.   The  order  for
                     template  files  lookups  matters  and it follows the order as described above for template
                     file names and directories. And only the content of the first template found will be added.

                     -m MSG, --message=MSG
                            Pull request title (and description). The first line is used  as  the  pull  request
                            title and any text after an empty line is used as the optional body.  If this option
                            is not used, the default GIT_EDITOR is opened.  If the HEAD  branch  have  a  proper
                            description  (see  git  branch --edit-description), that description will be used as
                            the default message in the editor and if not, the message of the last commit will be
                            used instead.

                     -l LABEL, --label=LABEL
                            Attach  LABEL  to  the pull request (can be specified multiple times to set multiple
                            labels).

                     -a USER, --assign=USER
                            Assign a user to the pull request. USER must be a valid GitHub login name.

                     -M ID, --milestone=ID
                            Assign the milestone identified by the number ID to the pull request.

                     -b BASE, --base=BASE
                            Branch (or git ref) you want your changes  pulled  into.  By  default  the  tracking
                            branch  (branch.<ref>.merge  configuration  variable)  is  used or the configuration
                            hub.pullbase if not tracking a remote branch. If none is present an  error  will  be
                            displayed.

                     -c NAME, --create-branch=NAME
                            Create  a  new  remote  branch  with  (with name NAME) as the real head for the pull
                            request instead of using the HEAD name passed as HEAD. This is useful  to  create  a
                            pull  request  for  a  hot-fix you committed to your regular HEAD without creating a
                            branch first.

                     -f, --force-push
                            Force the push operations. Use with care!

                     -d, --draft
                            Create a draft pull request. Draft pull requests cannot be merged, and  code  owners
                            are not automatically requested to review draft pull requests.

              attach ISSUE [HEAD]
                     Convert  the  issue  identified  by ISSUE to a pull request by attaching commits to it. The
                     branch (or git ref) where your changes are implemented can  be  optionally  specified  with
                     HEAD  (otherwise  the  current  branch is used). This subcommand is very similar to the new
                     subcommand, please refer to it for more details.

                     Please note you can only attach commits  to  issues  if  you  have  commit  access  to  the
                     repository or if you are assigned to the issue.

                     -m MSG, --message=MSG
                            Add a comment to the issue/new pull request.

                     -e, --edit-message
                            Open  the  default  GIT_EDITOR  to write a comment to be added to the issue/new pull
                            request. The default  message  is  taken  from  the  --message  option  if  present,
                            otherwise the branch description or the first commit message is used as with the new
                            subcommand.

                     -b BASE, --base=BASE
                            Same as pull new, please see the details there.

                     -c NAME, --create-branch=NAME
                            Create a new remote branch with (with name NAME) as  the  real  head  for  the  pull
                            request  instead  of  using the HEAD name passed as HEAD. This is useful to create a
                            pull request for a hot-fix you committed to your regular  HEAD  without  creating  a
                            branch first.

                     -f, --force-push
                            Force the push operations. Use with care!

              rebase PULL
                     Close  a pull request identified by PULL by rebasing its base branch (specified in the pull
                     request) instead of merging as GitHub's Merge Button™ would do.

                     If the operation is successful, a comment will be posted informing the new HEAD  commit  of
                     the branch that has been rebased and the pull request will be closed.

                     The  type  of  URL  used  to  fetch  and  push can be specified through the hub.pullurltype
                     configuration variable (see CONFIGURATION for more details). Your working copy should  stay
                     the same ideally, if everything went OK.

                     The operations performed by this subcommand are roughly these:

                     1. git stash

                     2. git fetch pullhead

                     3. git checkout -b tmp FETCH_HEAD

                     4. git pull --rebase pullbase

                     5. git push pullbase

                     6. git checkout oldhead

                     7. git branch -D tmp

                     8. git stash pop

                     If hub.forcerebase is set to "true" (the default), --force will be passed to rebase (not to
                     be confused with this command option --force-push which will force the push), otherwise (if
                     is  "false")  a  regular rebase is performed. When the rebase is forced, all the commits in
                     the pull request are re-committed, so the Committer and CommitterDate metadata  is  updated
                     in  the  commits,  showing  the person that performed the rebase and the time of the rebase
                     instead of the original values, so providing more useful information. As a side effect, the
                     hashes of the commits will change.

                     If  conflicts  are found, the command is interrupted, similarly to how git rebase would do.
                     The user should either --abort the rebasing, --skip the conflicting commit or  resolve  the
                     conflict  and  --continue.  When  using  one  of  these  actions, you have to omit the PULL
                     argument.

                     -m MSG, --message=MSG
                            Use this message for the comment instead of the default. Specify  an  empty  message
                            (-m'') to completely omit the comment.

                     -e, --edit-message
                            Open the default GIT_EDITOR to write the comment.

                     --force-push
                            Force the push operations. Use with care!

                     -p, --pause
                            Pause  the  rebase  just  before  the results are pushed and the issue is merged. To
                            resume the pull request rebasing (push the changes upstream and  close  the  issue),
                            just use the --continue action.  This is particularly useful for testing.

                     -u, --stash-include-untracked
                            Passes the --include-untracked option to stash. If used all untracked files are also
                            stashed and then cleaned up with git clean, leaving the working directory in a  very
                            clean state, which avoid conflicts when checking out the pull request to rebase.

                     -a, --stash-all
                            Passes  the --all option to stash. Is like --stash-include-untracked but the ignored
                            files are stashed and cleaned in addition to the untracked files,  which  completely
                            removes the possibility of conflicts when checking out the pull request to rebase.

                     -D, --delete-branch
                            Delete  the  pull  request  branch  if the rebase was successful. This is similar to
                            press the "Delete Branch" Button (TM) in the web interface after merging.

                     Actions:

                     --continue
                            Continue an ongoing rebase.

                     --abort
                            Abort an ongoing rebase.

                     --skip Skip current patch in an ongoing rebase and continue.

              update PULL
                     Alias for issue update.

              comment PULL
                     Alias for issue comment.

              close PULL
                     Alias for issue close.

HOOK SCRIPT

       If the git configuration hub.hookscript is present, it will be used as a (shell)  script  to  execute  on
       certain  events.  Some  data  is  passed  as environment variables to the script. All events will set the
       HUB_HOOK environment variable with the name of the hook being executed.

       NOTE: This is an experimental feature, so it is only enabled for one event only so far.

       Available hooks (events):

       postclone
              Executed after a clone command was done successfully. The script will  be  run  with  the  freshly
              cloned  repository  directory as the current working directory, so the git configuration just done
              by the clone command is available (for example,  git  config  hub.forkremote  will  get  the  fork
              remote).

              The following extra environment variables are defined:

              HUB_TRIANGULAR
                     will be set to true if the clone was done in triangular mode and to false otherwise.

              HUB_FETCHREMOTE
                     will be set to hub.forkremote if triangular was used and to hub.upstreamremote otherwise.

              This hook is useful to set some extra git configuration that should be enabled only when cloning a
              repository via this tool. For example, to prune the fork remote when it is updated, but only  when
              triangular was used in the clone you can use:

              git  config --global hub.hookscript 'if test "$HUB_HOOK" = postclone && $HUB_TRIANGULAR ; then git
              config remote.fork.prune true; fi'

CONFIGURATION

       This program use the git configuration facilities to get its configuration from. These are the git config
       keys used:

       hub.username
              Your GitHub username. [default: current OS username]

       hub.oauthtoken required
              This  is the authorization token obtained via the setup command. Even when required, you shouldn't
              need to set this variable manually. Use the setup command instead.

              If you don't want to store the token in plain text, you can also specify a command by prefixing  a
              !.  The output of that command will be used as the token. The command will be run with the default
              shell.

              For example: oauthtoken = !password-manager ~/my.db get github-oauth-token.

       hub.upstream required
              Blessed repository used to get the issues from and make the  pull  requests  to.   The  format  is
              <owner>/<project>.  This  option  can  be automatically set by the clone command and is not really
              required by it or the setup command.

       hub.upstreamremote
              Remote name for accessing the upstream repository [default: upstream].

       hub.forkrepo
              Your blessed repository fork. The format is <owner>/<project>. Used to set the head for your  pull
              requests. [default: <username>/(upstream <project> part)]

       hub.forkremote
              Remote  name  for  accessing  your  fork.  Used  to  push branches before creating a pull request.
              [default: fork]

       hub.pullbase
              Default remote branch (or git reference) you want your changes pulled into when  creating  a  pull
              request. [default: master]

       hub.urltype
              Type  of  URL  to  use when an URL from a GitHub API is needed (for example, when 'pull rebase' is
              used). At the time of writing it could be  ssh_url  or  clone_url  for  HTTP).  See  GitHub's  API
              documentation[1] for more details or options. [default: ssh_url]

       hub.baseurl
              GitHub's  base  URL to use to access the API. Set this when your GitHub API is in another location
              other than the  default  (Enterprise  servers  usually  use  https://host/api/v3).  This  will  be
              prepended  to  all  GitHub  API  calls  and  it  has  to  be  a  full URL, not just something like
              "www.example.com/api/v3/".

       hub.forcerebase
              If is set to "true", --force will be passed to rebase. If is set to "false" a  regular  rebase  is
              performed. See the pull rebase command for details. [default: true]

       hub.triangular
              Makes  --triangular  for  clone  if  set  to  "true"  (boolean value). See clone documentation for
              details.

       hub.hookscript
              Script to run on certain events. Please have a look at HOOK SCRIPT for more details.

       [1] https://developer.github.com/v3/pulls/#get-a-single-pull-request

FILES

       This program creates some temporary files in the '.git' directory during its operation. The  contents  of
       these files can be used for debugging/recovery purposes if necessary.

       HUB_EDITMSG
              This  file  is  used  to  take  input  from  the  user,  e.g. issue comments, pull request title &
              description etc. If, after accepting user input, the command given by  the  user  fails  for  some
              reason, then the entered text can still be retrieved from this file.

       HUB_PULL_REBASING
              This  file  is  used to store various metadata information related to a rebase operation (with the
              primary aim of being able to rollback the repository to its original state if the rebase fails  or
              is  interrupted  due  to conflicts).  The sole presence of this file indicates that a rebase is in
              progress.

VIM SYNTAX HIGHLIGHT

       A VIM ftdetect plugin is provided, to enable it you have to follow some steps though. All you need to  do
       is copy (or preferably make a symbolic link) the script to ~/.vim/ftdetect/githubmsg.vim:

          mkdir -p ~/.vim/ftdetect
          ln -s /usr/share/vim/addons/ftdetect/githubmsg.vim ~/.vim/ftdetect/
          # or if you are copying from the sources:
          # ln -s ftdetect.vim ~/.vim/ftdetect/githubmsg.vim

AUTHOR

       Leandro Lucarella <leandro.lucarella@dunnhumby.com>

       2013 dunnhumby Germany GmbH