Cleaning projects with submodules

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Cleaning projects with submodules

From: Simon Richter <hidden>
Date: 2016-06-15 23:04:32

Hi,

I'm trying to set up a continuous integration build for Boost, which
uses massive amounts of submodules, and keep running into problems when
running "git clean" in the toplevel project.

When I switch to a version where a submodule has been removed (e.g. an
earlier version), "git clean -dx" will not remove the submodule's
directory, because it has its own .git directory. Using a single -f
flag, the process fails (because directories containing .git directories
are no longer skipped), and using -ff removes all submodules (which is
overkill).

Is there a good way to clean a project, leaving valid submodules in
place (these are then switched to the new tip and cleaned in separate
commands) while removing submodules that are no longer referenced?

   Simon

Re: Cleaning projects with submodules

From: Heiko Voigt <hidden>
Date: 2016-06-15 23:04:33

Hi,

On Sat, Apr 25, 2015 at 11:36:25PM +0200, Simon Richter wrote:
I'm trying to set up a continuous integration build for Boost, which
uses massive amounts of submodules, and keep running into problems when
running "git clean" in the toplevel project.

When I switch to a version where a submodule has been removed (e.g. an
earlier version), "git clean -dx" will not remove the submodule's
directory, because it has its own .git directory. Using a single -f
flag, the process fails (because directories containing .git directories
are no longer skipped), and using -ff removes all submodules (which is
overkill).

Is there a good way to clean a project, leaving valid submodules in
place (these are then switched to the new tip and cleaned in separate
commands) while removing submodules that are no longer referenced?
Unfortunately there is no really nice way for that yet. Safely removing
submodule ist still under development.

Here is a snippet that I used on a CI server for this purpose:

   git status --porcelain | grep "^?? " | sed -e 's/^?? //' | \
   while read i; do
        rm -rf "$i"
   done

It does a little more, since it unconditionally removes all untracked files
that are not ignored.

Cheers Heiko
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help