git仓库应以单个项目为单位置于xampp的htdocs子目录(如htdocs/myblog),而非整个htdocs;需配置.gitignore排除vendor/、.env等敏感文件,并避免apache运行时文件锁导致sourcetree操作失败。

XAMPP 本身不参与 Git 分支管理,SourceTree 也不关心你用什么本地服务器——只要项目目录是 Git 仓库,它就能管;关键在于你是否把 XAMPP 的 htdocs 目录(或其子目录)正确初始化为 Git 仓库,并避免提交敏感文件。
为什么不能直接把整个 htdocs 当作 Git 仓库
常见错误是:在 XAMPP 安装根目录下,直接对 htdocs 文件夹右键 → “Git Init Here”,然后一股脑提交所有 PHP/JS 文件。这会带来三个实际问题:
-
htdocs里常混着其他项目、测试文件、甚至 XAMPP 自带的示例(如phpinfo.php),提交后污染历史 - 数据库配置文件(如
config.php)若含密码或本地路径,会被推送到远程,造成泄露 - XAMPP 日志、缓存、临时文件(如
apache/logs/、tmp/)可能被意外跟踪,导致冲突或体积膨胀
正确初始化本地 Web 项目的 Git 仓库
应该以「单个项目」为单位建仓,而不是整个 htdocs。比如你要开发一个叫 myblog 的 PHP 站点:
- 在
htdocs下新建独立文件夹:htdocs/myblog - 用 SourceTree → “添加” → 选择
htdocs/myblog路径(不是htdocs) - 首次提交前,务必先写好
.gitignore,至少包含:vendor/node_modules/*.logconfig.local.php.env - 如果项目用 Composer,
composer install后生成的vendor/必须被忽略——否则 SourceTree 会卡在“正在计算差异”
SourceTree 中处理 XAMPP 项目分支的典型操作链
你在 myblog 上开发新功能,流程不是“切分支→改代码→推”,而是要绕开 Apache 运行时干扰:
- 切换分支前,确保浏览器没开着
localhost/myblog——某些 PHP 框架(如 Laravel)会在storage/写缓存,跨分支可能导致白屏 - 新建
feature/login分支后,在 SourceTree 中右键该分支 → “检出”(Checkout),不要点“合并”或“重置” - 提交时,SourceTree 默认勾选“推送更改”,但本地开发阶段建议取消勾选——分支还在验证中,没必要立刻同步到远程
- 若需回滚某次提交(比如改坏了登录逻辑),在日志面板右键对应
commit→ “回滚提交”,它会生成一个反向 commit,比reset更安全,不会丢弃未提交改动
Apache 和 Git 冲突的真实场景与应对
最常被忽略的是文件锁和权限问题,尤其在 Windows 上:
- Apache 正在运行时,SourceTree 可能无法重命名或删除
myblog/cache/下的文件,报错类似:Could not remove 'cache/xxx': Permission denied - 解决方法不是关 Apache——而是让项目自己管理缓存路径,例如 Laravel 中把
storage_path()改为指向../runtime/cache(仓库外),再把该目录加进.gitignore - Mac/Linux 用户要注意:XAMPP 的 Apache 默认以
daemon用户运行,而 SourceTree 以当前用户执行 Git,若chmod不当,会出现“Permission denied (publickey)”以外的权限拒绝,此时需统一文件属主:sudo chown -R $(whoami) htdocs/myblog
真正麻烦的从来不是“怎么点按钮”,而是你有没有把 htdocs 当成开发目录来管理——它只是 Apache 的服务根路径,不是你的项目源码根。Git 仓库必须精确到项目级,且每次分支操作都要预判运行时副作用。











