Git 在 Ruby 脚本中使用漂亮格式时,提交修订 ID 为五个字符长
Git commit revision id to be five chars long when using pretty format in Ruby script
我的代码如下
system('git log --pretty=format:[%h]: %an')
其中 %h 给出了提交的修订 ID,长度为七个字符,%an 是作者姓名。
我的问题是我想要一个五位数的修订 ID 而不是七位数,但我找不到任何形式的标志。
--date=iso-strict
或其他任何方式。
我该怎么做?
7 位数是默认值,也是普遍接受的最小值,以确保中等规模项目的唯一性。任何不足都会有发生碰撞的风险。如果你想trim它你可以问:
--abbrev=5
如果 5 位数的值不唯一,这可能会被 git
命令否决。将此值视为 最小值 而不是最大值。
您可以通过 git log --help
阅读更多内容。
请注意,您通常希望分解 system
的参数以避免它们之间的混淆:
system("git", "--log", "--pretty-format=...")
当传入任意文件名时,这一点尤其必要,因为 shell 可能会以危险的方式解释这些文件名。
塔德曼回答快完成了。然而,我在 git 日志的手册页上加了红色,并在格式部分发现了一些有趣的东西(你也可以 here)。
您可以使用先前的占位符(例如 %<(5,trunc)
)截断任何占位符。如果下一个占位符的长度超过 5,则命令将在此处截断,否则向右填充。
所以在你的情况下,这将截断为 5:
system("git log --pretty=format:'[%<(5,trunc)%h]: %an'")
这里唯一的问题是您将只有 3 个有用的 digit,因为当它截断时,格式添加 ..
以表明您的占位符不完整。所以结果的一个例子是:
[8b9..]: Jack Johnson
[5fe..]: Popeye
[2cb..]: Jack Johnson
[e5d..]: Jack Johnson
[605..]: Plastic Bertrand
[20c..]: Plastic Bertrand
编辑:
您可以使用以下方法轻松删除最后的点:
system("git log --pretty=format:'[%<(7,trunc)%h]: %an' | tr -d .")
那么您将得到预期的干净结果:
[8b972]: Jack Johnson
[5fe3d]: Popeye
[2cbe0]: Jack Johnson
[e5d06]: Jack Johnson
[605d7]: Plastic Bertrand
[20cae]: Plastic Bertrand
我的代码如下
system('git log --pretty=format:[%h]: %an')
其中 %h 给出了提交的修订 ID,长度为七个字符,%an 是作者姓名。
我的问题是我想要一个五位数的修订 ID 而不是七位数,但我找不到任何形式的标志。
--date=iso-strict
或其他任何方式。
我该怎么做?
7 位数是默认值,也是普遍接受的最小值,以确保中等规模项目的唯一性。任何不足都会有发生碰撞的风险。如果你想trim它你可以问:
--abbrev=5
如果 5 位数的值不唯一,这可能会被 git
命令否决。将此值视为 最小值 而不是最大值。
您可以通过 git log --help
阅读更多内容。
请注意,您通常希望分解 system
的参数以避免它们之间的混淆:
system("git", "--log", "--pretty-format=...")
当传入任意文件名时,这一点尤其必要,因为 shell 可能会以危险的方式解释这些文件名。
塔德曼回答快完成了。然而,我在 git 日志的手册页上加了红色,并在格式部分发现了一些有趣的东西(你也可以 here)。
您可以使用先前的占位符(例如 %<(5,trunc)
)截断任何占位符。如果下一个占位符的长度超过 5,则命令将在此处截断,否则向右填充。
所以在你的情况下,这将截断为 5:
system("git log --pretty=format:'[%<(5,trunc)%h]: %an'")
这里唯一的问题是您将只有 3 个有用的 digit,因为当它截断时,格式添加 ..
以表明您的占位符不完整。所以结果的一个例子是:
[8b9..]: Jack Johnson
[5fe..]: Popeye
[2cb..]: Jack Johnson
[e5d..]: Jack Johnson
[605..]: Plastic Bertrand
[20c..]: Plastic Bertrand
编辑:
您可以使用以下方法轻松删除最后的点:
system("git log --pretty=format:'[%<(7,trunc)%h]: %an' | tr -d .")
那么您将得到预期的干净结果:
[8b972]: Jack Johnson
[5fe3d]: Popeye
[2cbe0]: Jack Johnson
[e5d06]: Jack Johnson
[605d7]: Plastic Bertrand
[20cae]: Plastic Bertrand