Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

merge_tree(symlinks=True) cannot overwrite an existing destination symlink

未关闭 适合新手
#263 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
76/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
python

调研方向

从 Path.merge_tree 的 Python 实现开始,使用 symlinks=True 重现所提供的示例。跟踪符号链接目标的处理,然后验证第二次 merge 是否成功,以及目标位置中已更改的目标、文件和目录是否按描述被替换。

由索引模型根据 Issue 内容生成。

描述

When merge_tree is used to re-sync a directory tree that contains symbolic links (for example a deploy or backup copy run more than once), the second call fails:

FileExistsError: [Errno 17] File exists: .../file.txt -> .../link.txt

Regular files are overwritten via copy2, and the docstring says merge_tree copies "overwriting existing contents in dst". Symlinks take a different path that calls os.symlink without replacing dest, so a repeated merge cannot complete.

from path import Path

src, dst = Path('A'), Path('B')
src.mkdir(); dst.mkdir()
(src / 'file.txt').write_text('hello')
(src / 'file.txt').symlink(src / 'link.txt')
src.merge_tree(dst, True)
src.merge_tree(dst, True)  # FileExistsError

Expected: the second merge succeeds and the destination symlink is replaced (including when the link target has changed, or when dest is a file/directory with the same name).

主要语言
Python
星标
1.1k
派生
155
PR 合并指标
30 天内没有已合并 PR

环境准备

我们还没有检查这个项目的环境配置文件。先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

jaraco/path 的其他 Issue

查看 jaraco/path 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。