3.8 KiB
title, redirect_from, intro, versions, shortTitle
| title | redirect_from | intro | versions | shortTitle | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Splitting a subfolder out into a new repository |
|
You can turn a folder within a Git repository into a brand new repository. |
|
Splitting a subfolder |
If you create a new clone of the repository, you won't lose any of your Git history or changes when you split a folder into a separate repository.
{% data reusables.command_line.open_the_multi_os_terminal %} 2. Change the current working directory to the location where you want to create your new repository. 3. Clone the repository that contains the subfolder.
$ git clone https://{% data variables.command_line.codeblock %}/<em>USERNAME</em>/<em>REPOSITORY-NAME</em>
- Change the current working directory to your cloned repository.
$ cd <em>REPOSITORY-NAME</em>
-
To filter out the subfolder from the rest of the files in the repository, run
git filter-branch, supplying this information:FOLDER-NAME: The folder within your project that you'd like to create a separate repository from.
{% windows %}
{% tip %}
Tip: Windows users should use
/to delimit folders.{% endtip %}
{% endwindows %}
BRANCH-NAME: The default branch for your current project, for example,mainorgh-pages.
$ git filter-branch --prune-empty --subdirectory-filter <em>FOLDER-NAME BRANCH-NAME</em> # Filter the specified branch in your directory and remove empty commits > Rewrite 48dc599c80e20527ed902928085e7861e6b3cbe6 (89/89) > Ref 'refs/heads/<em>BRANCH-NAME</em>' was rewritten
The repository should now only contain the files that were in your subfolder.
- Create a new repository on {% data variables.product.product_name %}.
- At the top of your new {% data variables.product.product_name %} repository's Quick Setup page, click {% octicon "clippy" aria-label="The copy to clipboard icon" %} to copy the remote repository URL.

{% tip %}
Tip: For information on the difference between HTTPS and SSH URLs, see "About remote repositories."
{% endtip %}
- Check the existing remote name for your repository. For example,
originorupstreamare two common choices.
$ git remote -v
> origin https://{% data variables.command_line.codeblock %}/<em>USERNAME/REPOSITORY-NAME</em>.git (fetch)
> origin https://{% data variables.command_line.codeblock %}/<em>USERNAME/REPOSITORY-NAME</em>.git (push)
- Set up a new remote URL for your new repository using the existing remote name and the remote repository URL you copied in step 7.
git remote set-url origin https://{% data variables.command_line.codeblock %}/<em>USERNAME/NEW-REPOSITORY-NAME</em>.git
- Verify that the remote URL has changed with your new repository name.
$ git remote -v
# Verify new remote URL
> origin https://{% data variables.command_line.codeblock %}/<em>USERNAME/NEW-REPOSITORY-NAME</em>.git (fetch)
> origin https://{% data variables.command_line.codeblock %}/<em>USERNAME/NEW-REPOSITORY-NAME</em>.git (push)
- Push your changes to the new repository on {% data variables.product.product_name %}.
git push -u origin <em>BRANCH-NAME</em>