Suppose I have a library Common
that may be used stand-alone, and is used by projects P1
and P2
, so the tree I want looks like
/Common/.git
...
/P1/.git
.gitmodules # points to remote server
Common/
...
/P2/.git
.gitmodules # points to remote server
Common/
...
When I make a change in /Common
, I would like to be able to test it using P1
and P2
before committing. With the usual git submodule
command set, I would have to commit from /Common
, push to remote, then pull from both /P1/Common
and /P2/Common
. If the commit breaks something, it cannot be amended because the bad change has already been published. Alternatively, I could git remote add quicktest /Common
from /P?/Common
to be able to pull without touching the remote server. But this has lots of opportunities for inconsistency and it is dirty to strip broken commits from /P?/Common
so that they can be amended in /Common
.
I would rather that, during development, the working tree from /Common
be used by P1
and P2
, but I can't make /P1/Common
a symlink to /Common
because git submodule
recognizes the symlink as different from a directory. Hardlinking directories is not allowed by most file systems. I can hardlink all the files using
rm -rf /P1/Common
cp -rl /Common /P1/Common
which works quite well until a new file is added to /Common
in which case this process needs to be repeated. Is there an elegant way to both
- keep
git clone --recursive git://remote/P1.git
working for the end user, and - allow me to easily test that changes in
/Common
work withP1
andP2
?