jus*_*chi 82 git github git-push
我想知道是否有办法在git日志中查看与每个提交相关的推送日期.如果那是不可能的,有没有办法在一定的推动下看到所有提交.
我编写了一个程序,需要在推送时跟踪提交.因为git日志是按提交日期排序的,而不是推送日期,所以我无法看到推送的最新提交.例如,如果用户在推送到主服务器之前2天提交到其本地存储库,则该提交将被放置在主存储库日志中的其他提交的2天之后.
Mar*_*rcH 71
我花了很长时间收集分散的信息,最后找到了这个问题的最佳答案,但现在我知道我已经拥有了.只有两行,没有代码也没有钩子:
# required for a bare repo
git config core.logAllRefUpdates true
git reflog --date=local master
Run Code Online (Sandbox Code Playgroud)
最后很简单.
警告:你可能要重写的默认值gc.reflogExpire和gc.reflogExpireUnreachable.检查git help reflog细节并了解其工作原理和原因.
上面的两个命令必须在您推送到的克隆中运行.如果那是不可能的话,那么近似就是在另一个永久克隆中运行:
git fetch origin # often and *regularly*
git reflog --date=local origin/master
Run Code Online (Sandbox Code Playgroud)
永远不要删除此永久克隆,否则您将丢失日期.
Ric*_*sen 36
Git是一个分布式版本控制系统,因此您必须仔细定义"推送日期"的含义.例如,假设用户A将一些提交推送到用户B的存储库.稍后,用户B将这些相同的提交推送到第三个存储库.你对哪个日期感兴趣?
我猜测你有一个共享存储库,并希望该共享存储库的用户能够确定什么时候发布到存储库.如果这是真的,您将不得不在共享存储库中收集该信息.
不幸的是,没有办法将日期附加到提交消息.这将改变提交ID(内容的SHA1哈希值),从而导致各种问题.
幸运的是,Git有一个名为notes的(相对较新的)功能.此功能允许您将任意文本附加到git log可以显示的提交.可以编辑注释并与其他人共享.
您可以使用notes功能将"在[date]上收到此提交"消息附加到共享存储库接收的每个提交.
详情git help notes请见.
这是我推荐的方法:
post-receive共享存储库上的挂钩,以便为每个更新的引用遍历每个新可访问的提交.对于每次提交,将类似"[user_url]的[user]添加到[date]上的[ref]"添加到提交的注释.
您可能希望使用专用于此目的的备注引用(例如refs/notes/received-on)而不是默认值refs/notes/commits.这将防止与为其他目的创建的注释发生冲突.
receive钩子以拒绝更改您的笔记参考(以防止用户意外或故意弄乱笔记).告诉所有用户从其工作树中运行以下命令:
# Fetch all notes from the shared repository.
# Assumes the shared repository remote is named 'origin'.
git config --add remote.origin.fetch '+refs/notes/*:refs/remote-notes/origin/*'
# Show all notes from the shared repository when running 'git log'
git config --add notes.displayRef 'refs/remote-notes/origin/*'
Run Code Online (Sandbox Code Playgroud)
此步骤是必需的,因为Git默认忽略上游存储库中的非分支,非标记引用.
以上假设引用只是高级,永不删除或强制更新.您可能希望post-receive钩子也附加"删除[日期]"注释以处理这些情况.
小智 10
git reflog show origin/master --pretty='%h %gd %gs %s' --date=iso
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很有效。提交者日期 (%cd) 具有误导性,因为它不一定与推送日期相同。然而 --date=iso 选项将输出推/取日期。
注意,如果你从 origin/master 获取,它会打印你获取它的日期;不是其他人推送提交的日期。
- %h: abrev. hash
- %gd: human readable reflog selector
- %gs: reflog subject
- %s: subject/commit message
Run Code Online (Sandbox Code Playgroud)
奖励:你当然可以做更多漂亮的格式化。到目前为止,我喜欢这种颜色编码。不过打字有点多。这会将 SHA 输出为红色,将 reflog 选择器输出为青色,并将 reflog 输出为绿色。
git reflog show origin/master --pretty='format:%C(red)%h%Creset %C(cyan)%gd%Creset %C(green)%gs%Creset: %s' --date=iso
Run Code Online (Sandbox Code Playgroud)
看看git reflog show master.可能不是您想要的确切格式,但应该指向正确的方向.
另一个想法是在push hook中运行一个脚本.
关于检查遥控器上的reflog的这个答案可能有助于(/sf/answers/615390681/)通过提供有关哪个分支被推送的信息,即使它没有显示哪些提交被推送,但是你可以通过在本地提交日期之后找到下一个推送来进行交叉关联.不是万无一失,但如果你还没有实现之前发布的@RichardHansen的优秀笔记建议,那就太方便了
| 归档时间: |
|
| 查看次数: |
44693 次 |
| 最近记录: |