从命令行重命名 Github repo

Posted

技术标签:

【中文标题】从命令行重命名 Github repo【英文标题】:Rename Github repo from command line 【发布时间】:2021-10-03 23:28:25 【问题描述】:

我用谷歌搜索并在 *** 上搜索了以下问题,但找不到任何令人满意的答案。

也就是说,我有一个远程存储库:https://github.com/<username>/foo 和我 希望在远程站点以及命令行的本地配置条目中将其重命名为 https://github.com/<username>/bar,现在我将 repo 克隆到本地 '~/my_github_repos/foo'。

所以基本上,我希望这个 repo 的所有内容都从 foo 转换为 bar(网址/配置/本地文件夹)

为此,我将文件夹 ~/my_github_repos/foo/ 重命名为 ~/my_github_repos/bar/ 并尝试这样做,

git remote set-url origin https://github.com/<username>/bar.git

但这只是在本地而不是远程完成的。因此,当我对现在重命名的文件夹bar 中的文件进行一些更改并执行git push origin master 时,它给了我错误:

remote: Repository not found.
fatal: repository 'https://github.com/<username>/bar.git/' not found

那么,为了重命名 repo,我需要做些什么才能在本地进行更改并远程反映它?

我知道 Github.com 提供了一个非常好的 UI 来重命名存储库,但是我只想知道是否有一种方法可以通过命令行的几个步骤来实现。如果没有,我同意从 github.com 网站重命名它很简单。

这个问题的原因是,我喜欢主要从命令行做事,而不是到处做像重命名仓库这样简单的任务。

附:我搜索了***,发现了这个:Rename Github Repository,可能看起来和这个问题很像,但又不一样。

【问题讨论】:

docs.github.com/en/github/administering-a-repository/… ***.com/search?q=%5Bgithub-api%5D+rename+repository 【参考方案1】:

本地仓库和远程仓库在这方面是分开的。没有允许您更改远程存储库的路径/名称的 Git 命令。

您在问题中提到您已经更改了本地目录的名称并将存储库 URL 更新为 git remote set-url。因为您无法使用 Git重命名远程存储库,所以您需要以您拥有的实际远程存储库的类型/软件/平台支持的方式执行此操作。

这是用 GitHub 标记的,所以您的问题归结为:有没有办法在不使用 Web 界面的情况下更改 GitHub 存储库的名称? 是的,这可以通过 GitHub API 实现,方法是向 /repos/owner/repo 发送 PATCH 请求并指定不同的 name 参数 (docs)。

我建议使用 GitHub CLI 的 api-command,它允许以安全的方式向 GitHub API 发出经过身份验证的请求:

gh api -X PATCH --raw-field name=new-name repos/account-name/current-name

GitHub CLI 有一个 feature request,允许使用专用命令重命名存储库,而不是使用 api-command。

另一种选择是直接使用curl。但是,在命令行中传递凭据具有安全隐患,我不建议这样做。出于示例的目的,请求如下所示:

curl -X PATCH \
  -d '"name": "new-repo-name"' \
  -H "Authorization: token ghp_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
  "https://api.github.com/repos/account-name/current-repo-name"

【讨论】:

谢谢马特。这就是我一直在寻找的。​​span> 【参考方案2】:

我喜欢主要通过命令行来做事,而不是到处做像重命名仓库这样简单的任务。

不再需要使用 API 命令,使用 new gh 2.3.0。 它确实使用相同的 API 调用重命名远程存储库。 但是:它确实重命名远程“origin”URL 以匹配新重命名的存储库 URL。

参见PR 4450 和commit 67d1a90,以及pkg/cmd/repo/rename/rename.go#updateRemote() git.UpdateRemoteURL()

但您可以通过gh extension 走得更远,如illustrated here by Nate Smith。

【讨论】:

以上是关于从命令行重命名 Github repo的主要内容,如果未能解决你的问题,请参考以下文章

从命令行重命名文件

在 ssh 之后从命令行重命名控制台会话

dos 文件重命名

用shell命令对文件重命名

使用BATCH文件使用文件中的部分行重命名多个文件

linux中如何用rename命令重命名一个文件