前提
如果您创建存储库的新克隆,则在将文件夹拆分到单独的存储库时,不会丢失任何Git历史记录或更改。
步骤
- 打开终端。
- 将当前工作目录更改为要创建新存储库的位置。
- 克隆包含子文件夹的存储库。
$ git clone https://github.com/USERNAME/REPOSITORY-NAME
- 将当前工作目录更改为克隆的存储库。
$ cd REPOSITORY-NAME
- 要从存储库中的其余文件中过滤掉子文件夹,请运行git filter-branch,提供以下信息:
- FOLDER-NAME:项目中要从中创建单独存储库的文件夹。
- 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存储库的“快速设置”页面的顶部,单击以复制远程存储库URL。
提示:有关HTTPS和SSH URL之间差异的信息,请参阅“ 我应该使用哪个远程URL? ”
- 检查存储库的现有远程名称。例如,origin或者upstream是两种常见的选择。
$ 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