How to extract a git subdirectory and make a submodule out of it?

前端 未结 5 805
别跟我提以往
别跟我提以往 2020-11-27 09:07

I started a project some months ago and stored everything within a main directory. In my main directory \"Project\" there are several subdirectories containing different thi

5条回答
  •  攒了一身酷
    2020-11-27 09:42

    Nowadays there's a much easier way to do it than manually using git filter-branch: git subtree

    Installation

    NOTE git-subtree is now part of git (if you install contrib) as of 1.7.11, so you might already have it installed. You may check by executing git subtree.


    To install git-subtree from source (for older versions of git):

    git clone https://github.com/apenwarr/git-subtree.git
    
    cd git-subtree
    sudo rsync -a ./git-subtree.sh /usr/local/bin/git-subtree
    

    Or if you want the man pages and all

    make doc
    make install
    

    Usage

    Split a larger into smaller chunks:

    # Go into the project root
    cd ~/my-project
    
    # Create a branch which only contains commits for the children of 'foo'
    git subtree split --prefix=foo --branch=foo-only
    
    # Remove 'foo' from the project
    git rm -rf ./foo
    
    # Create a git repo for 'foo' (assuming we already created it on github)
    mkdir foo
    pushd foo
    git init
    git remote add origin git@github.com:my-user/new-project.git
    git pull ../ foo-only
    git push origin -u master
    popd
    
    # Add 'foo' as a git submodule to `my-project`
    git submodule add git@github.com:my-user/new-project.git foo
    

    For detailed documentation (man page), please read git-subtree.txt.

提交回复
热议问题