如何让git reset(或其他方法)移除空目录?
如何让git reset(或其他方法)移除空目录?
嗨,这个问题我太熟了!其实核心原因是Git从设计上就不跟踪空目录,所以git reset --hard这类操作只会管那些Git已经记录过的文件,完全不会搭理那些后来新增的空文件夹——毕竟Git根本不知道它们存在嘛。
给你两个适配你Ansible自动化场景的解决方案:
组合Git命令一步到位
你可以在git reset --hard $ref之后,紧接着执行:git clean -fd解释下这个命令:
-f:强制删除未跟踪的文件(避免交互确认,刚好适合你的无人工干预场景)-d:不光删未跟踪的文件,连未跟踪的目录(包括空目录)一起删掉
这俩命令连起来,先把已跟踪的文件重置到指定的分支/标签状态,再把所有Git没记录的内容(不管是新增的文件还是空文件夹)全部清掉,完美回到你想要的干净状态。
用系统命令单独清理空目录
如果不想用git clean(比如担心误删某些你想保留的未跟踪文件?不过看你的需求应该不需要),也可以在reset之后用find命令单独删空目录:find . -type d -empty -delete这个命令会在当前仓库目录下递归查找所有空目录,然后直接删除。在Ansible里用shell模块执行就行,很方便。
提醒下:如果用git clean -fd,一定要确保你确实想删掉所有未跟踪的内容——它会把所有Git没记录的文件、文件夹(不管空不空)都删干净,刚好匹配你“完全回到指定版本状态”的需求,所以这个其实是最推荐的方案,和你的自动化流程适配度拉满。
备注:内容来源于stack exchange,提问作者jeremywat
相关产品推荐
相关产品推荐

