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 |
Note
You need Git version 2.22.0 or later to follow these instructions, otherwise git filter-repo
will not work.
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. However, note that the new repository won't have the branches and tags of the original repository.
{% data reusables.command_line.open_the_multi_os_terminal %}
-
Change the current working directory to the location where you want to create your new repository.
-
Clone the repository that contains the subfolder.
git clone https://{% data variables.product.product_url %}/USERNAME/REPOSITORY-NAME
-
Change the current working directory to your cloned repository.
cd REPOSITORY-NAME
-
To filter out the subfolder from the rest of the files in the repository, install
git-filter-repo
, then rungit filter-repo
with the following arguments.FOLDER-NAME
: The folder within your project where you'd like to create a separate repository.
{% windows %}
[!TIP] Windows users should use
/
to delimit folders.{% endwindows %}
$ git filter-repo --path FOLDER-NAME/ # Filter the specified branch in your directory and remove empty commits
The repository should now only contain the files that were in your subfolder(s).
If you want one specific subfolder to be the new root folder of the new repository, you can use the following command:
$ git filter-repo --subdirectory-filter FOLDER-NAME # Filter the specific branch by using a single sub-directory as the root for the new repository
-
Create a new repository on {% data variables.product.product_name %}.
-
At the top of your new repository on {% data variables.product.prodname_dotcom %}'s Quick Setup page, click {% octicon "copy" aria-label="Copy to clipboard" %} to copy the remote repository URL.
[!TIP] For information on the difference between HTTPS and SSH URLs, see "AUTOTITLE."
-
Add a new remote name with the URL you copied for your repository. For example,
origin
orupstream
are two common choices.git remote add origin https://{% data variables.product.product_url %}/USERNAME/REPOSITORY-NAME.git
-
Verify that the remote URL was added with your new repository name.
$ git remote -v # Verify new remote URL > origin https://{% data variables.product.product_url %}/USERNAME/NEW-REPOSITORY-NAME.git (fetch) > origin https://{% data variables.product.product_url %}/USERNAME/NEW-REPOSITORY-NAME.git (push)
-
Push your changes to the new repository on {% data variables.product.product_name %}.
git push -u origin BRANCH-NAME