DITA用户求助:排除Git跟踪目录但仍供GitHub工作流使用的方法
针对你既要推送HTML文件到远程供GitHub工作流发布,又不想本地每次提交都被大量HTML变更干扰的需求,这里提供两种适合SourceTree用户的方案:
方法一:用skip-worktree标记忽略本地HTML变更(推荐)
这个方法能让Git“假装看不到”你本地对docs/文件的修改,但保留远程的HTML文件追踪,完美适配你的场景:
先确保docs/已被Git跟踪
如果之前已经把docs/提交到远程过,直接跳过这步;如果没有,先在SourceTree里选中docs/所有文件,暂存、提交并推送一次,确保GitHub工作流能获取到文件。设置忽略本地变更的标记
打开SourceTree内置的终端(点击顶部「终端」按钮),执行命令:git update-index --skip-worktree docs/**/*执行后,你本地修改或重新生成的HTML文件就不会再出现在SourceTree的“未暂存变更”列表里了。
更新远程HTML时的操作
当你需要把新生成的HTML推给工作流时:- 先取消标记:在终端执行
git update-index --no-skip-worktree docs/**/* - 在SourceTree里选中docs/所有文件,暂存、提交(提交信息可以写「更新HTML输出」)并推送
- 推送完成后,重新执行第一步的命令恢复标记,避免后续HTML变更再被跟踪
嫌命令麻烦?可以在SourceTree里加自定义操作一键执行:
- 点击「工具」→「选项」→「自定义操作」→「添加」
- 分别添加两个操作:
- 名称:忽略docs本地变更;脚本路径填
git,参数填update-index --skip-worktree docs/**/* - 名称:取消忽略docs本地变更;脚本路径填
git,参数填update-index --no-skip-worktree docs/**/*
- 名称:忽略docs本地变更;脚本路径填
- 之后右键仓库,就能在「自定义操作」里一键调用这两个命令。
- 先取消标记:在终端执行
方法二:用独立分支存储HTML文件
把源码和HTML输出完全分开到两个分支,更清晰,适合长期维护:
创建HTML专用分支
在SourceTree里点击「分支」→「新建分支」,命名比如html-output,基于当前主分支(确保docs/已经在主分支里)。主分支忽略docs/目录
回到主分支,在仓库根目录新建.gitignore文件,添加一行docs/,然后暂存、提交并推送这个文件,这样主分支以后就不会跟踪docs/的任何变更了。更新HTML的流程
- 在主分支修改.dita文件,提交推送
- 切换到
html-output分支,拉取主分支的最新变更(如果需要) - 本地执行DITA转换生成新HTML
- 在
html-output分支里暂存docs/所有文件,提交推送 - 切回主分支继续工作,完全看不到HTML的变更
调整GitHub工作流
把工作流里拉取代码的分支改成html-output,确保从这个分支获取HTML文件发布到Azure。
注意事项
- 方法一中,如果远程的docs/文件被其他人修改,拉取时会触发冲突,这时候需要先取消标记,拉取合并后再重新设置。
- 方法二更适合多人协作场景,分支职责明确,不会互相干扰。
内容的提问来源于stack exchange,提问作者Masu

