Ubuntu 中文乱码问题
- 解决方案
1
git config --global core.quotepath false
Windows 拉取项目后无法 checkout
表现:拉取远程分支后无法进行 checkout 操作,具体错误表现为
1
fatal:unable to checkout working tree
原因:一般是因为文件名命名包含非法字符导致,比如亲测文件名包含
|就会出错(通常是有些不适用 Windows 且命名不规范的作者容易出现该错误)解决方案:修改文件名称,将非法字符去掉
文件权限导致记录更改
- 现象:文件权限修改(如执行权限改为无执行权限)也会导致文件被默认为修改,此时文件内容没有任何修改
- 具体细节:在使用
git diff时看到的old mode 100755和new mode 100644,核心是 Git 检测到文件的执行权限发生了变化,而非文件内容的修改755:代表文件拥有执行权限(所有者可读可写可执行,组和其他用户可读可执行),常见于脚本、可执行程序644:代表文件无执行权限(所有者可读可写,组和其他用户仅可读),是普通文论文件的默认权限- 注:权限位规则:
755(可执行)= rwxr-xr-x,644(不可执行)= rw-r–r–
- TLDR:有意修改则直接提交,误改可恢复权限,跨系统开发建议关闭
core.filemode忽略权限检测
补充问题:为什么会出现这个差异?
- 常见原因有 2 种:
- 1)手动修改了权限:可能通过
chmod命令(如chmod 644 文件名)修改了文件权限 - 2)系统/工具自动调整:不同操作系统(如 Windows 和 Linux)、Git 配置或编辑器可能自动调整权限
- 1)手动修改了权限:可能通过
解法1:接受权限变更并提交(如果是有意修改)
- 如果这个权限修改是刻意想要的,直接正常提交即可:
1
2
3
4
5# 添加权限变更的文件到暂存区
git add 你的文件名
# 提交变更(备注说明权限修改)
git commit -m "调整xxx文件权限:从100755改为100644,移除执行权限"
忽略权限变更(避免 Git 追踪权限)
如果只是误操作,或不想让 Git 检测权限变化(比如跨系统开发时),可以配置 Git 忽略文件权限:
1
2
3
4
5
6
7
8# 临时忽略(仅当前仓库生效,关闭终端/切换仓库失效)
git config core.filemode false
# 永久忽略(当前仓库全局生效)
git config --local core.filemode false
# 全局忽略(所有Git仓库生效)
git config --global core.filemode false- 配置后,Git 就不会再检测文件权限的变化,
git diff也不会再显示这类差异
- 配置后,Git 就不会再检测文件权限的变化,
恢复原有权限(撤销误改的权限)
- 如果想把文件权限改回原来的(如
100755),执行:1
2
3
4
5# 恢复为可执行权限(755)
chmod 755 你的文件名
# 验证权限是否恢复
ls -l 你的文件名 # 输出中权限列会显示 -rwxr-xr-x