{"thread":{"id":"44448","subject":"Cleaning ignored files","startedAt":"2016-11-09T18:24:09Z","lastAt":"2016-11-10T09:20:06Z","messageCount":2,"participants":["Roman Terekhov","John Szakmeister"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"305641","messageId":"CALbGNxUahc0b151niqS3Qd6N8wapY5RWJs1w0ZSf6ZW1=id6vA@mail.gmail.com","threadId":"44448","inReplyTo":null,"subject":"Cleaning ignored files","fromName":"Roman Terekhov","fromEmail":"roman.terekhov@gmail.com","sentAt":"2016-11-09T18:23:33Z","receivedAt":"2016-11-09T18:24:09Z","isPatch":false,"sender":{"key":"roman.terekhov@gmail.com","avatar":null},"body":"Hi,\n\nI want to ask about git clean -dXf command behaviour.\n\nI do the following:\n\n$ mkdir gitignore_test\n$ cd gitignore_test/\n$ git init\nInitialized empty Git repository in ~/gitignore_test/.git/\n\n$ echo *.sln > .gitignore\n$ git add .gitignore\n$ git commit -m \"add gitignore\"\n[master (root-commit) ef78a3c] add gitignore\n 1 file changed, 1 insertion(+)\n create mode 100644 .gitignore\n\n$ mkdir src\n$ touch test.sln\n$ touch src/test.sln\n$ tree\n.\n├── src\n│   └── test.sln\n└── test.sln\n\n1 directory, 2 files\n\n$ git clean -dXf\nRemoving test.sln\n\n$ tree\n.\n└── src\n    └── test.sln\n\n1 directory, 1 file\n\n\nWhy git clean -dXf does not remove all my test.sln files, but just one of them?\n\nRoman Terekhov\n"},{"id":"305670","messageId":"CAEBDL5VWpnoQdD6TJgdLBgFbb9HZzwYyLDbVz1O3s5As5otLQg@mail.gmail.com","threadId":"44448","inReplyTo":"CALbGNxUahc0b151niqS3Qd6N8wapY5RWJs1w0ZSf6ZW1=id6vA@mail.gmail.com","subject":"Re: Cleaning ignored files","fromName":"John Szakmeister","fromEmail":"john@szakmeister.net","sentAt":"2016-11-10T09:19:57Z","receivedAt":"2016-11-10T09:20:06Z","isPatch":false,"sender":{"key":"john@szakmeister.net","avatar":"https://avatars.githubusercontent.com/u/448087?v=4"},"body":"On Wed, Nov 9, 2016 at 1:23 PM, Roman Terekhov <roman.terekhov@gmail.com> wrote:\n> Hi,\n>\n> I want to ask about git clean -dXf command behaviour.\n>\n> I do the following:\n>\n> $ mkdir gitignore_test\n> $ cd gitignore_test/\n> $ git init\n> Initialized empty Git repository in ~/gitignore_test/.git/\n>\n> $ echo *.sln > .gitignore\n> $ git add .gitignore\n> $ git commit -m \"add gitignore\"\n> [master (root-commit) ef78a3c] add gitignore\n>  1 file changed, 1 insertion(+)\n>  create mode 100644 .gitignore\n>\n> $ mkdir src\n> $ touch test.sln\n> $ touch src/test.sln\n> $ tree\n> .\n> ├── src\n> │   └── test.sln\n> └── test.sln\n>\n> 1 directory, 2 files\n>\n> $ git clean -dXf\n> Removing test.sln\n>\n> $ tree\n> .\n> └── src\n>     └── test.sln\n>\n> 1 directory, 1 file\n>\n>\n> Why git clean -dXf does not remove all my test.sln files, but just one of them?\n\nsrc/ is not under version control, and currently git does not descend\ninto unknown folders to remove ignored files.  If you had a tracked or\nstaged file in src/, then git would descend into src/ and remove\ntest.sln as expected.  In your example, try doing:\n\n$ touch src/foo.c\n$ git add src/foo.c\n$ git clean -dXf\nRemoving src/test.sln\nRemoving test.sln\n\nHope that helps!\n\n-John\n"}]}