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

Re: `git stash --include-untracked` touches .pack files

From
Patrick Steinhardt <ps@pks.im>
Date
Aug 11, 2025, 09:10 UTC
Message-ID
<aJmzgfucZIJf_iQA@pks.im>
In-Reply-To
<2ea19b6b-716b-4736-8dd3-8831056c39f9@gmail.com>
On Wed, Aug 06, 2025 at 09:27:05PM -0500, johnkw wrote:
Show 15 quoted lines
> `git stash --include-untracked` causes the timestamp to be touched for some
> .pack files.  It's not always all .pack files, although I don't see a
> pattern regarding how some survive the operation with the timestamp intact. 
> For a given repo it seems consistent though on the .pack files impacted by
> the issue.
> 
> This breaks backup systems such as rsync, causing pointless churn.
> 
> The issue occurs with or without ".keep" files for the ".pack" files in
> question.
> 
> `git stash` without `--include-untracked` does not have this issue.
> 
> The issue occurs with no untracked files actually even in the repo for
> `--include-untracked` to take action on.

What you probably see here is Git freshening its objects: when Git is asked to write objects into the object database that it already knows about it will freshen the access time of each such object. If the object is stored in a packfile, then the whole packfile is getting freshened.

This is overall an expected outcome, and Git relies on those freshened access times to do garbage collection. So this isn't something that we can change. One _could_ have a look at `save_untracked_files()` and teach it to skip writing objects in case there is nothing to be done. But honestly, I doubt that this would really solve the underlying issue for you, as any other command that writes objects might also cause Git to freshen the packfile.

Patrick
Previous: johnkw
Message 2 of 2 in “`git stash --include-untracked` touches .pack files”
  1. johnkwAug 7, 2025
  2. Patrick SteinhardtAug 11, 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.