使用命令行创建 GitHub 代码仓库

31
我一直在尝试使用命令行将本地 repo 的更改推送到 Github。由于我已经离开 git 一段时间了,所以我不记得一些东西了。过去的一个小时里,我一直在尝试在 Github.com 上推送 repo 而不创建远程 repo。据我所知,git push origin master/git push 就足以将本地更改推送,并在必要时在远程服务器上创建 repo。然而,git push 不会让我推送并自动创建 repo。
为了节省时间,我在 Github.com 上创建了远程 repo,并使用以下命令添加了远程 repo 的 URL: git remote add origin https://mygithubrepoUrl.com 这样就成功了。
在命令行中需要先创建 Github 上的远程 repo 并添加 URL 才能推送更改吗?Git 不能自动创建 repo 并推送更改吗?

是的,我认为这是必要的,远程创建仓库,然后在本地添加“origin”是正常的工作流程。 - Tim Biegeleisen
1
以下帖子有答案 https://dev59.com/k3E95IYBdhLWcg3wKq2q - Thangakumar D
这个回答解决了你的问题吗?[能否在不打开浏览器的情况下通过命令行在GitHub上创建远程仓库?](https://dev59.com/k3E95IYBdhLWcg3wKq2q) - iled
6个回答

20

在推送之前,您需要创建存储库,但是有一个hub可以自动化此过程:

git init newRepo
cd newRepo
hub create

使用-p开关来创建私有仓库,使用hub create。要推送本地的master分支,请执行以下操作:

-p开关用于创建私有仓库。

使用hub create命令创建仓库。

要推送本地的master分支,请执行以上操作。

git push -u origin HEAD

这个工具还可以创建拉取请求,打开项目页面,检查CI状态,通过仅指定用户名/仓库来克隆现有的存储库,以及其他一些功能。

项目页面建议将 git 别名设为 hub (因为后者将未知命令转发到 git),但我不建议这样做,即使只是为了区分“裸”Git命令和 hub 的功能。


3
你需要先从这里 https://github.com/github/hub#installation 安装环境的 hub 组件。 - Mahesh Jamdade
它能从保存的配置文件中获取用户名和密码吗? - alper
您需要进行一次身份验证,这将在用户配置文件中存储一个令牌,以便稍后用于访问GitHub。 - krlmlr

19

cli.github.com现在是hub的继承者。

cli 0.6以来,它允许从命令行创建存储库,并支持PR 547

创建一个新的GitHub存储库。

Usage:

Create a new GitHub repository.

Use the "ORG/NAME" syntax to create a repository within your organization.

gh repo create [<name>] [flags]

Flags:

-d, --description string   Description of repository
    --enable-issues        Enable issues in the new repository (default true)
    --enable-wiki          Enable wiki in the new repository (default true)
-h, --homepage string      Repository home page URL
    --public               Make the new repository public
-t, --team string          The name of the organization team to be granted access

Global Flags:

 --help                  Show help for command
 -R, --repo OWNER/REPO   Select another repository using the OWNER/REPO format
itsgus.dev评论中指出:

当非交互式运行时,必须使用--public--private--internal标志。


@itsgus.dev,感谢您的反馈。我已将您的评论包含在答案中以增加可见性。 - VonC
但是如果我只想在GitHub上继续使用标准的git,而不是下载并开始使用不同的GitHub特定工具来处理我的git工作呢? - NeilG
@NeilG gh 所涵盖的操作是 GitHub API 调用的包装器,而不是本地 git 命令所涵盖的。如果没有 gh,则需要使用 curl - VonC
感谢@VonC - 所以我认为这是确认GitHub不支持使用原始的git创建存储库。您需要使用GitHub特定命令。 - NeilG
@NeilG 没错,那就是这个意思。在GitHub上创建仓库是通过其REST API完成的,因此需要使用curlgh,而不是git - VonC

8

Github API应该能够正常工作。

首先使用curl和API创建存储库,详情请参见https://developer.github.com/v3/repos/#create

大概是这样的: curl -u 'username' https://api.github.com/user/repos -d '{"name":"repository name"}'

然后您可以像之前描述的那样添加远程并推送:

git remote add origin git@github.com:user/repository_name.git && git push origin master


1
Github API create 表示,虽然创建新仓库有两个端点(即一个用于用户账户,另一个用于组织账户),但他们只启用了组织账户端点。例如 curl --user 'username' https://api.github.com/username/repos --request POST --data '{"name":"newreponame"}' --verbose 返回 404 Not Found,而 curl --user 'username' https://api.github.com/orgs/orgname/repos -d '{"name":"newreponame"}' 返回 201 Created。建议使用 hub - Luke Schoen

3

首先安装 GitHub cli

  1. gh repo create - 按照说明进行操作
  2. 如果您选择不在本地克隆,则继续以下步骤,假设您在工作文件夹内,否则将存储库克隆到当前文件夹中。
  3. git init
  4. git git remote add origin https://github.com/<user>/<repo>
  5. git branch -M main
  6. 现在本地文件夹和存储库已连接,您可以开始使用了。
  7. 想要删除存储库?首先获得管理员权限(如果没有)。
  8. gh auth refresh -h github.com -s delete_repo
  9. gh repo delete <repo> --confirm

3

这篇回答解决了使用 REST API 通过 curl 存在的多个问题,其中 mickiewicz 的 回答存在一些不足。值得注意的是,这篇回答:

  1. 使用必要的令牌授权(而非已废弃的密码验证)对 GitHub 进行授权。
  2. 在出现错误时使 curl 返回一个非零代码(通过使用参数 -f)。
  3. 参数化了仓库名称。
  4. 创建一个私有仓库(默认情况下为公开仓库)。

首先,获取一个访问 repo 范围的 token。

REPO_NAME=foo1
GITHUB_TOKEN=0000000000000000000000000000000000000000  # Enter your own.

curl -f -X POST \
  -H "Authorization: token ${GITHUB_TOKEN}" -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/user/repos -d "{\"name\": \"${REPO_NAME}\", \"private\": true}"

此回答仅适用于在用户下创建存储库的情况。创建组织存储库的请求略有不同。

如果您不介意安装GitHub CLI,请参考VonC的答案


0

gh repo create,从gh 2.21.0(2022年12月)开始更加精确,特别是在创建新存储库的所有者方面:

当交互式地创建新的存储库时,用户只被提示输入存储库名称,而不清楚可以添加前缀以便在组织中创建存储库。

建议的解决方案

如果我输入没有前缀的名称,希望出现一个选择提示,其中包含我的个人帐户名称(默认值)和我所属的所有组织:

owner selection -- https://user-images.githubusercontent.com/245879/200487503-cef84b03-964f-4c31-b502-158f16444219.png


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接