git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Pathspec does not accept / does not warn for specific pathspecs

From
ΣΝΣταύρος Ντέντος <stdedos@gmail.com>
Date
Feb 26, 2021, 20:44 UTC
Message-ID
<CAHMHMxVc8Q1waPQbec-UUN9jcEUgtXOdHymAKigtNj+tc=Wwvg@mail.gmail.com>
Hello there,

as I was trying to use git-archive to ... well, archive some artifacts. So I called: git archive HEAD -o p.zip --prefix=p/

Then, I noticed that .gitignore files from the repo were packed (and a couple of others, but we don't care about that right now). I wanted to exclude all .gitignore files (there is `/.gitignore` and `/resources/.gitignore`). So I did: git archive HEAD -o p.zip --prefix=p/ -- ':!.gitignore'

I noticed that the second-level .gitignore file was still included. I started thinking that this is not a .gitignore pathspec, but it matches a literal file. I don't know why at-the-time I accepted that, since, if I write `.ignoreFile` at a `.gitignore`, it would exclude any `.ignoreFile` at any level. So I did: git archive HEAD -o p.zip --prefix=p/ -- ':!/.gitignore'

Which, as expected, did not change anything; and I followed up with: git archive HEAD -o p.zip --prefix=p/ -- ':!**/.gitignore'

Then, I noticed some weird behavior. The second-level `.gitignore` was getting ignored, but not the first one! Someone at the chat indicated that, the `**` was _magically_ interpreted as `*`, which is obvious to me why it won't help. So, they suggested: git archive HEAD -o p.zip --prefix=p/ -- ':!(glob)**/.gitignore'

Which lead to **both of the .gitignores** to be included. And then I was baffled. Now I know (I guess) that the pathspec magic was `:!`, and I tried to match against a `(glob)**/.gitignore`, i.e. `(glob)*/.gitignore`, which, of course, it doesn't exist in any form.

And I wonder: Why doesn't `git archive ... -- ` understand `:!.gitignore` as a .gitignore file would do (minus the `:`)? Why doesn't `git archive ... -- ` understand `:!**/.gitignore` as a .gitignore file would do (minus the `:`)? Is there some reason that `git archive ... -- ` doesn't understand `:!(glob)**/.gitignore`? It doesn't sound awfully complicated, or risking a lot of regression (a folder starting with `(`, and containing valid pathspec long forms IMHO is rare), or Is there some reason that `git archive ... -- ` doesn't warn me that `:!(glob)**/.gitignore` is invalid (and maybe I meant `(exclude,glob)`)?

With regards, Ntentos Stavros

Next: Junio C Hamano
Message 1 of 43 in “Pathspec does not accept / does not warn for specific pathspecs”
  1. Σταύρος ΝτέντοςFeb 26, 2021
  2. Junio C HamanoFeb 26, 2021
  3. 0/1 pathspec: warn for a no-glob entry that contains `**`Σταύρος Ντέντος, Mar 25, 2021
  4. 1/1 pathspec: warn for a no-glob entry that contains `**`Σταύρος Ντέντος, Mar 25, 2021
  5. Bagas SanjayaMar 25, 2021
  6. Bagas SanjayaMar 25, 2021
  7. 1/1 pathspec: warn for a no-glob entry that contains `**`Stavros Ntentos, Mar 25, 2021
  8. Junio C HamanoMar 25, 2021
  9. 0/1 pathspec: warn for a no-glob entry that contains `**`Σταύρος Ντέντος, Mar 25, 2021
  10. 1/1 pathspec: warn for a no-glob entry that contains `**`Σταύρος Ντέντος, Mar 25, 2021
  11. Junio C HamanoMar 26, 2021
  12. Eric SunshineMar 26, 2021
  13. Junio C HamanoMar 26, 2021
  14. Jeff KingMar 26, 2021
  15. Stavros NtentosMar 26, 2021
  16. 1/2 pathspec: warn for a no-glob entry that contains `**`Stavros Ntentos, Mar 26, 2021
  17. 2/2 pathspec: convert no-glob warn to adviceStavros Ntentos, Mar 26, 2021
  18. 0/1 pathspec: warn: long and short forms are incompatibleΣταύρος Ντέντος, Mar 26, 2021
  19. 2/2 fixup! pathspec: warn: long and short forms are incompatibleΣταύρος Ντέντος, Mar 26, 2021
  20. Bagas SanjayaMar 26, 2021
  21. Stavros NtentosMar 26, 2021
  22. 3/3 squash! fixup! pathspec: warn: long and short forms are incompatibleStavros Ntentos, Mar 28, 2021
  23. 1/2 pathspec: warn: long and short forms are incompatibleΣταύρος Ντέντος, Mar 26, 2021
  24. Jeff KingMar 26, 2021
  25. Stavros NtentosMar 26, 2021
  26. Jeff KingMar 27, 2021
  27. Junio C HamanoMar 27, 2021
  28. Stavros NtentosMar 28, 2021
  29. 0/1 pathspec: warn: long and short forms are incompatibleΣταύρος Ντέντος, Mar 26, 2021
  30. pathspec: warn: long and short forms are incompatibleΣταύρος Ντέντος, Mar 26, 2021
  31. pathspec: advice: long and short forms are incompatibleStavros Ntentos, Apr 3, 2021
  32. Junio C HamanoApr 4, 2021
  33. Σταύρος ΝτέντοςApr 11, 2021
  34. Junio C HamanoApr 11, 2021
  35. Σταύρος ΝτέντοςApr 11, 2021
  36. pathspec: advice: long and short forms are incompatibleStavros Ntentos, Mar 28, 2021
  37. Junio C HamanoMar 28, 2021
  38. Junio C HamanoMar 30, 2021
  39. Stavros NtentosMar 30, 2021
  40. Stavros NtentosMar 30, 2021
  41. Junio C HamanoMar 30, 2021
  42. pathspec: advice: long and short forms are incompatibleStavros Ntentos, Apr 3, 2021
  43. pathspec: advice: long and short forms are incompatibleStavros Ntentos, Apr 3, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.