git/list[1] front-page[2] threads[3] people[4] search[5] about
 

tracking submodules out of main directory.

From
HGhenri GEIST <henri.geist@flying-robots.com>
Date
Jun 27, 2011, 13:07 UTC
Message-ID
<1309180056.2497.220.camel@Naugrim.eriador.com>
Hello,
Here is my topic.

Is it possible to track a submodule through a relative path outside of a submodule ?

The purpose of this thing is to maintain dependency through different library or projects.

Let says this generic dependency tree.
project 1 --+--> library 1
            |
            +--> library 2
project 2 --+--> library 1
            |
            +--> library 3
project 3 --+--> library 2
            |
            +--> library 4
            |
            +--> project 1 --+--> library 1
                             |
                             +--> library 2
project 4 --+--> library 4
            |
            +--> project 1 --+--> library 1
            |                |
            |                +--> library 2
            |
            +--> project 2 --+--> library 1
            |                |
            |                +--> library 3
            |
            +--> project 3 --+--> library 2
                             |
                             +--> library 4
                             |
                             +--> project 1 --+--> library 1
                                              |
                                              +--> library 2
CAUTION : this is a tree of dependency not directory.

We can obviously solve this by doing trees of submodules just reflecting the trees of dependency but it create somme problems.

  1. In project 4 I have 2 times project 1 and 3 times libraries 1 and 2
     And 2 times library 4.
  2. It is a wast of space.
  3. Different version of the same libraries or projects could be used.
  4. when linking object, multiples objects will export the same symbols
Point 2 could be acceptable in little project.
Point 4 could be addressed by a careful compilation schema.
Point 3 could be no issue and discard point 2 meaning if it is what you
        want in your work flow.
        But in my work flow it is a bug every thing NEED to be
        synchronized.

what I would like to have is every git tree in the same directory where I put my code (not necessary a super project tree).

like this :
Anything/library_1
Anything/library_2
Anything/library_3
Anything/library_4
Anything/project_1 with a git submodule add ../library_1 ../library_2
Anything/project_2 with a git submodule add ../library_1 ../library_3
Anything/project_3 with a git submodule add ../library_2 ../library_4
                                            ../project_1
Anything/project_4 with a git submodule add ../library_4 ../project_1
                                            ../project_2 ../project_3

But when I do this I receive a "fatal: '../library_1' is outside repository"

This is due to the fact that 'git add submodule' use the tests of 'git add' which prevent creating files outside of the working tree for obvious security reasons.

But in my point of view the meaning of a submodule should be more like a symlink on a repository than a sub tree. And symlink does not seams to be prohibited even if they link to something outside of the repository.

I have tried a work around by doing : "git submodule add library_1 library_2" in project 1 and then replacing library_1 and library_2 by symlinks to ../library_1 and ../library_2 but git immediately track the symlink itself and not what is pointed to. And even if it had worked, this type of work around is not clean.

I have think about removing the test in setup.c in case of adding a submodule. But I am not deeply involved in git source code then I am not sure of the possibles side effects of this modification.

As well may be there is an other solution that I still haven not think about.

	Henri GEIST
Next: Junio C Hamano
Message 1 of 47 in “tracking submodules out of main directory.”
  1. henri GEISTJun 27, 2011
  2. Junio C HamanoJun 27, 2011
  3. Jens LehmannJun 27, 2011
  4. henri GEISTJun 27, 2011
  5. Jens LehmannJun 27, 2011
  6. henri GEISTJun 27, 2011
  7. Junio C HamanoJun 27, 2011
  8. Jens LehmannJun 27, 2011
  9. henri GEISTJun 27, 2011
  10. Jens LehmannJun 28, 2011
  11. henri GEISTJun 28, 2011
  12. henri GEISTJun 27, 2011
  13. Jens LehmannJun 28, 2011
  14. Jens LehmannJun 28, 2011
  15. henri GEISTJun 28, 2011
  16. Alexei SholikJun 28, 2011
  17. Jens LehmannJun 28, 2011
  18. henri GEISTJul 27, 2011
  19. henri GEISTJul 28, 2011
  20. Jens LehmannJul 28, 2011
  21. henri GEISTJul 29, 2011
  22. Jens LehmannJul 30, 2011
  23. henri GEISTJul 30, 2011
  24. Jens LehmannAug 1, 2011
  25. henri GEISTAug 2, 2011
  26. Jens LehmannAug 2, 2011
  27. Heiko VoigtAug 3, 2011
  28. henri GEISTAug 3, 2011
  29. Junio C HamanoAug 3, 2011
  30. Jens LehmannAug 3, 2011
  31. Junio C HamanoAug 3, 2011
  32. Jens LehmannAug 3, 2011
  33. henri GEISTAug 3, 2011
  34. Jens LehmannAug 4, 2011
  35. henri GEISTAug 5, 2011
  36. Heiko VoigtAug 4, 2011
  37. henri GEISTAug 5, 2011
  38. Heiko VoigtAug 3, 2011
  39. henri GEISTAug 3, 2011
  40. henri GEISTAug 3, 2011
  41. henri GEISTAug 3, 2011
  42. Heiko VoigtAug 1, 2011
  43. henri GEISTAug 2, 2011
  44. henri GEISTJun 27, 2011
  45. Jens LehmannJun 27, 2011
  46. henri GEISTJun 27, 2011
  47. henri GEISTAug 3, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.