Merge branch 'nd/do-not-move-worktree-manually' into maint
"git worktree" had a broken code that attempted to auto-fix possible inconsistency that results from end-users moving a worktree to different places without telling Git (the original repository needs to maintain backpointers to its worktrees, but "mv" run by end-users who are not familiar with that fact will obviously not adjust them), which actually made things worse when triggered. * nd/do-not-move-worktree-manually: worktree: stop supporting moving worktrees manually worktree.c: fix indentation
This commit is contained in:
@ -32,11 +32,9 @@ The working tree's administrative files in the repository (see
|
|||||||
`git worktree prune` in the main or any linked working tree to
|
`git worktree prune` in the main or any linked working tree to
|
||||||
clean up any stale administrative files.
|
clean up any stale administrative files.
|
||||||
|
|
||||||
If you move a linked working tree to another file system, or
|
If you move a linked working tree, you need to manually update the
|
||||||
within a file system that does not support hard links, you need to run
|
administrative files so that they do not get pruned automatically. See
|
||||||
at least one git command inside the linked working tree
|
section "DETAILS" for more information.
|
||||||
(e.g. `git status`) in order to update its administrative files in the
|
|
||||||
repository so that they do not get automatically pruned.
|
|
||||||
|
|
||||||
If a linked working tree is stored on a portable device or network share
|
If a linked working tree is stored on a portable device or network share
|
||||||
which is not always mounted, you can prevent its administrative files from
|
which is not always mounted, you can prevent its administrative files from
|
||||||
@ -137,6 +135,13 @@ thumb is do not make any assumption about whether a path belongs to
|
|||||||
$GIT_DIR or $GIT_COMMON_DIR when you need to directly access something
|
$GIT_DIR or $GIT_COMMON_DIR when you need to directly access something
|
||||||
inside $GIT_DIR. Use `git rev-parse --git-path` to get the final path.
|
inside $GIT_DIR. Use `git rev-parse --git-path` to get the final path.
|
||||||
|
|
||||||
|
If you move a linked working tree, you need to update the 'gitdir' file
|
||||||
|
in the entry's directory. For example, if a linked working tree is moved
|
||||||
|
to `/newpath/test-next` and its `.git` file points to
|
||||||
|
`/path/main/.git/worktrees/test-next`, then update
|
||||||
|
`/path/main/.git/worktrees/test-next/gitdir` to reference `/newpath/test-next`
|
||||||
|
instead.
|
||||||
|
|
||||||
To prevent a $GIT_DIR/worktrees entry from being pruned (which
|
To prevent a $GIT_DIR/worktrees entry from being pruned (which
|
||||||
can be useful in some situations, such as when the
|
can be useful in some situations, such as when the
|
||||||
entry's working tree is stored on a portable device), add a file named
|
entry's working tree is stored on a portable device), add a file named
|
||||||
|
12
setup.c
12
setup.c
@ -451,17 +451,6 @@ static int check_repository_format_gently(const char *gitdir, int *nongit_ok)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void update_linked_gitdir(const char *gitfile, const char *gitdir)
|
|
||||||
{
|
|
||||||
struct strbuf path = STRBUF_INIT;
|
|
||||||
struct stat st;
|
|
||||||
|
|
||||||
strbuf_addf(&path, "%s/gitdir", gitdir);
|
|
||||||
if (stat(path.buf, &st) || st.st_mtime + 24 * 3600 < time(NULL))
|
|
||||||
write_file(path.buf, "%s", gitfile);
|
|
||||||
strbuf_release(&path);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Try to read the location of the git directory from the .git file,
|
* Try to read the location of the git directory from the .git file,
|
||||||
* return path to git directory if found.
|
* return path to git directory if found.
|
||||||
@ -531,7 +520,6 @@ const char *read_gitfile_gently(const char *path, int *return_error_code)
|
|||||||
error_code = READ_GITFILE_ERR_NOT_A_REPO;
|
error_code = READ_GITFILE_ERR_NOT_A_REPO;
|
||||||
goto cleanup_return;
|
goto cleanup_return;
|
||||||
}
|
}
|
||||||
update_linked_gitdir(path, dir);
|
|
||||||
path = real_path(dir);
|
path = real_path(dir);
|
||||||
|
|
||||||
cleanup_return:
|
cleanup_return:
|
||||||
|
@ -176,10 +176,10 @@ struct worktree **get_worktrees(void)
|
|||||||
if (!strcmp(d->d_name, ".") || !strcmp(d->d_name, ".."))
|
if (!strcmp(d->d_name, ".") || !strcmp(d->d_name, ".."))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ((linked = get_linked_worktree(d->d_name))) {
|
if ((linked = get_linked_worktree(d->d_name))) {
|
||||||
ALLOC_GROW(list, counter + 1, alloc);
|
ALLOC_GROW(list, counter + 1, alloc);
|
||||||
list[counter++] = linked;
|
list[counter++] = linked;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user