codecamp

GitHub 将子文件夹拆分成新仓库

您可以将 Git 仓库内的文件夹变为全新的仓库。

如果您创建仓库的新克隆副本,则将文件夹拆分为单独的仓库时不会丢失任何 Git 历史记录或更改。

  1. 打开 Git Bash。

  1. 将当前工作目录更改为您要创建新仓库的位置。

  1. 克隆包含该子文件夹的仓库。

   $ git clone https://github.com/USERNAME/REPOSITORY-NAME

  1. 将当前工作目录更改为您克隆的仓库。

   $ cd REPOSITORY-NAME

  1. 要从仓库中的其余文件过滤出该子文件夹,请运行 git filter-branch,提供以下信息:

  • FOLDER-NAME:项目中您要从其创建单独仓库的文件夹。

提示:Windows 用户应使用 / 来分隔文件夹。

  • BRANCH-NAME:当前项目的默认分支,例如 mastergh-pages

     $ git filter-branch --prune-empty --subdirectory-filter FOLDER-NAME  BRANCH-NAME
       # Filter the specified branch in your directory and remove empty commits
       > Rewrite 48dc599c80e20527ed902928085e7861e6b3cbe6 (89/89)
       > Ref 'refs/heads/BRANCH-NAME' was rewritten

现在,该仓库应仅包含您的子文件夹中的文件。

  1. 在 GitHub 上创建新仓库

  1. 在新 GitHub 仓库 Quick Setup(快速设置)页面的顶部,单击 save可复制远程仓库 URL。

创建远程仓库 URL 字段

提示: 有关 HTTPS 与 SSH URL 之间的差异,请参阅“我应使用哪种远程 URL?

  1. 检查仓库现有的远程名称。 例如,源仓库上游仓库是两种常见选择。

   $ git remote -v
   > origin  https://github.com/USERNAME/REPOSITORY-NAME.git (fetch)
   > origin  https://github.com/USERNAME/REPOSITORY-NAME.git (push)

  1. 使用现有的远程名称和您在步骤 7 中复制的远程仓库 URL 为新仓库设置新的远程 URL。

   git remote set-url origin https://github.com/USERNAME/NEW-REPOSITORY-NAME.git

  1. 使用新仓库名称验证远程 URL 是否已更改。

    $ git remote -v
    # Verify new remote URL
    > origin  https://github.com/USERNAME/NEW-REPOSITORY-NAME.git (fetch)
    > origin  https://github.com/USERNAME/NEW-REPOSITORY-NAME.git (push)

  1. 将您的更改推送到 GitHub 上的新仓库。

    git push -u origin BRANCH-NAME
GitHub 关于 Git 子树合并
GitHub 创建并编辑提交
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

GitHub 身份验证

在 GitHub 上管理订阅和通知

在 GitHub 上管理活动的订阅

GitHub 组织和团队

GitHub 管理对组织仓库的 Git 访问

GitHub 计费和付款

GitHub 使用议题和拉取请求进行协作

GitHub 在具有代码质量功能的仓库上进行协作

管理在 GitHub 上的工作

GitHub 建立强大的社区

GitHub 管理仓库

GitHub 自定义 GitHub 工作流程

在 GitHub Marketplace 中购买并安装应用程序

通过 GitHub Jobs 寻找人才

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }