Skip to content

Commit

Permalink
do not overwrite untracked symlinks
Browse files Browse the repository at this point in the history
Git traditionally overwrites untracked symlinks silently. This will
generally not cause massive data loss, but it is inconsistent with
the behavior for regular files, which are not silently overwritten.

With this change, git refuses to overwrite untracked symlinks by
default. If the user really wants to overwrite the untracked
symlink, he has git-clean and git-checkout -f at his disposal.

Signed-off-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Clemens Buchacher authored and gitster committed Feb 22, 2011
1 parent 2fe26b7 commit 1d718a5
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 4 deletions.
2 changes: 1 addition & 1 deletion symlinks.c
Expand Up @@ -223,7 +223,7 @@ int check_leading_path(const char *name, int len)
int flags;
int match_len = lstat_cache_matchlen(cache, name, len, &flags,
FL_SYMLINK|FL_NOENT|FL_DIR, USE_ONLY_LSTAT);
if (flags & (FL_SYMLINK|FL_NOENT))
if (flags & FL_NOENT)
return 0;
else if (flags & FL_DIR)
return -1;
Expand Down
14 changes: 11 additions & 3 deletions t/t6035-merge-dir-to-symlink.sh
Expand Up @@ -17,13 +17,21 @@ test_expect_success SYMLINKS 'create a commit where dir a/b changed to symlink'
git commit -m "dir to symlink"
'

test_expect_success SYMLINKS 'keep a/b-2/c/d across checkout' '
test_expect_success SYMLINKS 'checkout does not clobber untracked symlink' '
git checkout HEAD^0 &&
git reset --hard master &&
git rm --cached a/b &&
git commit -m "untracked symlink remains" &&
git checkout start^0 &&
test -f a/b-2/c/d
test_must_fail git checkout start^0
'

test_expect_success SYMLINKS 'a/b-2/c/d is kept when clobbering symlink b' '
git checkout HEAD^0 &&
git reset --hard master &&
git rm --cached a/b &&
git commit -m "untracked symlink remains" &&
git checkout -f start^0 &&
test -f a/b-2/c/d
'

test_expect_success SYMLINKS 'checkout should not have deleted a/b-2/c/d' '
Expand Down

0 comments on commit 1d718a5

Please sign in to comment.