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

Re: A cross between 'git stash create' and 'git stash push --include-untracked'?

From
Patrick Steinhardt <ps@pks.im>
Date
Mar 31, 2025, 07:47 UTC
Message-ID
<Z-pIrCp6ZewWuPI0@pks.im>
In-Reply-To
<d8f596cfac9b001350b8b5e408067bb4caa073a7.camel@gmail.com>
On Sun, Mar 30, 2025 at 05:37:42PM +0300, Alexander Shpilkin wrote:
Show 21 quoted lines
> Hi,
> 
> I'm trying to write a script for my use that would run before every
> invocation of 'make' and record the working tree state at that point. 
> Stripping out the boring parts, it is basically just
> 
>     git update-ref --create-reflog refs/build $(git stash create)
> 
> but the problem is that what I want is less like 'git stash create' and
> more like 'git stash create --include-untracked', in case there are any
> new and as yet untracked source files that are nevertheless picked up
> by the build system.
> 
> Of course, that does not exist and, because of the syntax of 'git stash
> create', cannot exist.  I've looked at the code in builtin/stash.c and
> it looks like there are only two callers of do_create_stash(): one is
> create_stash() and hardcodes the include_untracked argument to zero,
> the other is do_push_stash() and (assuming I try to undo its effects
> with 'git stash pop' afterwards) will potentially destroy my working
> tree's mtimes and cause more rebuilding than necessary.  So it seems
> like I'm stuck here.
Indeed.
> Any suggestions?

I guess the obvious answer here is to extend `git stash create` so that it knows to handle "--include-untracked".

Unfortunately, it wouldn't be quite as simple as just wiring up the command line option and passing the flag to `do_create_stash()` because `save_untracked_files()` saves untracked files by modifying the repository's index. Consequentially, we would still end up modifying the repository, even though the checked out files would ultimately remain unmodified.

I think we'd have to teach `save_untracked_files()` to do the changes on an in-memory index instead of invoking git-update-index(1). And if it knew to do that we could easily wire it up for `git stash create` and thus implement your usecase.

I won't be working on this myself as I'm short on time, but I assume that patches would very much be welcome.

Thanks!
Patrick
Previous: Alexander Shpilkin
Message 2 of 2 in “A cross between 'git stash create' and 'git stash push --include-untracked'?”
  1. Alexander ShpilkinMar 30, 2025
  2. Patrick SteinhardtMar 31, 2025

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.