Git与screen组合下的异常文件行为排查求助
Git与Screen结合使用时文件内容异常切换的排查思路
问题背景
在公司PyTorch深度学习集群的共享磁盘Git仓库中,用户操作后出现异常:处于feature分支时,部分与main分支的差异文件内容自动变为main分支版本。用户操作涉及多Screen会话切换分支,但脚本单独运行或单Screen会话运行均无问题,怀疑是共享磁盘上未维护的备份/例行程序导致,需明确排查方向。
用户操作步骤
- 切换至feature分支
- 启动screen会话:
screen -S feature - 运行依赖繁多、耗时较长的脚本
- 分离该screen会话
- 启动新screen会话:
screen -S main - 切换至main分支
- 分离该screen会话
- 切回feature分支
- 在feature分支上做少量未提交修改
- 等待脚本运行完成
- 仍处于feature分支时,Git显示部分文件内容变为main分支版本(为两分支差异文件)
已知信息
- 脚本仅部分自行编写,维护者能力有限,但单独运行或单Screen会话运行时不会修改文件
- 尝试复现该场景未成功
- Git仓库位于公司共享磁盘,存在未维护的备份或例行程序嫌疑
排查思路
1. 追踪共享磁盘上的定时/例行程序
- 检查系统级定时任务:执行
crontab -l查看当前用户定时任务,遍历/etc/cron.d/、/etc/cron.hourly/等系统定时任务目录,同时排查集群管理工具(如Slurm、PBS)中的定时调度任务 - 查找共享磁盘上的自动备份/同步脚本:搜索磁盘上的.sh/.py脚本,检查是否有自动拉取分支、同步文件、快照备份的逻辑,对比脚本执行时间与用户报告的异常时间是否匹配
- 验证文件系统级同步机制:确认共享磁盘是否采用分布式文件系统(如GlusterFS、NFS),检查是否有后台同步任务或缓存刷新机制导致文件内容被覆盖
2. 验证Git工作区与索引的一致性
- 异常发生时立即执行以下命令并保存输出:
git status:查看文件状态git diff:对比工作区与索引的差异git diff HEAD:对比工作区与当前分支HEAD的差异git ls-files -s:查看索引中文件的状态与哈希值
通过这些输出确认是工作区文件被物理修改,还是Git索引出现异常
- 检查
.git目录权限:执行ls -ld .git及ls -l .git/objects,确认是否有其他用户/进程具备写入权限,导致索引被篡改
3. 排查多Screen会话的环境冲突
- 分别在两个Screen会话中执行
env命令,对比并重点检查与Git、文件系统相关的变量:GIT_DIR、GIT_WORK_TREE、PATH、PWD,确认是否存在环境变量不一致导致的分支识别错误 - 确认用户在切换分支时是否始终处于同一工作目录,排查是否存在误操作进入其他Git仓库路径的情况
4. 检查共享磁盘文件系统异常
- 查看文件系统日志:检查
/var/log/messages、dmesg输出,确认是否存在IO错误、文件系统损坏、缓存一致性问题 - 进行文件系统测试:在共享磁盘创建测试文件,在多Screen会话中分别修改、查看文件内容,验证是否存在无操作情况下文件内容自动变更的问题
5. 追踪脚本运行期间的文件操作
- 脚本运行时,使用
strace追踪文件操作:执行strace -e open,write,unlink -p <脚本进程PID>,记录脚本打开、写入、删除的文件路径,确认是否存在意外修改分支差异文件的行为 - 检查脚本依赖的全局配置:确认脚本是否读取/修改某些全局配置文件,而这些文件在main分支会话中被修改后,间接影响了feature分支的文件内容
内容的提问来源于stack exchange,提问作者MaKaNu
相关产品推荐
相关产品推荐

