On Fri, Jan 12, 2024 at 2:37 PM Junio C Hamano <gitster@xxxxxxxxx> wrote: > > Raul Rangel <rrangel@xxxxxxxxxx> writes: > > > I'm trying to copy my current git worktree to a new directory, while > > including all modified and untracked files, but excluding any ignored > > files. > > Curiously missing from the above is "unmodified". You only talked > about modified, untracked, and ignored, but what do you want to do > with them? > > As you are grabbing the files from the working tree, I suspect that > you do not want to base your decision on what is in the index, which > means that ls-files might be a wrong tool for the job. Thanks for this insight. I ended up using `git ls-files` and `--ignored` to print out all the files that I want to ignore, and I converted that into a `find` exclusion list. Here is the final command: $ git ls-files --others --ignored --exclude-standard --directory | (printf "%s\n" \( -path ./.git; sed -e 's/^/.\//' -e 's/\/$//' -e 's/^/-o\n-path\n/'; printf "%s\n" \) -prune -o ! -type d -print0 ) | xargs --exit find . | xargs -0 --max-procs 0 cp --parents --no-dereference -t /tmp/clone This is actually a lot faster than I would have expected. Parallelizing the `cp` cuts the time down dramatically. Thanks again! p.s., Sorry for the resend. I forgot to send a plain text to the mailing list.