例如,git log 可能返回这样的信息
PS> git log
commit ed231a0a0923bd8b601e51e40b5249a56e78674a (HEAD -> master, tag: s2)
Author: fibo
Date: Mon May 31 08:52:41 2021 +0800
r2 mes
使用 PowerShell 捕获这个命令中产生的所有流,但中括号内的内容还是丢失掉了。
PS> Out-String -InputObject ((git log) *>&1)
commit 37aa5208e2d9b78d42bdc649c3c0fa0f2de6c1e0
Author: fibo
Date: Mon May 31 08:56:53 2021 +0800
r2 mes
在 PowerShell 中如何捕获这些信息?
1
oaix 2021-05-31 09:28:44 +08:00
git log --decorate=full
|
2
iovekkk 2021-05-31 09:33:16 +08:00
图形化界面不好吗?
用 sourcetree 好多年了 对 git flow 的支持很赞 |
3
oaix 2021-05-31 09:33:33 +08:00 1
https://git-scm.com/docs/git-log
--decorate[=short|full|auto|no] Print out the ref names of any commits that are shown. If short is specified, the ref name prefixes refs/heads/, refs/tags/ and refs/remotes/ will not be printed. If full is specified, the full ref name (including prefix) will be printed. If auto is specified, then if the output is going to a terminal, the ref names are shown as if short were given, otherwise no ref names are shown. The default option is short. |
4
AndyAO OP @oaix #3
有个地方不太明白,默认的选项是 short,这个是没错的。 但是如果显式使用 git log --decorate=short 那么其中的信息是可以被 PowerShell 捕获的;反之,如果不显式使用,则信息可以被看到,但不能被捕获到变量当中去进行下一步的处理。 这是为什么呢? |
6
oaix 2021-05-31 09:57:52 +08:00
理解文档的意思了,默认值的意思是:--decorate 等效于--decorate=short
|
7
AndyAO OP 现在感觉之所以在 Shell 中获取不到信息,是因为文档上有写到
If auto is specified, then if the output is going to a terminal 那么,如果值为 auto 这些信息会直接输出到终端,而不是 Shell 当然这只是个猜测,我不确定。 |
8
slipper 2021-05-31 10:22:35 +08:00
git log --no-color -1 | awk '{print $0}' OK 嘛
|
9
slipper 2021-05-31 10:26:09 +08:00
还是你想要所有提交信息 git log --no-color | awk '{print $0}'
|
10
jeffreystoke 2021-05-31 12:55:36 +08:00 1
@AndyAO 设置为 auto 会让 git log 先判断 stdout 是不是 tty, 如果是 tty 才会输出 `(HEAD -> master, tag: s2)`
|
11
AndyAO OP @oaix 你的最初判断是没有错的,的确是文档有问题,我向开发人员提交了 Pull Request,今天收到了邮件通知这个 Pull Request 已经被接受了。
https://cdn.jsdelivr.net/gh/Andy-AO/GitHubPictureBed/img/20210607105156.png 感觉我对这类著名开源项目的可靠性有了过高的估计,很多细节其实有不少的错误,从 Pull Request 列表中就可以看出来。 |
13
oaix 2021-06-07 11:35:26 +08:00 1
@AndyAO 看了下这个 PR 的讨论,如他们所说,这里面有 2 个默认值的概念,1:如果没有传 --decorate,那么默认值就是 auto ; 2:如果传了 --decorate,但没有指定 decorate 的值,那么默认值就是 short 。很明显,当前文档说的是情况 2,但其实情况 1 更符合直觉(如你的 PR 所修改的),如果能更进一步,在文档里面把这两个地方都说清楚可能更棒。
|
14
AndyAO OP @oaix 原来是这样,其实后面的讨论没来得及看。
可能是因为第 1 次参与这种邮件列表讨论,需要注意的地方太多,花了很长时间才把信息给发出去,感觉很累,后来看到了相关的后续讨论,也就没有兴趣了。 如果不是你提醒的话,还不清楚「存在两个默认值」这个情况。谢谢。 |
15
AndyAO OP 感觉邮件列表上的讨论还是比较轻松的,对于这个不太起眼的 GitHub 的 Pull Request,维护者也发言了,后来我会用邮件列表了,在这里面发了个比较普通的问题,他也是第 1 个回复的,没想到他的时间还挺宽裕的,对于这些问题还来评论评论。
|