Git repository within Git repository

35,045

Solution 1

You'll want to read about Git submodules.

Solution 2

Use git subtree in git version 1.7.11 and above. git subtree is superior to git submodule because:

  • Management of a simple workflow is easy. Older versions of git are supported (even before v1.5.2)
  • The sub-project’s code is available right after the clone of the super project is done
  • git subtree does not require users of your repository to learn anything new, they can ignore the fact that you are using subtree to manage dependencies
  • git subtree does not add new metadata files like git submodule does (such as .gitmodule)
  • Contents of the subtree can be modified without having a separate repository copy of the dependency somewhere else

Additionally, if you need to detach a subtree of your existing repository into a new repository, git subtree split can help you with that.

UPDATE February 2020: Nowadays I like subrepo even more.

Solution 3

You can nest two git repo's without using submodules. Suppose ChildRepo is a subdirectory of ParentRepo, and both are git repositories.

+ ParentRepo
  - ChildRepo

If you add a file to ChildRepo, ParentRepo will ignore it. When you commit it it will be added to ChildRepo. It is not possible to add files within ChildRepo to ParentRepo.

More info: Nested GIT repo gotchas!

Share:
35,045
Buuuh
Author by

Buuuh

Updated on July 09, 2022

Comments

  • Buuuh
    Buuuh almost 2 years

    I have a main git repository A and we are using sources out of another git repository B in a subdirectory of our main project. Now it would be good to have the B repository checked out within the A repository in this used subdirectory. If someone else then clones the repository of course he should get our main repository A and within that automatically the B repository.

    Let me visualize the directory structure:

    + main_repository       - the root directory of the main Repository
      + src                 - directory containing the source 
        + foreignRepo       - this should be the root directory of another git repo
      + binaries
      + other
    

    This must be also known in the remote repository, just a local copy doesn't help me, because other people check this out and must be able to compile all the stuff.

  • chharvey
    chharvey almost 10 years
    I just tried nesting a child repo within a parent repo. when I added a file to child repo, I did cd ../ and git status and the parent repo did not ignore the new file.
  • somenxavier
    somenxavier over 2 years
    Do you need put ChildRepo in .gitignore?