tags:

views:

68

answers:

2

It seems a git repo inside a parent repo isn't included in a commit on the parent unless it's setup as a submodule. Is it possible to override this behaviour and treat the nested git repo as any other directory? I don't want to rely on external dependencies through submodules but want to use git to manage these dependencies within the project.

A: 

1/ You could override that through:

  • either a git config setting: set the environment variable $GIT_DIR
    you define your .git directory of the nested Git working tree as an external .git (external to both the nested repo and the main repo)
  • or by setting your nested repo 'N' outside the main repo, but checkout that repo 'N' inside the main repo:
core.worktree

Set the path to the root of the work tree. This can be overridden by the GIT_WORK_TREE environment variable and the --work-tree command line option

In both case, the idea is to have a nested worktree without any .git subdirectory in it.

2/ With submodules, the nested git repo is not really included in the parent repo.
A special entry is made in the parent tree to record the external Git SHA1.

new file mode 160000
index 0000000..4c4c5a2

See also "nature of Git submodules" (third part of the answer)

VonC
Your methods 1a and 1b are perfect for me, thank you. I'm sure this isn't the recommended approach but I really need this flexibility. Thanks for the comprehensive answer!
stevo
A: 

See also http://stackoverflow.com/questions/918768/are-git-submodules-the-only-safe-way-to-have-working-copies-within-working-copies .

Actually, when I came across the current discussion, I was concerned with a problem different from the on solved here: using git as a kind of archiving tool that could archive a filesystem tree which already has some git working directories... perhaps the other question is closer to my problem.

imz
imz