Sub-directory into independent repository and later merge back into main repository

I want to create independent repository out of a sub-directory of an existing git repository and later be capable to merge it back to main repository. Basically I want to separate one sub-directory of a monolithic git repository for specific work and be able to merge commits back into monolithic repo.

What I did try was split a subtree:

  • How to get list of latest tags in remote git?
  • git: show all modified files - staged and not staged
  • Git stash pop only if successfully stashed before
  • Git push synchronization between team members
  • Git pre-svn-dcommit hook
  • Git: set branch to current ref
  • % git subtree split -P project_a/directory_a -b directory_a_branch
    

    Then I could clone directory_a_branch into separate repository and start working on it:

    % git clone -b directory_a_branch --single-branch file:///path/to/main_repo
    

    Later I could push changes back to main repository (under directory_a_branch) — everything is normal and by the book right now.

    Problems start with my strategy in merging directory_a_branch, which fail since I clearly fail to fully understand what I’m doing.

    I read “Subtree Merging” from Pro Git book: https://git-scm.com/book/en/v1/Git-Tools-Subtree-Merging and tried:

    % git read-tree --prefix=project_a/directory_a -u directory_a_branch
    error: Entry 'project_a/directory_a/README' overlaps with 'project_a/directory_a/README'.  Cannot bind.
    

    Similar issue is discussed here: git: merging a subtree from one branch to another, but lacks sufficient answer for me.

    Creating subtree branch is not my intention and this problem may be solved other ways. Maybe with submodules?

    My intention is that one repository is like sub-repository to another and merging work back to main repository would be as easy as possible, since both repositories share the same files.

    Is it possible to solve this task with Git without ugly hacks?

  • Does git only support a flat tag structure?
  • gitattributes and line endings confusion
  • git rebase local branch on origin/master
  • Find the commit sha of a file with git
  • How do your developers work using Git?
  • Merge pull request into different branch
  • 2 Solutions collect form web for “Sub-directory into independent repository and later merge back into main repository”

    One way to solve this issue (which may fill particular usecase) is described in this post: https://lostechies.com/johnteague/2014/04/04/using-git-subtrees-to-split-a-repository/

    Basically you remove project_a/directory_a from master (& commit) and then subtree add --prefix from (remote) branch like this:

    git subtree add --prefix=project_a/directory_a remote branch
    

    But this is not 100%, since there is better way to solve this.

    One-liner which solves this:

     git merge -s subtree directory_a_branch master
    
    Git Baby is a git and github fan, let's start git clone.