Change default protocol to HTTPS (#2939)

Explicitly setting `hub.protocol` to `git` or using `HUB_PROTOCOL=git`
still uses the `git` protocol.

Co-authored-by: Mislav Marohnić <mislav@github.com>
This commit is contained in:
Austin Ziegler 2022-03-25 12:46:40 -04:00 коммит произвёл GitHub
Родитель e7576e0eac
Коммит c4af574b19
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
17 изменённых файлов: 144 добавлений и 169 удалений

Просмотреть файл

@ -14,12 +14,12 @@ Usage
``` sh ``` sh
$ hub clone rtomayko/tilt $ hub clone rtomayko/tilt
#=> git clone git://github.com/rtomayko/tilt.git
# if you prefer HTTPS to git/SSH protocols:
$ git config --global hub.protocol https
$ hub clone rtomayko/tilt
#=> git clone https://github.com/rtomayko/tilt.git #=> git clone https://github.com/rtomayko/tilt.git
# or, if you prefer the SSH protocol:
$ git config --global hub.protocol ssh
$ hub clone rtomayko/tilt
#=> git clone git@github.com:rtomayko/tilt.git
``` ```
See [usage examples](https://hub.github.com/#developer) or the [full reference See [usage examples](https://hub.github.com/#developer) or the [full reference

Просмотреть файл

@ -27,14 +27,13 @@ var cmdClone = &Command{
## Protocol used for cloning ## Protocol used for cloning
The ''git:'' protocol will be used for cloning public repositories, while the SSH HTTPS protocol is used by hub as the default. Alternatively, hub can be
protocol will be used for private repositories and those that you have push configured to use SSH protocol for all git operations. See "SSH instead
access to. Alternatively, hub can be configured to use HTTPS protocol for of HTTPS protocol" and "HUB_PROTOCOL" of hub(1).
everything. See "HTTPS instead of git protocol" and "HUB_PROTOCOL" of hub(1).
## Examples: ## Examples:
$ hub clone rtomayko/ronn $ hub clone rtomayko/ronn
> git clone git://github.com/rtomayko/ronn.git > git clone https://github.com/rtomayko/ronn.git
## See also: ## See also:
@ -53,7 +52,7 @@ func clone(command *Command, args *Args) {
} }
func transformCloneArgs(args *Args) { func transformCloneArgs(args *Args) {
isSSH := parseClonePrivateFlag(args) isPrivate := parseClonePrivateFlag(args)
// git help clone | grep -e '^ \+-.\+<' // git help clone | grep -e '^ \+-.\+<'
p := utils.NewArgsParser() p := utils.NewArgsParser()
@ -80,7 +79,7 @@ func transformCloneArgs(args *Args) {
i := p.PositionalIndices[0] i := p.PositionalIndices[0]
a := args.Params[i] a := args.Params[i]
if nameWithOwnerRegexp.MatchString(a) && !isCloneable(a) { if nameWithOwnerRegexp.MatchString(a) && !isCloneable(a) {
url := getCloneURL(a, isSSH, args.Command != "submodule") url := getCloneURL(a, isPrivate, args.Command != "submodule")
args.ReplaceParam(i, url) args.ReplaceParam(i, url)
} }
} }
@ -95,7 +94,7 @@ func parseClonePrivateFlag(args *Args) bool {
return false return false
} }
func getCloneURL(nameWithOwner string, isSSH, allowSSH bool) string { func getCloneURL(nameWithOwner string, allowPush, allowPrivate bool) string {
name := nameWithOwner name := nameWithOwner
owner := "" owner := ""
if strings.Contains(name, "/") { if strings.Contains(name, "/") {
@ -146,11 +145,9 @@ func getCloneURL(nameWithOwner string, isSSH, allowSSH bool) string {
} }
} }
if !isSSH && if !allowPush && allowPrivate {
allowSSH && allowPush = repo.Private || repo.Permissions.Push
!github.IsHTTPSProtocol() {
isSSH = repo.Private || repo.Permissions.Push
} }
return project.GitURL(name, owner, isSSH) return project.GitURL(name, owner, allowPush)
} }

Просмотреть файл

@ -53,9 +53,6 @@ func fork(cmd *Command, args *Args) {
host, err := config.PromptForHost(project.Host) host, err := config.PromptForHost(project.Host)
utils.Check(github.FormatError("forking repository", err)) utils.Check(github.FormatError("forking repository", err))
originRemote, err := localRepo.RemoteForProject(project)
utils.Check(err)
params := map[string]interface{}{} params := map[string]interface{}{}
forkOwner := host.User forkOwner := host.User
if flagForkOrganization := args.Flag.Value("--org"); flagForkOrganization != "" { if flagForkOrganization := args.Flag.Value("--org"); flagForkOrganization != "" {
@ -100,8 +97,7 @@ func fork(cmd *Command, args *Args) {
args.NoForward() args.NoForward()
if !args.Flag.Bool("--no-remote") { if !args.Flag.Bool("--no-remote") {
originURL := project.GitURL("", "", false)
originURL := originRemote.URL.String()
url := forkProject.GitURL("", "", true) url := forkProject.GitURL("", "", true)
// Check to see if the remote already exists. // Check to see if the remote already exists.

Просмотреть файл

@ -322,7 +322,7 @@ Feature: OAuth authentication
""" """
Given $GITHUB_TOKEN is "PTOKEN" Given $GITHUB_TOKEN is "PTOKEN"
When I successfully run `hub clone dotfiles` When I successfully run `hub clone dotfiles`
Then it should clone "git@github.com:parkr/dotfiles.git" Then it should clone "https://github.com/parkr/dotfiles.git"
And the file "../home/.config/hub" should contain "user: mislav" And the file "../home/.config/hub" should contain "user: mislav"
And the file "../home/.config/hub" should contain "oauth_token: OTOKEN" And the file "../home/.config/hub" should contain "oauth_token: OTOKEN"
@ -462,7 +462,7 @@ Feature: OAuth authentication
And the file "../home/.config/hub" should contain "git.my.org" And the file "../home/.config/hub" should contain "git.my.org"
And the file "../home/.config/hub" should contain "user: mislav" And the file "../home/.config/hub" should contain "user: mislav"
And the file "../home/.config/hub" should contain "oauth_token: OTOKEN" And the file "../home/.config/hub" should contain "oauth_token: OTOKEN"
And the url for "mislav" should be "git@git.my.org:mislav/dotfiles.git" And the url for "mislav" should be "https://git.my.org/mislav/dotfiles.git"
Scenario: Broken config is missing user. Scenario: Broken config is missing user.
Given a file named "../home/.config/hub" with: Given a file named "../home/.config/hub" with:

Просмотреть файл

@ -273,6 +273,7 @@ Feature: hub checkout <PULLREQ-URL>
}, :maintainer_can_modify => true }, :maintainer_can_modify => true
} }
""" """
And git protocol is preferred
When I successfully run `hub checkout -f https://github.com/mojombo/jekyll/pull/77 -q` When I successfully run `hub checkout -f https://github.com/mojombo/jekyll/pull/77 -q`
Then "git fetch origin refs/pull/77/head:fixes" should be run Then "git fetch origin refs/pull/77/head:fixes" should be run
And "git checkout -f fixes -q" should be run And "git checkout -f fixes -q" should be run
@ -299,6 +300,7 @@ Feature: hub checkout <PULLREQ-URL>
}, :maintainer_can_modify => true }, :maintainer_can_modify => true
} }
""" """
And git protocol is preferred
And I am on the "fixes" branch And I am on the "fixes" branch
And there is a git FETCH_HEAD And there is a git FETCH_HEAD
When I successfully run `hub checkout https://github.com/mojombo/jekyll/pull/77` When I successfully run `hub checkout https://github.com/mojombo/jekyll/pull/77`
@ -328,7 +330,6 @@ Feature: hub checkout <PULLREQ-URL>
}, :maintainer_can_modify => true }, :maintainer_can_modify => true
} }
""" """
And HTTPS is preferred
When I successfully run `hub checkout -f https://github.com/mojombo/jekyll/pull/77 -q` When I successfully run `hub checkout -f https://github.com/mojombo/jekyll/pull/77 -q`
Then "git fetch origin refs/pull/77/head:fixes" should be run Then "git fetch origin refs/pull/77/head:fixes" should be run
And "git checkout -f fixes -q" should be run And "git checkout -f fixes -q" should be run

Просмотреть файл

@ -45,14 +45,14 @@ Feature: hub cherry-pick
Scenario: Using GitHub owner@SHA notation with remote add Scenario: Using GitHub owner@SHA notation with remote add
When I run `hub cherry-pick mislav@a319d88` When I run `hub cherry-pick mislav@a319d88`
Then "git remote add _hub-cherry-pick git://github.com/mislav/ronn.git" should be run Then "git remote add _hub-cherry-pick https://github.com/mislav/ronn.git" should be run
And "git fetch -q --no-tags _hub-cherry-pick" should be run And "git fetch -q --no-tags _hub-cherry-pick" should be run
And "git remote rm _hub-cherry-pick" should be run And "git remote rm _hub-cherry-pick" should be run
And "git cherry-pick a319d88" should be run And "git cherry-pick a319d88" should be run
Scenario: From fork that doesn't have a remote Scenario: From fork that doesn't have a remote
When I run `hub cherry-pick https://github.com/jingweno/ronn/commit/a319d88` When I run `hub cherry-pick https://github.com/jingweno/ronn/commit/a319d88`
Then "git remote add _hub-cherry-pick git://github.com/jingweno/ronn.git" should be run Then "git remote add _hub-cherry-pick https://github.com/jingweno/ronn.git" should be run
And "git fetch -q --no-tags _hub-cherry-pick" should be run And "git fetch -q --no-tags _hub-cherry-pick" should be run
And "git remote rm _hub-cherry-pick" should be run And "git remote rm _hub-cherry-pick" should be run
And "git cherry-pick a319d88" should be run And "git cherry-pick a319d88" should be run

Просмотреть файл

@ -12,7 +12,7 @@ Feature: hub clone
} }
""" """
When I successfully run `hub clone rtomayko/ronn` When I successfully run `hub clone rtomayko/ronn`
Then it should clone "git://github.com/rtomayko/ronn.git" Then it should clone "https://github.com/rtomayko/ronn.git"
And the output should not contain anything And the output should not contain anything
Scenario: Clone a public repo with period in name Scenario: Clone a public repo with period in name
@ -25,7 +25,7 @@ Feature: hub clone
} }
""" """
When I successfully run `hub clone hookio/hook.js` When I successfully run `hub clone hookio/hook.js`
Then it should clone "git://github.com/hookio/hook.js.git" Then it should clone "https://github.com/hookio/hook.js.git"
And the output should not contain anything And the output should not contain anything
Scenario: Clone a public repo that starts with a period Scenario: Clone a public repo that starts with a period
@ -38,7 +38,7 @@ Feature: hub clone
} }
""" """
When I successfully run `hub clone zhuangya/.vim` When I successfully run `hub clone zhuangya/.vim`
Then it should clone "git://github.com/zhuangya/.vim.git" Then it should clone "https://github.com/zhuangya/.vim.git"
And the output should not contain anything And the output should not contain anything
Scenario: Clone a repo even if same-named directory exists Scenario: Clone a repo even if same-named directory exists
@ -52,11 +52,24 @@ Feature: hub clone
""" """
And a directory named "rtomayko/ronn" And a directory named "rtomayko/ronn"
When I successfully run `hub clone rtomayko/ronn` When I successfully run `hub clone rtomayko/ronn`
Then it should clone "https://github.com/rtomayko/ronn.git"
And the output should not contain anything
Scenario: Clone a public repo with git
Given git protocol is preferred
Given the GitHub API server:
"""
get('/repos/rtomayko/ronn') {
json :private => false,
:name => 'ronn', :owner => { :login => 'rtomayko' },
:permissions => { :push => false }
}
"""
When I successfully run `hub clone rtomayko/ronn`
Then it should clone "git://github.com/rtomayko/ronn.git" Then it should clone "git://github.com/rtomayko/ronn.git"
And the output should not contain anything And the output should not contain anything
Scenario: Clone a public repo with HTTPS Scenario: Clone a public repo with HTTPS
Given HTTPS is preferred
Given the GitHub API server: Given the GitHub API server:
""" """
get('/repos/rtomayko/ronn') { get('/repos/rtomayko/ronn') {
@ -80,7 +93,7 @@ Feature: hub clone
""" """
When I successfully run `git config --global alias.c "clone --bare"` When I successfully run `git config --global alias.c "clone --bare"`
And I successfully run `hub c rtomayko/ronn` And I successfully run `hub c rtomayko/ronn`
Then "git clone --bare git://github.com/rtomayko/ronn.git" should be run Then "git clone --bare https://github.com/rtomayko/ronn.git" should be run
And the output should not contain anything And the output should not contain anything
Scenario: Unchanged public clone Scenario: Unchanged public clone
@ -133,8 +146,8 @@ Feature: hub clone
:permissions => { :push => false } :permissions => { :push => false }
} }
""" """
When I successfully run `hub --noop clone -p rtomayko/ronn` When I successfully run `hub --noop clone rtomayko/ronn`
Then the output should contain exactly "git clone git@github.com:rtomayko/ronn.git\n" Then the output should contain exactly "git clone https://github.com/rtomayko/ronn.git\n"
But it should not clone anything But it should not clone anything
Scenario: Clone a private repo Scenario: Clone a private repo
@ -147,7 +160,7 @@ Feature: hub clone
} }
""" """
When I successfully run `hub clone -p rtomayko/ronn` When I successfully run `hub clone -p rtomayko/ronn`
Then it should clone "git@github.com:rtomayko/ronn.git" Then it should clone "https://github.com/rtomayko/ronn.git"
And the output should not contain anything And the output should not contain anything
Scenario: Clone my repo Scenario: Clone my repo
@ -160,7 +173,7 @@ Feature: hub clone
} }
""" """
When I successfully run `hub clone dotfiles` When I successfully run `hub clone dotfiles`
Then it should clone "git@github.com:mislav/dotfiles.git" Then it should clone "https://github.com/mislav/dotfiles.git"
And the output should not contain anything And the output should not contain anything
Scenario: Clone my repo that doesn't exist Scenario: Clone my repo that doesn't exist
@ -184,7 +197,7 @@ Feature: hub clone
} }
""" """
When I successfully run `hub clone --bare -o master dotfiles` When I successfully run `hub clone --bare -o master dotfiles`
Then "git clone --bare -o master git@github.com:mislav/dotfiles.git" should be run Then "git clone --bare -o master https://github.com/mislav/dotfiles.git" should be run
And the output should not contain anything And the output should not contain anything
Scenario: Clone repo to which I have push access to Scenario: Clone repo to which I have push access to
@ -196,6 +209,7 @@ Feature: hub clone
:permissions => { :push => true } :permissions => { :push => true }
} }
""" """
And git protocol is preferred
When I successfully run `hub clone sstephenson/rbenv` When I successfully run `hub clone sstephenson/rbenv`
Then "git clone git@github.com:sstephenson/rbenv.git" should be run Then "git clone git@github.com:sstephenson/rbenv.git" should be run
And the output should not contain anything And the output should not contain anything
@ -209,6 +223,7 @@ Feature: hub clone
:permissions => { :push => true } :permissions => { :push => true }
} }
""" """
And git protocol is preferred
When I successfully run `hub --noop clone sstephenson/rbenv` When I successfully run `hub --noop clone sstephenson/rbenv`
Then the output should contain exactly "git clone git@github.com:sstephenson/rbenv.git\n" Then the output should contain exactly "git clone git@github.com:sstephenson/rbenv.git\n"
But it should not clone anything But it should not clone anything
@ -225,7 +240,7 @@ Feature: hub clone
} }
""" """
When I successfully run `hub clone myorg/myrepo` When I successfully run `hub clone myorg/myrepo`
Then it should clone "git@git.my.org:myorg/myrepo.git" Then it should clone "https://git.my.org/myorg/myrepo.git"
And the output should not contain anything And the output should not contain anything
Scenario: Clone from existing directory is a local clone Scenario: Clone from existing directory is a local clone
@ -251,7 +266,7 @@ Feature: hub clone
} }
""" """
When I successfully run `hub clone rtomayko/ronn.wiki` When I successfully run `hub clone rtomayko/ronn.wiki`
Then it should clone "git://github.com/RTomayko/ronin.wiki.git" Then it should clone "https://github.com/RTomayko/ronin.wiki.git"
And the output should not contain anything And the output should not contain anything
Scenario: Clone a nonexisting wiki Scenario: Clone a nonexisting wiki
@ -284,5 +299,5 @@ Feature: hub clone
} }
""" """
When I successfully run `hub clone rtomayko/ronn` When I successfully run `hub clone rtomayko/ronn`
Then it should clone "git://github.com/RTomayko/ronin.git" Then it should clone "https://github.com/RTomayko/ronin.git"
And the output should not contain anything And the output should not contain anything

Просмотреть файл

@ -13,7 +13,7 @@ Feature: hub create
} }
""" """
When I successfully run `hub create` When I successfully run `hub create`
Then the url for "origin" should be "git@github.com:mislav/dotfiles.git" Then the url for "origin" should be "https://github.com/mislav/dotfiles.git"
And the output should contain exactly "https://github.com/mislav/dotfiles\n" And the output should contain exactly "https://github.com/mislav/dotfiles\n"
Scenario: Create private repo Scenario: Create private repo
@ -25,6 +25,7 @@ Feature: hub create
json :full_name => 'mislav/dotfiles' json :full_name => 'mislav/dotfiles'
} }
""" """
And git protocol is preferred
When I successfully run `hub create -p` When I successfully run `hub create -p`
Then the url for "origin" should be "git@github.com:mislav/dotfiles.git" Then the url for "origin" should be "git@github.com:mislav/dotfiles.git"
@ -37,21 +38,9 @@ Feature: hub create
} }
""" """
When I successfully run `hub create --remote-name=work` When I successfully run `hub create --remote-name=work`
Then the url for "work" should be "git@github.com:mislav/dotfiles.git" Then the url for "work" should be "https://github.com/mislav/dotfiles.git"
And there should be no "origin" remote And there should be no "origin" remote
Scenario: HTTPS is preferred
Given the GitHub API server:
"""
post('/user/repos') {
status 201
json :full_name => 'mislav/dotfiles'
}
"""
And HTTPS is preferred
When I successfully run `hub create`
Then the url for "origin" should be "https://github.com/mislav/dotfiles.git"
Scenario: Create in organization Scenario: Create in organization
Given the GitHub API server: Given the GitHub API server:
""" """
@ -61,7 +50,7 @@ Feature: hub create
} }
""" """
When I successfully run `hub create acme/dotfiles` When I successfully run `hub create acme/dotfiles`
Then the url for "origin" should be "git@github.com:acme/dotfiles.git" Then the url for "origin" should be "https://github.com/acme/dotfiles.git"
And the output should contain exactly "https://github.com/acme/dotfiles\n" And the output should contain exactly "https://github.com/acme/dotfiles\n"
Scenario: Creating repo failed Scenario: Creating repo failed
@ -84,7 +73,7 @@ Feature: hub create
} }
""" """
When I successfully run `hub create myconfig` When I successfully run `hub create myconfig`
Then the url for "origin" should be "git@github.com:mislav/myconfig.git" Then the url for "origin" should be "https://github.com/mislav/myconfig.git"
Scenario: With description and homepage Scenario: With description and homepage
Given the GitHub API server: Given the GitHub API server:
@ -97,7 +86,7 @@ Feature: hub create
} }
""" """
When I successfully run `hub create -d mydesc -h http://example.com` When I successfully run `hub create -d mydesc -h http://example.com`
Then the url for "origin" should be "git@github.com:mislav/dotfiles.git" Then the url for "origin" should be "https://github.com/mislav/dotfiles.git"
Scenario: Not in git repo Scenario: Not in git repo
Given the current dir is not a repo Given the current dir is not a repo
@ -152,7 +141,7 @@ Feature: hub create
""" """
And the "github" remote has url "git://github.com/mislav/dotfiles.git" And the "github" remote has url "git://github.com/mislav/dotfiles.git"
When I successfully run `hub create` When I successfully run `hub create`
Then the url for "origin" should be "git@github.com:mislav/dotfiles.git" Then the url for "origin" should be "https://github.com/mislav/dotfiles.git"
Scenario: GitHub repo already exists Scenario: GitHub repo already exists
Given the GitHub API server: Given the GitHub API server:
@ -163,7 +152,7 @@ Feature: hub create
""" """
When I successfully run `hub create` When I successfully run `hub create`
Then the output should contain "Existing repository detected\n" Then the output should contain "Existing repository detected\n"
And the url for "origin" should be "git@github.com:mislav/dotfiles.git" And the url for "origin" should be "https://github.com/mislav/dotfiles.git"
Scenario: GitHub repo already exists and is not private Scenario: GitHub repo already exists and is not private
Given the GitHub API server: Given the GitHub API server:
@ -186,6 +175,7 @@ Feature: hub create
:private => true :private => true
} }
""" """
And git protocol is preferred
When I successfully run `hub create -p` When I successfully run `hub create -p`
Then the url for "origin" should be "git@github.com:mislav/dotfiles.git" Then the url for "origin" should be "git@github.com:mislav/dotfiles.git"
@ -200,7 +190,7 @@ Feature: hub create
} }
""" """
When I successfully run `hub create` When I successfully run `hub create`
And the url for "origin" should be "git@github.com:mislav/DOTfiles.git" And the url for "origin" should be "https://github.com/mislav/DOTfiles.git"
Scenario: Renamed GitHub repo is unrelated Scenario: Renamed GitHub repo is unrelated
Given the GitHub API server: Given the GitHub API server:
@ -217,7 +207,7 @@ Feature: hub create
} }
""" """
When I successfully run `hub create` When I successfully run `hub create`
And the url for "origin" should be "git@github.com:mislav/mydotfiles.git" And the url for "origin" should be "https://github.com/mislav/mydotfiles.git"
Scenario: API response changes the clone URL Scenario: API response changes the clone URL
Given the GitHub API server: Given the GitHub API server:
@ -228,7 +218,7 @@ Feature: hub create
} }
""" """
When I successfully run `hub create` When I successfully run `hub create`
Then the url for "origin" should be "git@github.com:Mooslav/myconfig.git" Then the url for "origin" should be "https://github.com/Mooslav/myconfig.git"
And the output should contain exactly "https://github.com/Mooslav/myconfig\n" And the output should contain exactly "https://github.com/Mooslav/myconfig\n"
Scenario: Open new repository in web browser Scenario: Open new repository in web browser
@ -254,7 +244,7 @@ Feature: hub create
} }
""" """
When I successfully run `hub create` When I successfully run `hub create`
Then the url for "origin" should be "git@github.com:mislav/my-dot-files.git" Then the url for "origin" should be "https://github.com/mislav/my-dot-files.git"
Scenario: Verbose API output Scenario: Verbose API output
Given the GitHub API server: Given the GitHub API server:
@ -299,7 +289,7 @@ Feature: hub create
""" """
And $GITHUB_HOST is "git.my.org" And $GITHUB_HOST is "git.my.org"
When I successfully run `hub create` When I successfully run `hub create`
Then the url for "origin" should be "git@git.my.org:nsartor/dotfiles.git" Then the url for "origin" should be "https://git.my.org/nsartor/dotfiles.git"
And the output should contain exactly "https://git.my.org/nsartor/dotfiles\n" And the output should contain exactly "https://git.my.org/nsartor/dotfiles\n"
Scenario: Invalid GITHUB_HOST Scenario: Invalid GITHUB_HOST

Просмотреть файл

@ -36,6 +36,20 @@ Feature: hub fetch
And there should be no "mislav" remote And there should be no "mislav" remote
Scenario: Creates new remote Scenario: Creates new remote
Given the GitHub API server:
"""
get('/repos/mislav/dotfiles') {
json :private => false,
:permissions => { :push => false }
}
"""
When I successfully run `hub fetch mislav`
Then "git fetch mislav" should be run
And the url for "mislav" should be "https://github.com/mislav/dotfiles.git"
And the output should not contain anything
Scenario: Creates new remote with git
Given git protocol is preferred
Given the GitHub API server: Given the GitHub API server:
""" """
get('/repos/mislav/dotfiles') { get('/repos/mislav/dotfiles') {
@ -58,22 +72,9 @@ Feature: hub fetch
""" """
When I successfully run `hub fetch ankit-maverick` When I successfully run `hub fetch ankit-maverick`
Then "git fetch ankit-maverick" should be run Then "git fetch ankit-maverick" should be run
And the url for "ankit-maverick" should be "git://github.com/ankit-maverick/dotfiles.git" And the url for "ankit-maverick" should be "https://github.com/ankit-maverick/dotfiles.git"
And the output should not contain anything And the output should not contain anything
Scenario: HTTPS is preferred
Given the GitHub API server:
"""
get('/repos/mislav/dotfiles') {
json :private => false,
:permissions => { :push => false }
}
"""
And HTTPS is preferred
When I successfully run `hub fetch mislav`
Then "git fetch mislav" should be run
And the url for "mislav" should be "https://github.com/mislav/dotfiles.git"
Scenario: Private repo Scenario: Private repo
Given the GitHub API server: Given the GitHub API server:
""" """
@ -82,6 +83,7 @@ Feature: hub fetch
:permissions => { :push => false } :permissions => { :push => false }
} }
""" """
And git protocol is preferred
When I successfully run `hub fetch mislav` When I successfully run `hub fetch mislav`
Then "git fetch mislav" should be run Then "git fetch mislav" should be run
And the url for "mislav" should be "git@github.com:mislav/dotfiles.git" And the url for "mislav" should be "git@github.com:mislav/dotfiles.git"
@ -95,6 +97,7 @@ Feature: hub fetch
:permissions => { :push => true } :permissions => { :push => true }
} }
""" """
And git protocol is preferred
When I successfully run `hub fetch mislav` When I successfully run `hub fetch mislav`
Then "git fetch mislav" should be run Then "git fetch mislav" should be run
And the url for "mislav" should be "git@github.com:mislav/dotfiles.git" And the url for "mislav" should be "git@github.com:mislav/dotfiles.git"
@ -121,8 +124,8 @@ Feature: hub fetch
""" """
When I successfully run `hub fetch --multiple mislav rtomayko` When I successfully run `hub fetch --multiple mislav rtomayko`
Then "git fetch --multiple mislav rtomayko" should be run Then "git fetch --multiple mislav rtomayko" should be run
And the url for "mislav" should be "git://github.com/mislav/dotfiles.git" And the url for "mislav" should be "https://github.com/mislav/dotfiles.git"
And the url for "rtomayko" should be "git://github.com/rtomayko/dotfiles.git" And the url for "rtomayko" should be "https://github.com/rtomayko/dotfiles.git"
Scenario: Fetch multiple with filtering Scenario: Fetch multiple with filtering
Given the GitHub API server: Given the GitHub API server:
@ -133,9 +136,9 @@ Feature: hub fetch
} }
""" """
When I successfully run `git config remotes.mygrp "foo bar"` When I successfully run `git config remotes.mygrp "foo bar"`
When I successfully run `hub fetch --multiple origin mislav mygrp git://example.com typo` When I successfully run `hub fetch --multiple origin mislav mygrp https://example.com typo`
Then "git fetch --multiple origin mislav mygrp git://example.com typo" should be run Then "git fetch --multiple origin mislav mygrp https://example.com typo" should be run
And the url for "mislav" should be "git://github.com/mislav/dotfiles.git" And the url for "mislav" should be "https://github.com/mislav/dotfiles.git"
But there should be no "mygrp" remote But there should be no "mygrp" remote
And there should be no "typo" remote And there should be no "typo" remote
@ -149,9 +152,9 @@ Feature: hub fetch
""" """
When I successfully run `hub fetch mislav,rtomayko,dustinleblanc` When I successfully run `hub fetch mislav,rtomayko,dustinleblanc`
Then "git fetch --multiple mislav rtomayko dustinleblanc" should be run Then "git fetch --multiple mislav rtomayko dustinleblanc" should be run
And the url for "mislav" should be "git://github.com/mislav/dotfiles.git" And the url for "mislav" should be "https://github.com/mislav/dotfiles.git"
And the url for "rtomayko" should be "git://github.com/rtomayko/dotfiles.git" And the url for "rtomayko" should be "https://github.com/rtomayko/dotfiles.git"
And the url for "dustinleblanc" should be "git://github.com/dustinleblanc/dotfiles.git" And the url for "dustinleblanc" should be "https://github.com/dustinleblanc/dotfiles.git"
Scenario: Doesn't create a new remote if repo doesn't exist on GitHub Scenario: Doesn't create a new remote if repo doesn't exist on GitHub
Given the GitHub API server: Given the GitHub API server:

Просмотреть файл

@ -20,11 +20,12 @@ Feature: hub fork
""" """
When I successfully run `hub fork` When I successfully run `hub fork`
Then the output should contain exactly "new remote: mislav\n" Then the output should contain exactly "new remote: mislav\n"
And "git remote add -f mislav git://github.com/evilchelu/dotfiles.git" should be run And "git remote add -f mislav https://github.com/evilchelu/dotfiles.git" should be run
And "git remote set-url mislav git@github.com:mislav/dotfiles.git" should be run And "git remote set-url mislav https://github.com/mislav/dotfiles.git" should be run
And the url for "mislav" should be "git@github.com:mislav/dotfiles.git" And the url for "mislav" should be "https://github.com/mislav/dotfiles.git"
Scenario: Fork the repository with new remote name specified Scenario: Fork the repository with new remote name specified
Given git protocol is preferred
Given the GitHub API server: Given the GitHub API server:
""" """
get('/repos/mislav/dotfiles') { 404 } get('/repos/mislav/dotfiles') { 404 }
@ -46,6 +47,7 @@ Feature: hub fork
And the url for "upstream" should be "git://github.com/evilchelu/dotfiles.git" And the url for "upstream" should be "git://github.com/evilchelu/dotfiles.git"
Scenario: Fork the repository with redirect Scenario: Fork the repository with redirect
Given git protocol is preferred
Given the GitHub API server: Given the GitHub API server:
""" """
before { before {
@ -69,6 +71,7 @@ Feature: hub fork
Scenario: Fork the repository when origin URL is private Scenario: Fork the repository when origin URL is private
Given the "origin" remote has url "git@github.com:evilchelu/dotfiles.git" Given the "origin" remote has url "git@github.com:evilchelu/dotfiles.git"
And git protocol is preferred
Given the GitHub API server: Given the GitHub API server:
""" """
before { halt 401 unless request.env['HTTP_AUTHORIZATION'] == 'token OTOKEN' } before { halt 401 unless request.env['HTTP_AUTHORIZATION'] == 'token OTOKEN' }
@ -80,7 +83,7 @@ Feature: hub fork
""" """
When I successfully run `hub fork` When I successfully run `hub fork`
Then the output should contain exactly "new remote: mislav\n" Then the output should contain exactly "new remote: mislav\n"
And "git remote add -f mislav ssh://git@github.com/evilchelu/dotfiles.git" should be run And "git remote add -f mislav git://github.com/evilchelu/dotfiles.git" should be run
And "git remote set-url mislav git@github.com:mislav/dotfiles.git" should be run And "git remote set-url mislav git@github.com:mislav/dotfiles.git" should be run
And the url for "mislav" should be "git@github.com:mislav/dotfiles.git" And the url for "mislav" should be "git@github.com:mislav/dotfiles.git"
@ -140,7 +143,7 @@ Feature: hub fork
""" """
new remote: mislav\n new remote: mislav\n
""" """
And the url for "mislav" should be "git@github.com:mislav/dotfiles.git" And the url for "mislav" should be "https://github.com/mislav/dotfiles.git"
Scenario: Redirected repo already exists Scenario: Redirected repo already exists
Given the GitHub API server: Given the GitHub API server:
@ -225,19 +228,6 @@ Feature: hub fork
Error creating fork: Unauthorized (HTTP 401)\n Error creating fork: Unauthorized (HTTP 401)\n
""" """
Scenario: HTTPS is preferred
Given the GitHub API server:
"""
post('/repos/evilchelu/dotfiles/forks') {
status 202
json :name => 'dotfiles', :owner => { :login => 'mislav' }
}
"""
And HTTPS is preferred
When I successfully run `hub fork`
Then the output should contain exactly "new remote: mislav\n"
And the url for "mislav" should be "https://github.com/mislav/dotfiles.git"
Scenario: Not in repo Scenario: Not in repo
Given the current dir is not a repo Given the current dir is not a repo
When I run `hub fork` When I run `hub fork`
@ -279,7 +269,7 @@ Feature: hub fork
And I am "mislav" on git.my.org with OAuth token "FITOKEN" And I am "mislav" on git.my.org with OAuth token "FITOKEN"
And "git.my.org" is a whitelisted Enterprise host And "git.my.org" is a whitelisted Enterprise host
When I successfully run `hub fork` When I successfully run `hub fork`
Then the url for "mislav" should be "git@git.my.org:mislav/dotfiles.git" Then the url for "mislav" should be "https://git.my.org/mislav/dotfiles.git"
Scenario: Enterprise fork using regular HTTP Scenario: Enterprise fork using regular HTTP
Given the GitHub API server: Given the GitHub API server:
@ -298,7 +288,7 @@ Feature: hub fork
And I am "mislav" on http://git.my.org with OAuth token "FITOKEN" And I am "mislav" on http://git.my.org with OAuth token "FITOKEN"
And "git.my.org" is a whitelisted Enterprise host And "git.my.org" is a whitelisted Enterprise host
When I successfully run `hub fork` When I successfully run `hub fork`
Then the url for "mislav" should be "git@git.my.org:mislav/dotfiles.git" Then the url for "mislav" should be "https://git.my.org/mislav/dotfiles.git"
Scenario: Fork a repo to a specific organization Scenario: Fork a repo to a specific organization
Given the GitHub API server: Given the GitHub API server:
@ -312,4 +302,4 @@ Feature: hub fork
""" """
When I successfully run `hub fork --org=acme` When I successfully run `hub fork --org=acme`
Then the output should contain exactly "new remote: acme\n" Then the output should contain exactly "new remote: acme\n"
Then the url for "acme" should be "git@github.com:acme/dotfiles.git" Then the url for "acme" should be "https://github.com/acme/dotfiles.git"

Просмотреть файл

@ -6,16 +6,16 @@ Feature: hub init
Scenario: Initializes a git repo with remote Scenario: Initializes a git repo with remote
When I successfully run `hub init -g` When I successfully run `hub init -g`
Then the url for "origin" should be "git@github.com:mislav/dotfiles.git" Then the url for "origin" should be "https://github.com/mislav/dotfiles.git"
Scenario: Initializes a git repo in a new directory with remote Scenario: Initializes a git repo in a new directory with remote
When I successfully run `hub init -g new_dir` When I successfully run `hub init -g new_dir`
And I cd to "new_dir" And I cd to "new_dir"
Then the url for "origin" should be "git@github.com:mislav/new_dir.git" Then the url for "origin" should be "https://github.com/mislav/new_dir.git"
Scenario: Enterprise host Scenario: Enterprise host
Given $GITHUB_HOST is "git.my.org" Given $GITHUB_HOST is "git.my.org"
And I am "mislav" on git.my.org with OAuth token "FITOKEN" And I am "mislav" on git.my.org with OAuth token "FITOKEN"
And "git.my.org" is a whitelisted Enterprise host And "git.my.org" is a whitelisted Enterprise host
When I successfully run `hub init -g` When I successfully run `hub init -g`
Then the url for "origin" should be "git@git.my.org:mislav/dotfiles.git" Then the url for "origin" should be "https://git.my.org/mislav/dotfiles.git"

Просмотреть файл

@ -6,7 +6,7 @@ Feature: hub remote add
Scenario: Add origin remote for my own repo Scenario: Add origin remote for my own repo
Given there are no remotes Given there are no remotes
When I successfully run `hub remote add origin` When I successfully run `hub remote add origin`
Then the url for "origin" should be "git@github.com:EvilChelu/dotfiles.git" Then the url for "origin" should be "https://github.com/EvilChelu/dotfiles.git"
And the output should not contain anything And the output should not contain anything
Scenario: Add origin remote for my own repo using -C Scenario: Add origin remote for my own repo using -C
@ -14,7 +14,7 @@ Feature: hub remote add
And I cd to ".." And I cd to ".."
When I successfully run `hub -C dotfiles remote add origin` When I successfully run `hub -C dotfiles remote add origin`
And I cd to "dotfiles" And I cd to "dotfiles"
Then the url for "origin" should be "git@github.com:EvilChelu/dotfiles.git" Then the url for "origin" should be "https://github.com/EvilChelu/dotfiles.git"
And the output should not contain anything And the output should not contain anything
Scenario: Unchanged public remote add Scenario: Unchanged public remote add
@ -44,6 +44,7 @@ Feature: hub remote add
Scenario: Add new remote for Enterprise repo Scenario: Add new remote for Enterprise repo
Given "git.my.org" is a whitelisted Enterprise host Given "git.my.org" is a whitelisted Enterprise host
And git protocol is preferred
And I am "ProLoser" on git.my.org with OAuth token "FITOKEN" And I am "ProLoser" on git.my.org with OAuth token "FITOKEN"
And the "origin" remote has url "git@git.my.org:mislav/topsekrit.git" And the "origin" remote has url "git@git.my.org:mislav/topsekrit.git"
When I successfully run `hub remote add another` When I successfully run `hub remote add another`
@ -60,7 +61,7 @@ Feature: hub remote add
} }
""" """
When I successfully run `hub remote add mislav` When I successfully run `hub remote add mislav`
Then the url for "mislav" should be "git://github.com/mislav/dotfiles.git" Then the url for "mislav" should be "https://github.com/mislav/dotfiles.git"
And the output should not contain anything And the output should not contain anything
Scenario: Add detected private remote Scenario: Add detected private remote
@ -72,6 +73,7 @@ Feature: hub remote add
:permissions => { :push => false } :permissions => { :push => false }
} }
""" """
And git protocol is preferred
When I successfully run `hub remote add mislav` When I successfully run `hub remote add mislav`
Then the url for "mislav" should be "git@github.com:mislav/dotfiles.git" Then the url for "mislav" should be "git@github.com:mislav/dotfiles.git"
And the output should not contain anything And the output should not contain anything
@ -86,7 +88,7 @@ Feature: hub remote add
} }
""" """
When I successfully run `hub remote add mislav` When I successfully run `hub remote add mislav`
Then the url for "mislav" should be "git@github.com:mislav/dotfiles.git" Then the url for "mislav" should be "https://github.com/mislav/dotfiles.git"
And the output should not contain anything And the output should not contain anything
Scenario: Add remote for missing repo Scenario: Add remote for missing repo
@ -104,11 +106,13 @@ Feature: hub remote add
""" """
Scenario: Add explicitly private remote Scenario: Add explicitly private remote
Given git protocol is preferred
When I successfully run `hub remote add -p mislav` When I successfully run `hub remote add -p mislav`
Then the url for "mislav" should be "git@github.com:mislav/dotfiles.git" Then the url for "mislav" should be "git@github.com:mislav/dotfiles.git"
And the output should not contain anything And the output should not contain anything
Scenario: Remote for my own repo is automatically private Scenario: Remote for my own repo is automatically private
Given git protocol is preferred
When I successfully run `hub remote add evilchelu` When I successfully run `hub remote add evilchelu`
Then the url for "evilchelu" should be "git@github.com:EvilChelu/dotfiles.git" Then the url for "evilchelu" should be "git@github.com:EvilChelu/dotfiles.git"
And the output should not contain anything And the output should not contain anything
@ -123,7 +127,7 @@ Feature: hub remote add
} }
""" """
When I successfully run `hub remote add -f mislav` When I successfully run `hub remote add -f mislav`
Then "git remote add -f mislav git://github.com/mislav/dotfiles.git" should be run Then "git remote add -f mislav https://github.com/mislav/dotfiles.git" should be run
And the output should not contain anything And the output should not contain anything
Scenario: Add remote with branch argument Scenario: Add remote with branch argument
@ -136,21 +140,7 @@ Feature: hub remote add
} }
""" """
When I successfully run `hub remote add -f -t feature mislav` When I successfully run `hub remote add -f -t feature mislav`
Then "git remote add -f -t feature mislav git://github.com/mislav/dotfiles.git" should be run Then "git remote add -f -t feature mislav https://github.com/mislav/dotfiles.git" should be run
And the output should not contain anything
Scenario: Add HTTPS protocol remote
Given the GitHub API server:
"""
get('/repos/mislav/dotfiles') {
json :private => false,
:name => 'dotfiles', :owner => { :login => 'mislav' },
:permissions => { :push => false }
}
"""
Given HTTPS is preferred
When I successfully run `hub remote add mislav`
Then the url for "mislav" should be "https://github.com/mislav/dotfiles.git"
And the output should not contain anything And the output should not contain anything
Scenario: Add named public remote Scenario: Add named public remote
@ -163,7 +153,7 @@ Feature: hub remote add
} }
""" """
When I successfully run `hub remote add mm mislav` When I successfully run `hub remote add mm mislav`
Then the url for "mm" should be "git://github.com/mislav/dotfiles.git" Then the url for "mm" should be "https://github.com/mislav/dotfiles.git"
And the output should not contain anything And the output should not contain anything
Scenario: set-url Scenario: set-url
@ -175,9 +165,9 @@ Feature: hub remote add
:permissions => { :push => false } :permissions => { :push => false }
} }
""" """
Given the "origin" remote has url "git://github.com/evilchelu/dotfiles.git" Given the "origin" remote has url "https://github.com/evilchelu/dotfiles.git"
When I successfully run `hub remote set-url origin mislav` When I successfully run `hub remote set-url origin mislav`
Then the url for "origin" should be "git://github.com/mislav/dotfiles.git" Then the url for "origin" should be "https://github.com/mislav/dotfiles.git"
And the output should not contain anything And the output should not contain anything
Scenario: Add public remote including repo name Scenario: Add public remote including repo name
@ -190,7 +180,7 @@ Feature: hub remote add
} }
""" """
When I successfully run `hub remote add mislav/dotfilez.js` When I successfully run `hub remote add mislav/dotfilez.js`
Then the url for "mislav" should be "git://github.com/mislav/dotfilez.js.git" Then the url for "mislav" should be "https://github.com/mislav/dotfilez.js.git"
And the output should not contain anything And the output should not contain anything
Scenario: Add named public remote including repo name Scenario: Add named public remote including repo name
@ -203,27 +193,28 @@ Feature: hub remote add
} }
""" """
When I successfully run `hub remote add mm mislav/dotfilez.js` When I successfully run `hub remote add mm mislav/dotfilez.js`
Then the url for "mm" should be "git://github.com/mislav/dotfilez.js.git" Then the url for "mm" should be "https://github.com/mislav/dotfilez.js.git"
And the output should not contain anything And the output should not contain anything
Scenario: Add named private remote Scenario: Add named private remote
Given git protocol is preferred
When I successfully run `hub remote add -p mm mislav` When I successfully run `hub remote add -p mm mislav`
Then the url for "mm" should be "git@github.com:mislav/dotfiles.git" Then the url for "mm" should be "git@github.com:mislav/dotfiles.git"
And the output should not contain anything And the output should not contain anything
Scenario: Add private remote including repo name Scenario: Add private remote including repo name
When I successfully run `hub remote add -p mislav/dotfilez.js` When I successfully run `hub remote add -p mislav/dotfilez.js`
Then the url for "mislav" should be "git@github.com:mislav/dotfilez.js.git" Then the url for "mislav" should be "https://github.com/mislav/dotfilez.js.git"
And the output should not contain anything And the output should not contain anything
Scenario: Add named private remote including repo name Scenario: Add named private remote including repo name
When I successfully run `hub remote add -p mm mislav/dotfilez.js` When I successfully run `hub remote add -p mm mislav/dotfilez.js`
Then the url for "mm" should be "git@github.com:mislav/dotfilez.js.git" Then the url for "mm" should be "https://github.com/mislav/dotfilez.js.git"
And the output should not contain anything And the output should not contain anything
Scenario: Add named private remote for my own repo including repo name Scenario: Add named private remote for my own repo including repo name
When I successfully run `hub remote add ec evilchelu/dotfilez.js` When I successfully run `hub remote add ec evilchelu/dotfilez.js`
Then the url for "ec" should be "git@github.com:EvilChelu/dotfilez.js.git" Then the url for "ec" should be "https://github.com/EvilChelu/dotfilez.js.git"
And the output should not contain anything And the output should not contain anything
Scenario: Avoid crash in argument parsing Scenario: Avoid crash in argument parsing

Просмотреть файл

@ -1,7 +1,7 @@
require 'fileutils' require 'fileutils'
Given(/^HTTPS is preferred$/) do Given(/^git protocol is preferred$/) do
run_ignored_command %(git config --global hub.protocol https) set_environment_variable "HUB_PROTOCOL", "git"
end end
Given(/^there are no remotes$/) do Given(/^there are no remotes$/) do

Просмотреть файл

@ -18,7 +18,7 @@ Feature: hub submodule add
} }
""" """
When I successfully run `hub submodule add mojombo/grit vendor/grit` When I successfully run `hub submodule add mojombo/grit vendor/grit`
Then the "vendor/grit" submodule url should be "git://github.com/mojombo/grit.git" Then the "vendor/grit" submodule url should be "https://github.com/mojombo/grit.git"
And the output should contain exactly: And the output should contain exactly:
""" """
Adding existing repo at 'vendor/grit' to the index\n Adding existing repo at 'vendor/grit' to the index\n
@ -34,7 +34,7 @@ Feature: hub submodule add
} }
""" """
When I successfully run `hub submodule add -p mojombo/grit vendor/grit` When I successfully run `hub submodule add -p mojombo/grit vendor/grit`
Then the "vendor/grit" submodule url should be "git@github.com:mojombo/grit.git" Then the "vendor/grit" submodule url should be "https://github.com/mojombo/grit.git"
Scenario: A submodule for my own repo is public nevertheless Scenario: A submodule for my own repo is public nevertheless
Given the GitHub API server: Given the GitHub API server:
@ -46,7 +46,7 @@ Feature: hub submodule add
} }
""" """
When I successfully run `hub submodule add grit vendor/grit` When I successfully run `hub submodule add grit vendor/grit`
Then the "vendor/grit" submodule url should be "git://github.com/mislav/grit.git" Then the "vendor/grit" submodule url should be "https://github.com/mislav/grit.git"
Scenario: Add submodule with arguments Scenario: Add submodule with arguments
Given the GitHub API server: Given the GitHub API server:
@ -58,7 +58,7 @@ Feature: hub submodule add
} }
""" """
When I successfully run `hub submodule add -b foo --name grit mojombo/grit vendor/grit` When I successfully run `hub submodule add -b foo --name grit mojombo/grit vendor/grit`
Then "git submodule add -b foo --name grit git://github.com/mojombo/grit.git vendor/grit" should be run Then "git submodule add -b foo --name grit https://github.com/mojombo/grit.git vendor/grit" should be run
Scenario: Add submodule with branch Scenario: Add submodule with branch
Given the GitHub API server: Given the GitHub API server:
@ -70,4 +70,4 @@ Feature: hub submodule add
} }
""" """
When I successfully run `hub submodule add --branch foo mojombo/grit vendor/grit` When I successfully run `hub submodule add --branch foo mojombo/grit vendor/grit`
Then "git submodule add --branch foo git://github.com/mojombo/grit.git vendor/grit" should be run Then "git submodule add --branch foo https://github.com/mojombo/grit.git vendor/grit" should be run

Просмотреть файл

@ -62,7 +62,7 @@ func (p *Project) WebURL(name, owner, path string) string {
return url return url
} }
func (p *Project) GitURL(name, owner string, isSSH bool) (url string) { func (p *Project) GitURL(name, owner string, allowPush bool) string {
if name == "" { if name == "" {
name = p.Name name = p.Name
} }
@ -72,15 +72,17 @@ func (p *Project) GitURL(name, owner string, isSSH bool) (url string) {
host := rawHost(p.Host) host := rawHost(p.Host)
if preferredProtocol() == "https" { switch preferredProtocol() {
url = fmt.Sprintf("https://%s/%s/%s.git", host, owner, name) case "git":
} else if isSSH || preferredProtocol() == "ssh" { if allowPush {
url = fmt.Sprintf("git@%s:%s/%s.git", host, owner, name) return fmt.Sprintf("git@%s:%s/%s.git", host, owner, name)
} else { }
url = fmt.Sprintf("git://%s/%s/%s.git", host, owner, name) return fmt.Sprintf("git://%s/%s/%s.git", host, owner, name)
case "ssh":
return fmt.Sprintf("git@%s:%s/%s.git", host, owner, name)
default:
return fmt.Sprintf("https://%s/%s/%s.git", host, owner, name)
} }
return url
} }
// Remove the scheme from host when the host url is absolute. // Remove the scheme from host when the host url is absolute.

Просмотреть файл

@ -1,10 +0,0 @@
package github
import (
"github.com/github/hub/v2/git"
)
func IsHTTPSProtocol() bool {
httpProtocol, _ := git.Config("hub.protocol")
return httpProtocol == "https"
}

Просмотреть файл

@ -141,12 +141,12 @@ variables.
Alternatively, you may provide `GITHUB_TOKEN`, an access token with Alternatively, you may provide `GITHUB_TOKEN`, an access token with
**repo** permissions. This will not be written to `~/.config/hub`. **repo** permissions. This will not be written to `~/.config/hub`.
### HTTPS instead of git protocol ### SSH instead of HTTPS protocol
If you prefer the HTTPS protocol for git operations, you can configure hub to If you prefer the SSH protocol for git operations, you can configure hub to
generate all URLs with `https:` instead of `git:` or `ssh:`: generate SSH-style URLs:
$ git config --global hub.protocol https $ git config --global hub.protocol ssh
This will affect `clone`, `fork`, `remote add` and other hub commands that This will affect `clone`, `fork`, `remote add` and other hub commands that
expand shorthand references to GitHub repo URLs. expand shorthand references to GitHub repo URLs.