Worktree manual move support is actually gone in 618244e160 (worktree: stop supporting moving worktrees manually - 2016-01-22). Before that, this gitdir could be updated often when the worktree is accessed. That keeps the worktree from being pruned by this logic. "git worktree move" is coming so we don't really need this, but since it's easy to do, perhaps we could keep supporting manual worktree move a bit longer. Notice that when a worktree is active, the "index" file should be updated pretty often in common case. The logic is updated to check for index mtime to see if the worktree is alive. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- builtin/worktree.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/builtin/worktree.c b/builtin/worktree.c index 60440c4106..4d4404e97f 100644 --- a/builtin/worktree.c +++ b/builtin/worktree.c @@ -101,6 +101,9 @@ static int prune_worktree(const char *id, struct strbuf *reason) if (!file_exists(path)) { free(path); if (st.st_mtime <= expire) { + if (!stat(git_path("worktrees/%s/index", id), &st) && + st.st_mtime > expire) + return 0; strbuf_addf(reason, _("Removing worktrees/%s: gitdir file points to non-existent location"), id); return 1; } else { -- 2.16.1.435.g8f24da2e1a