我正在为一个git blame
用于检索文件信息的包(Python >= 3.5)做出贡献。我正在努力用仅支持我们实际需要的一小部分功能的自定义代码替换GitPython依赖项(并以我们实际需要的形式提供数据)。
我发现这git blame -lts
最接近我的需要,即检索文件中每一行的提交 SHA 和行内容。这给了我这样的输出
82a3e5021b7131e31fc5b110194a77ebee907955 books/main/docs/index.md 5) Softwareplattform [ILIAS](https://www.ilias.de/), die an zahlreichen
我已经处理了这个
line_pattern = re.compile('(.*?)\s.*\s*\d\)(\s*.*)')
for line in cmd.stdout():
m = line_pattern.match(line)
if m:
sha = m.group(1)
content = m.group(2).strip()
效果很好。然而,该软件包的维护者正确地警告说:“这可能会为非常特定的用户组引入难以调试的错误。可能需要在多个 OS 和 GIT 版本中进行大量的单元测试。”
我之所以采用我的方法是因为我发现git blame --porcelain
解析的输出有些乏味。
30ed8daf1c48e4a7302de23b6ed262ab13122d31 1 1 1
author XY
author-mail <XY>
author-time 1580742131
author-tz +0100
committer XY
committer-mail <XY>
committer-time 1580742131
committer-tz +0100
summary Stub-Outline-Dateien
filename home/docs/README.md
hero: abcdefghijklmnopqrstuvwxyz
82a3e5021b7131e31fc5b110194a77ebee907955 18 18
82a3e5021b7131e31fc5b110194a77ebee907955 19 19
---
82a3e5021b7131e31fc5b110194a77ebee907955 20 20
...
我不喜欢这种对字符串列表的迭代所涉及的管家工作。
我的问题是:
1)我应该更好地使用--porcelain
输出,因为它明确用于机器消耗吗?2) 我可以期望这种格式比 Git 版本和操作系统更强大吗?我是否可以假设以 TAB 字符开头的行是内容行,这是源行的最后输出行,并且该选项卡之后的任何内容都是原始行内容?