# Cleaning projects with submodules

2 messages from 2015-04-25 to 2015-04-27. Participants: Simon Richter, Heiko Voigt.
Thread: https://gitlist.dev/t/39161

## Simon Richter, 2015-04-25 21:36

Subject: Cleaning projects with submodules
Message-ID: <553C08D9.9000907@hogyros.de>
URL: https://gitlist.dev/e/553C08D9.9000907%40hogyros.de

```
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


```

## Heiko Voigt, 2015-04-27 12:47

Subject: Re: Cleaning projects with submodules
Message-ID: <20150427124729.GA5399@sandbox-ub1410>
URL: https://gitlist.dev/e/20150427124729.GA5399%40sandbox-ub1410
In-Reply-To: <553C08D9.9000907@hogyros.de>

```
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

```
