GitHub 将子文件夹拆分成新仓库
您可以将 Git 仓库内的文件夹变为全新的仓库。
如果您创建仓库的新克隆副本,则将文件夹拆分为单独的仓库时不会丢失任何 Git 历史记录或更改。
- 打开 Git Bash。
- 将当前工作目录更改为您要创建新仓库的位置。
- 克隆包含该子文件夹的仓库。
$ git clone https://github.com/USERNAME/REPOSITORY-NAME
- 将当前工作目录更改为您克隆的仓库。
$ cd REPOSITORY-NAME
- 要从仓库中的其余文件过滤出该子文件夹,请运行
git filter-branch
,提供以下信息:
FOLDER-NAME
:项目中您要从其创建单独仓库的文件夹。
提示:Windows 用户应使用
/
来分隔文件夹。
BRANCH-NAME
:当前项目的默认分支,例如master
或gh-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
现在,该仓库应仅包含您的子文件夹中的文件。
- 在 GitHub 上创建新仓库。
- 在新 GitHub 仓库 Quick Setup(快速设置)页面的顶部,单击 可复制远程仓库 URL。
提示: 有关 HTTPS 与 SSH URL 之间的差异,请参阅“我应使用哪种远程 URL?”
- 检查仓库现有的远程名称。 例如,
源仓库
或上游仓库
是两种常见选择。
$ git remote -v
> origin https://github.com/USERNAME/REPOSITORY-NAME.git (fetch)
> origin https://github.com/USERNAME/REPOSITORY-NAME.git (push)
- 使用现有的远程名称和您在步骤 7 中复制的远程仓库 URL 为新仓库设置新的远程 URL。
git remote set-url origin https://github.com/USERNAME/NEW-REPOSITORY-NAME.git
- 使用新仓库名称验证远程 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)
- 将您的更改推送到 GitHub 上的新仓库。
git push -u origin BRANCH-NAME