Hi Yue,
On Wednesday, June 21, 2017 at 3:18:09 AM UTC+2, [email protected] wrote:
>
> After some tests, I got a better way to do that: Just use git worktree
> feature.
>
> Here is an example:
>
> Suppose you have 2 (or more) projects, and they use a library_XYZ
> submodule:
> /home/projects/project1/library_XYZ
> /home/projects/project2/library_XYZ
>
> Then, you just need to do these:
>
> 1. Delete /home/projects/project2/library_XYZ
> because the coming worktree command needs no folder there
> 2. Delete /home/projects/project2/.git/modules/library_XYZ
> no need it anymore, just save your hard disk space. :P
>
> 3. cd /home/projects/project1/library_XYZ
>
> 4. Create a branch "project2" in /home/projects/project1/library_XYZ
> if you don't have a branch for the coming worktree
>
> 5. run "git worktree add ../../project2/library_XYZ project2"
> this is the magic commend. :D
>
I`m not sure if "git-worktree" is the right tool for the job here... While
the proposed steps do seem to work from the perspective of "project2" so
far, "project1/library_XYZ" submodule is effectively "polluted" with an
extra branch ("project2") and an additional (linked) working tree attached
to it.
This feels hacky to say the least - I`m not sure if there are any
unexpected drawbacks from usability perspective, but it`s certainly does
not seem necessary to accomplish the desired goal.
What looks like an easier (and less intrusive) solution may be to just edit
the ".git" _file_ of each submodule we want to reroute (and then delete
corresponding submodule repository inside ".git/modules/", as already
mentioned) -- this is basically what step 5 described above does to ".git"
file, but here without other (unneeded and might be unwanted) "worktree"
related stuff.
For the given example of two projects using the same submodule:
(*1*) /home/projects/project1/.git << project repository
/home/projects/project1/.git/modules/library_XYZ << submodule repository
/home/projects/project1/library_XYZ/*.git* << submodule *file*
/home/projects/project2/.git << project repository
/home/projects/project2/.git/modules/library_XYZ << submodule repository
/home/projects/project2/library_XYZ/*.git* << submodule *file*
... we can edit "/home/projects/project2/library_XYZ/.git" file to point to
"library_XYZ" submodule repo inside "project1", by changing this:
(*2*) gitdir: ../.git/modules/library_XYZ
... to this:
(*3*) gitdir: ../../project1/.git/modules/library_XYZ
... and deleting "/home/projects/project2/.git/modules/library_XYZ"
submodule repository as it`s not used anymore (as explained above), getting
to this (note we have submodule repository only once now):
(*4*) /home/projects/project1/.git << project repository
/home/projects/project1/.git/modules/library_XYZ << submodule repository
/home/projects/project1/library_XYZ/*.git* << submodule *file*
/home/projects/project2/.git << project repository
/home/projects/project2/library_XYZ/*.git* << submodule *file*
Even better, if possible/preferred, we could make the situation look like
this:
(*5*) /home/projects/library_XYZ/.git << project repository
/home/projects/project1/.git << project repository
/home/projects/project1/library_XYZ/*.git* << submodule *file*
/home/projects/project2/.git << project repository
/home/projects/project2/library_XYZ/*.git* << submodule *file*
... where we can than have a "clean and obvious" repository for
"library_XYZ" outside of any other project, and just reroute all submodule
files inside other projects to it.
For the given example of "/home/projects/project1/library_XYZ/.git" and
"/home/projects/project2/library_XYZ/.git" files, edit them to:
(*6*) gitdir: ../../library_XYZ/.git
*p.s.* If "/home/projects/project*X*/library_XYZ/.git" is a Git
_repository_ and not a file (and "/home/projects/project*X*/.git/modules/
library_XYZ" repository probably does not exist), you can run:
(*7*) $ git submodule absorbgitdirs
... inside every "project*X*" repository, so submodule "library_XYZ"
repository is moved from "/home/projects/project*X*/library_XYZ/.git" to "
/home/projects/project*X*/.git/modules/library_XYZ", and "
/home/projects/project*X*/library_XYZ/.git" becomes a file you can
edit/reroute, deleting "/home/projects/project*X*/.git/modules/library_XYZ"
afterwards, as explained above.
Regards,
Buga
--
You received this message because you are subscribed to the Google Groups "Git
for human beings" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.