如何用 Git MCP Server 的 git_log 日期过滤查询提交记录(ISO 8601 与相对日期)
2026/9/9 18:56:03 网站建设 项目流程

如何用 Git MCP Server 的 git_log 日期过滤查询提交记录(ISO 8601 与相对日期)

【免费下载链接】serversModel Context Protocol Servers项目地址: https://gitcode.com/GitHub_Trending/se/servers

如果你需要在 Claude Desktop、VS Code 或 Zed 等 MCP 客户端里,只查看某个 Git 仓库在特定时间段内的提交记录(例如"昨天以来的改动"或"2024 年 1 月 15 日之后的提交"),可以用servers仓库中src/git目录下的 mcp-server-git。它的git_log工具支持通过start_timestampend_timestamp两个参数做日期过滤,接受 ISO 8601 时间戳、相对日期(如2 weeks agoyesterday)和绝对日期(如2024-01-15Jan 15 2024),返回带 hash、作者、日期和 message 的提交条目。

本文覆盖:安装并接入服务器、配置客户端、用三种日期格式调用git_log、判断返回结果,以及日期参数的已知限制。前提是你已有一个本地的 Git 仓库,且系统满足 pyproject.toml 中声明的requires-python = ">=3.10"

准备条件:安装 mcp-server-git

README 给出两种安装方式,推荐 uv:

  • uv(推荐):无需单独安装,直接用uvx运行mcp-server-git
  • pip
pip install mcp-server-git

安装后可以用python -m mcp_server_git直接以脚本方式运行。如果你打算用 Docker 方式,则按 README 的 Build 一节构建镜像:

cd src/git docker build -t mcp/git .

把服务器接入你的 MCP 客户端

以 Claude Desktop 为例,编辑claude_desktop_config.json。用 uvx 时配置如下(path/to/git/repo替换成你本地仓库的实际路径):

"mcpServers": { "git": { "command": "uvx", "args": ["mcp-server-git", "--repository", "path/to/git/repo"] } }

用 pip 安装时对应改为:

"mcpServers": { "git": { "command": "python", "args": ["-m", "mcp_server_git", "--repository", "path/to/git/repo"] } }

--repository参数把服务器限定在指定仓库上。如果不传该参数,服务器会尝试从客户端的 roots 能力里发现可用仓库(见 server.py 的list_repos),且此时对repo_path不做白名单限制;配置了--repository后,传入的repo_path必须是该仓库本身或其子目录,否则会报Repository path ... is outside the allowed repository错误。

VS Code 的写法类似,把配置加到用户级mcp.json或工作区的.vscode/mcp.json

{ "servers": { "git": { "command": "uvx", "args": ["mcp-server-git"] } } }

Zed 则在settings.jsoncontext_servers中加入mcp-server-git条目,具体见 README 的 Usage with Zed 一节。

不接客户端、直接调试的话,可以用 MCP inspector:

npx @modelcontextprotocol/inspector uvx mcp-server-git

调用 git_log 并传递日期参数

git_log的输入定义(server.py 的GitLog模型)如下:

参数类型说明
repo_pathstring,必填Git 仓库路径
max_countnumber,可选,默认 10最多返回的提交条数
start_timestampstring,可选过滤起始时间
end_timestampstring,可选过滤结束时间

start_timestamp/end_timestamp都接受三类写法(以start_timestamp为例):

{ "repo_path": "/your/git/repo", "start_timestamp": "2024-01-15T14:30:25", "end_timestamp": "2024-02-01T00:00:00", "max_count": 20 }

上面的 ISO 8601 写法可以换成相对日期或绝对日期:

  • ISO 8601:2024-01-15T14:30:25
  • 相对日期:2 weeks agoyesterday
  • 绝对日期:2024-01-15Jan 15 2024

两个参数都可以只传一个,例如只传start_timestamp: "yesterday"就是"查昨天以来的提交"。repo_path在示例中用/your/git/repo占位,替换为你本机仓库的实际路径即可。

底层是怎么过滤的

日期过滤路径的实际实现在 server.py:只要start_timestampend_timestamp任一存在,工具就把它们分别转成git log--since--until参数执行,输出按--format=%H%n%an%n%ad%n%s%n解析成 4 行一组(hash、作者、日期、message)。两个时间参数都不传时,走的是另一条不做日期过滤的路径,直接用repo.iter_commits(max_count=max_count)取最近提交。也就是说,max_count在两条路径下都是"最多显示几条"的上限。

如何判断调用成功

git_log的返回是一个提交条目数组(工具标注为只读:readOnlyHint=True,见 server.py)。最终推送给客户端的文本以Commit history:开头,每条提交的格式为:

Commit history: Commit: <commit hash> Author: <作者名> Date: <日期> Message: <提交说明>

判断标准很简单:返回内容中每条记录都应同时包含Commit:Author:Date:Message:四段(这一点在 test_server.py 的test_git_logtest_git_log_default中被显式断言)。如果你在 inspector 或客户端里看到Commit history:前缀加完整四段条目,说明调用成功;条目中的Date:值应落在你给定的时间窗口内。

另外,在 macOS 上运行 Claude Desktop 时,tail -n 20 -f ~/Library/Logs/Claude/mcp*.log可以查看服务器日志,用于排查调用异常,这来自 README 的 Debugging 一节。

日期参数的限制与常见失败

结合实现和测试,有两个已知的边界需要知道:

  1. 时间戳不能以-开头。实现里对两个参数都做了注入防护,以-开头的值会直接抛ValueError,错误信息形如Invalid start_timestamp: '<值>' - cannot start with '-'。这由 test_server.py 的test_git_log_rejects_timestamp_flag_injection覆盖。如果你的日期字符串(例如某些系统的--date风格写法)以短横线开头,需要改成 ISO 8601 或文档列出的其他格式。
  2. 过滤路径受max_count截断。日期窗口内的提交多于max_count时,只返回前max_count条(实现中len(log) < max_count即停止累积),需要更多结果时把max_count调大。

README 同时注明 mcp-server-git 目前处于早期开发阶段,功能和可用工具可能随版本变化,升级后建议重新核对参数说明。

下一步

拿到某条提交的 hash 后,可以继续用同一服务器的git_show工具查看该提交的完整内容和 diff(输入repo_pathrevision),git_branch则可以按是否包含某个 commit sha 来筛选分支,参数说明都在 README 的 Tools 列表里。

【免费下载链接】serversModel Context Protocol Servers项目地址: https://gitcode.com/GitHub_Trending/se/servers

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询