Show the latest commit value within a web application?

I have a few Rails applications and I use Git as the version control system. I use either GitHub or Beanstalk as the repository hosts.

What I am trying to is quite simple in theory. Somehow show the latest commit ID number (hash?) in the footer of the web application. So that when I am looking at the web application I can check that it's committed and deployed correctly.

I can imagine there are two methods to tackle this. The first would be a possible feature of Git that allows the output of the commit ID. The second would be a post-commit web hook (both Beanstalk and GitHub allow this).

Has anyone ever found a way to do this, or something similar?




First, a clarification: post-commit hook cannot add commit-id to file in a commit, because commit id depends on commit of the top tree (representing top directory), id of top tree in turn depends on ids of its members, and id of a file depends on its contents... and this content is to include commit id. Not possible.

But let's take a look at different solutions:

Live, server side scripting

If your web app is deployed live from non-bare git repository (I hope you know what you are doing wrt. pushing into non-bare repository, i.e. repository with checkout / working tree), then your web app can check HEAD by using git rev-parse HEAD (gives SHA-1 of commit), or better git describe --dirty (the --dirty option would make returned string contain information whether you have uncomitted changes in working area), or git describe --always HEAD.

git rev-parse HEAD gives something like 7611062b4ba6d1ebc4cf3e63c11204a4f5057660, while git describe --dirty gives something like v1.7.3.2-95-g7611062 (which means commit with abbreviated SHA-1 of 7611062, 95 commits after commit tagged 'v1.7.3.2'), but it depends on you tagging releases using annotated tags.

A variant of this would be to have web app to check HEAD from repository which is somewhere else on the same filesystem, e.g. with git --git-dir=/path/to/.git describe HEAD.

Sidenote: if you use Ruby, you probably want to use grit library. The equivalent of git rev-parse HEAD version would probably be (untested!):

require 'grit'
include Grit

repo = Repo.new("/var/git/app.git")
head = repo.commits('HEAD', 1)

app_version = head.id

Live, static files served from git checkout

Edit: section added 2010-10-23 13:33 +0000
If you serve your files from checkout (worktree) of non-bare git repository (not your situation), you can use 'smudge' and 'clean' commands of filter gitattribute to perform CVS-like keyword expansion on checkout / checkin.

In .gitattributes file you would define files on which filter attribute should act:

*.rb filter=commitid

You define filter in git config file (e.g. in .git/config), for example

[filter "commitid"]
        smudge = sed -e "s/\$Revision: ?\$/\$Revision: $(git rev-parse HEAD)\$/1"
        clean =  sed -e "s/\$Revision: ?[^$]*\$/\$Revision: \$/1"

The smudge filter would replace '$Revision: $' with e.g. '$Revision: v1.7.3.2-95-g7611062' on checkout (this means that checked outfiles would contain this CVS-like keyword expanded). The clean filter would remove expansion when storing file contents in git object database (in git repository); otherwise you would have problems with comparing file etc.

Deployed with use of git archive

If you instead deploy your web app, so it doesn't reside in live repository (which has its quirks wrt. pushing into it, and which has possible security drawbacks), and you use git archive somewhere (e.g. to zip app to upload it to your hosting site), you can make use of keyword substitution.

First you need to tell Git that you want keywords in a file replaced by git archive. You do that by setting export-subst for given file, for example by adding to .gitattributes file

*.rb export-subst

and then adding to your file that contains/generates page footer e.g


which will be replaced by commit hash (see pretty-formats description e.g. in git-log manpage).

Deployed, using some deployment script

If you use some kind of script / scripted mechanism to deploy your web app, you should follow Jefromi advice of having your deploy script embed version information.

You would have to ask somebody else how to set Capistrano (assuming that you use it for deployment) to post:deployment replace '@@VERSION@@' placeholder in your 'app.rb' file with result of git describe --always HEAD... Git project Makefile uses sed for that.

I believe what you'll end up wanting to do is, as a part of your "build" process (deployment, your case?), store the output of git rev-parse HEAD or git describe HEAD (better, assuming you tag releases) in a file. Your app can then display the contents of the file. The commit hash can't ever actually be part of any tracked content (the hash of the commit depends on the tracked content). Of course, if your app is running out of a repo, you could simply run the command from the app, but it's a lot more elegant to just do it once.

This is the approach taken by git itself, by the way. It has a teeny shell script which basically dumps git describe output to GIT-VERSION-FILE, which is then compiled in to provide the version information.

Hopefully I haven't misunderstood your situation - I'm a little confused by you saying "a possible feature of Git that allows the output of the commit ID". This is a very basic capability of git.

First, the answer to your question, run the following command in your ruby script:

`git log -n1 | head -1`.split.last

Second: What do you mean you use beanstalk as your repository host? Isn't beanstalk a queueing server?

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

  • 混合时间戳
    作者介绍:包子侠 原文链接:混合时间戳 翻译自论文: HybridTime - Accessible Global Consistency with High Clock Uncertainty 摘要 在物理时钟不确定的分布式系统中保证全局一致性是很多分布式系统 (如分布式数据库) 要解决的问题。Google的Spanner数据库通过使用高精度时钟,降低时钟不确定性,然后使用提交等待(commit wait)来实现副本组之间的一致性,这项技术可以确保因果相关的事务在时间上以超过时钟同步误差界限的方式区分(解读:Spanner通过引入原子钟来解决不同物理服务器时钟误差不一致的问题。spanner的TrueTime返回的不是一个时间点,而是一个时间范围[t-ε,t+ε],通过这个时间范围可以保证,只要两个事务之间的时间差大于原子钟的误差边界,就可以区分两个事务的因果关系,误差越小,就越精确)。然而,对于其他数据库厂商来说,在谷歌数据中心之外使用类似的技术可能很困难,甚至不可能(例如,当使用像amazonec2这样的云服务时)。 在本文中,我们介绍了混合时间HybridTime(物理时钟和逻辑时钟的混合),可以用来实现一个全局一致性数据库。与Spanner不同,对于大多数事务,HybridTime不需要等待时间误差(解读:Spanner的TrueTime是一个范围时间
  • Git 基本原理 以及 GitHub 与 GitLab
    1.Git 简介 Git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 版本控制:是一种用于记录一个或多个文件内容变化,方便我们查阅特定版本修订情况的系统。 2.集中式与分布式的区别 (1).集中式版本控制系统 早期出现的版本控制系统有:SVN、CVS等,它们是集中式版本控制系统,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同合作的开发人员都通过客户端连接到这台服务器,取出最新的文件或者提交更新。 集中式版本控制系统,版本库是集中存放在中央服务器的,工作的时候,用的是自己的电脑,所以,我们首先需要从中央服务器上拉取最新的版本,然后开始工作,等工作完了,再把自己的工作提交到中央服务器。 在这里借用廖雪峰老师的一个比喻,中央服务器好比是一个图书馆,你要改其中的一本书,必须先要从图书馆里把书借出来,然后更改,改完之后,再放回图书馆。 集中式版本控制系统的一个最大毛病就是必须联网才能工作,所以对于网络环境比较差的情况使用集中式版本控制系统是一件比较让人头疼的事情。 (2).分布式版本控制系统 分布式版本控制系统,比如:Git,没有中央服务器的概念,我们使用相关的客户端提取的不只是最新的文件,而是把代码仓库完整地镜像下来,相当于每个人的电脑都是一个完整的版本库,这样的话,任何一处协同工作的服务器出现故障,
  • Docker基础篇笔记 (三) Docker常用命令 与 Docker 镜像
    个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一、 Docker常用命令 1、帮助命令 docker versiondocker infodocker --help 2、镜像命令 2.1 docker images (1) 列出本地主机上的镜像 各个选项说明: REPOSITORY:表示镜像的仓库源TAG:镜像的标签IMAGE ID:镜像IDCREATED:镜像创建时间SIZE:镜像大小 同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。 如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像 (2)OPTIONS说明: :列出本地所有的镜像(含中间映像层):只显示镜像ID。--digests :显示镜像的摘要信息--no-trunc :显示完整的镜像信息 2.2 docker search 某个XXX镜像名字 (1)网站 —— https://hub.docker.com (2)命令 docker search [OPTIONS] 镜像名字 OPTIONS说明: --no-trunc : 显示完整的镜像描述-s : 列出收藏数不小于指定值的镜像。--automated : 只列出 automated
  • 【MOS】RAC 环境中最常见的 5 个数据库和/或实例性能问题 (文档 ID 1602076.1)
    RAC 环境中最常见的 5 个数据库和/或实例性能问题 (文档 ID 1602076.1) 文档内容用途适用范围详细信息 问题 1:大量块丢失 (gc lost blocks, gc current/cr lost blocks) 问题 2:大量 log file sync 等待 问题 3:Mutexes 上的长时间等待 问题 4:高 enq: TX -row lock contention, enq: TX - index contention, enq: TX - ITL allocate entry 等待 问题 5:高 CPU 和内存开销参考适用于:Oracle Database - Enterprise Edition - 版本 到 [发行版 10.1 到 11.2] 本文档所含信息适用于所有平台 用途本文旨在提供关于 RAC 环境中最常见的数据库和/或实例性能问题的摘要以及可能的解决方案请注意,问题 3(Mutexes 上的大量等待)和问题 5(高 CPU 和内存开销)是一般性数据库问题,并非特定于 RAC 的问题。不过,本文中讨论这些问题是因为这些是最常见的问题之一,会在 RAC 环境中的某一个实例发生。适用范围DBAs详细信息 问题 1:大量块丢失 (gc lost blocks, gc current/cr lost blocks
  • 【MOS】RAC 环境中最常见的 5 个数据库和/或实例性能问题 (文档 ID 1602076.1)
    RAC 环境中最常见的 5 个数据库和/或实例性能问题 (文档 ID 1602076.1) 文档内容 用途 适用范围 详细信息 问题 1:大量块丢失 (gc lost blocks, gc current/cr lost blocks) 问题 2:大量 log file sync 等待 问题 3:Mutexes 上的长时间等待 问题 4:高 enq: TX -row lock contention, enq: TX - index contention, enq: TX - ITL allocate entry 等待 问题 5:高 CPU 和内存开销 参考 适用于: Oracle Database - Enterprise Edition - 版本 到 [发行版 10.1 到 11.2] 本文档所含信息适用于所有平台 用途 本文旨在提供关于 RAC 环境中最常见的数据库和/或实例性能问题的摘要以及可能的解决方案请注意,问题 3(Mutexes 上的大量等待)和问题 5(高 CPU 和内存开销)是一般性数据库问题,并非特定于 RAC 的问题。不过,本文中讨论这些问题是因为这些是最常见的问题之一,会在 RAC 环境中的某一个实例发生。 适用范围 DBAs 详细信息 问题 1:大量块丢失 (gc lost blocks, gc current/cr
  • Visual Studio installer fails on AspNetDiagnosticPack.msi
    I have the problem described here. Any attempt to install AspNetDiagnosticPack.msi C:\ProgramData\Microsoft\VisualStudio\Packages\Microsoft.VisualStudio.AspNetDiagnosticPack.Msi,version=15.0.40314.0\AspNetDiagnosticPack.msi fails with error status: 1603. I cannot add or remove any component using VS installer now. I have installed VS 2017 Professional as follows: Microsoft Visual Studio Professional 2017 Version 15.6.6 VisualStudio.15.Release/15.6.6+27428.2037 Microsoft .NET Framework Version 4.7.02558 Installed Version: Professional Visual C++ 2017 00370-20001-54960-AA753 Microsoft Visual C++
  • Spring面试题(2020最新版)
    大家好,我是CSDN的博主ThinkWon,“2020博客之星年度总评选"开始啦,希望大家帮我投票,每天都可以投多票哦,点击下方链接,然后点击"最大”,再点击"投TA一票"就可以啦! 投票链接:https://bss.csdn.net/m/topic/blog_star2020/detail?username=thinkwon 在技术的世界里,ThinkWon将一路与你相伴!创作出更多更高质量的文章!2020为努力奋斗的你点赞👍,️新的一年,祝各位大牛牛气冲天,牛年大吉!😊😊 文章目录 Spring概述(10)什么是spring?Spring框架的设计目标,设计理念,和核心是什么Spring的优缺点是什么?Spring有哪些应用场景Spring由哪些模块组成?Spring 框架中都用到了哪些设计模式?详细讲解一下核心容器(spring context应用上下文) 模块Spring框架中有哪些不同类型的事件Spring 应用程序有哪些不同组件?使用 Spring 有哪些方式? Spring控制反转(IOC)(13)什么是Spring IOC 容器?控制反转(IoC)有什么作用IOC的优点是什么?Spring IoC 的实现机制Spring 的 IoC支持哪些功能BeanFactory 和 ApplicationContext有什么区别?Spring 如何设计容器的
  • 使用OData进行事务性批处理(Transactional batch processing with OData)
    问题 使用Web API OData,我可以处理$ batch,但是对数据库的持久性不是事务性的。 如果我在请求的变更集中包含多个请求,而其中一项失败,则另一项仍将完成,因为对控制器的每个单独调用都有其自己的DbContext。 例如,如果我提交具有两个变更集的批处理: 批次1-变更集1--修补有效对象--修补无效对象-结束变更集1-变更集2--插入有效对象-结束变更集2结束批次 我希望第一个有效的修补程序将被回滚,因为更改集无法完全完成,但是,由于每个调用都有自己的DbContext,因此第一个Patch被提交,第二个不被提交,而insert是坚定的。 是否存在通过OData的$ batch请求支持交易的标准方法? 回答1 以下链接显示了处理事务中的变更集所需的Web API OData实现。 您是正确的,默认批处理程序不会为您执行此操作: http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v3/ODataEFBatchSample/ 更新原始链接似乎已经消失了-以下链接包括用于事务处理的类似逻辑(对于v4): https://damienbod.com/2014/08/14/web-api-odata-v4-batching-part-10/ 回答2 理论:让我们确保我们在谈论同一件事。
  • 6. 业务系统基于K8S的CICD
    将业务系统迁移到k8s中运行还不够,还应该让它能够持续化的集成部署,也就是CI/CD的过程,该过程必须保证自动化。使用k8s进行CI/CD有以下优点:1. 环境稳定 2. 服务不中断 3. 一次构建,多环境运行本文通过K8S + Gitlab + Gitlab CI实现k8s集群的自动化集成部署。环境如下:iprolehostnamedomain192.168.1.51k8s master1master1none192.168.1.52k8s master2master2none192.168.1.53k8s master3master3none192.168.1.54k8s node1node1none192.168.1.55k8s node2node2none192.168.1.56k8s node3node3none192.168.1.57gitlab servergitlabgitlab.lzxlinux.cn192.168.1.59harbor serverharbor1hub.lzxlinux.cn192.168.1.60harbor serverharbor2harbor.lzxlinux.cn搭建Gitlab服务器搭建Gitlab服务器,参考这里:Docker + Gitlab + Gitlab CI(一),此处省略搭建过程。没有指定节点时,默认操作在所有节点进行
  • Dockerfile及Docker-compose Yaml
    Dockerfile 一、结构: 基础镜像信息 维护者信息 镜像操作指令 容器启动时执行指令 FROM 指明构建的新镜像是来自于哪个基础镜像,例如: FROM centos:6 MAINTAINER 指明镜像维护着及其联系方式(一般是邮箱地址),例如: MAINTAINER Edison Zhou <xxx@xxx.com> 不过,MAINTAINER并不推荐使用,更推荐使用LABEL来指定镜像作者,例如: LABEL maintainer="xxxxx.cn" RUN 构建镜像时运行的Shell命令,例如: RUN ["yum", "install", "httpd"] RUN yum install httpd CMD 启动容器时执行的Shell命令,例如: CMD ["-C", "/start.sh"] CMD ["/usr/sbin/sshd", "-D"] CMD /usr/sbin/sshd -D EXPOSE 声明容器运行的服务端口,例如: EXPOSE 80 443 ENV 设置环境内环境变量,例如: ENV MYSQL_ROOT_PASSWORD 123456 ENV JAVA_HOME /usr/local/jdk1.8.0_45 ADD 拷贝文件或目录到镜像中,例如: ADD <src>...<dest> ADD html.tar.gz /var/www
  • 通过子模块显示Git中的外部代码依赖性(To show external code dependency in Git by a submodule)
    问题 解决的问题:通过子模块显示外部代码依赖性:感谢VonC! 当前问题:在两个文件夹中有一个没有重复内容的子模块 当前问题的临时解决方案:将文件夹的名称更改为bin-github,因为作为子模块的文件夹的名称为bin。 这意味着我需要在家中复制内容。 我的HOME文件夹取决于〜/ bin。 我的文件位于Masi仓库的HOME上,而Github的repo bin的〜/ bin上。 我在家里的相关文件夹结构: ~ |-- [drwxr-xr-x] bin | -- fileA ` -- folderA ... 我想知道如何在Masi上显示make〜/ bin Git的子模块。 你怎么能〜/ bin〜/ bin我的Git的子模块? #3回复VonC的评论: 我的.gitmodules [submodule "bin"] path = bin url = git://github.com/masi/bin.git 我觉得我不再需要再添加子模块了,因为我在.gitmodules中有了它。 我跑 Sam master $ git submodule update Sam master $ git submodule foreach git pull Sam master $ ls bin #2回复VonC的答案: 我将.gitmodules更改为以下内容,以便我的家中没有它的重复副本。
  • 区块链学习笔记(3)--区块链与审计part2 (对论文Secure and Transparent Audit Logs with BlockAudit的学习)
    使用区块审计进行安全透明的日志审计 论文 “Secure and Transparent Audit Logs with BlockAudit” 学习笔记 文章目录 使用区块审计进行安全透明的日志审计摘要介绍背景以及威胁模型日志审计威胁模型研究现状 问题陈述以及需求工程设计功能需求结构需求安全需求 区块审计应用架构web应用业务逻辑层ORM 生成审计日志将审计日志集成于区块链创建区块链网络访问控制创建区块链事务 共识协议 区块审计的分析设计分析复杂度分析时间复杂度空间复杂度 安全性分析物理访问攻击远程弱点攻击提高错误容忍度检测恶意结点 实验以及评价模拟环境模拟结果 讨论与未来工作限制优化 摘要 本文介绍了一种基于区块链技术的审计方式,由于是政府的基金项目,该系统对安全性和吞吐速度有着较高的要求。 本文假设系统可能遭受两种攻击:1.物理访问攻击,既是直接修改数据库或者区块链数据;2.远程弱点攻击,既是找到系统的弱点进行远程入侵。按照这两种可能遭受的攻击构建了威胁模型,并设计了在一定程度上可以抵御这两种攻击的审计系统。 介绍 区块审计的原理: 1.通过企业应用的数据访问层收集系统的事件信息;2.将收集到的事件信息转化为可以当做事务写入区块链的事务;3.构建点对点网络,该网络通过执行共识算法来验证和接受事务;4.将事务锁定在只可追加的区块链上,该链被所有实体持有。 评判标准:延迟
  • GitHub页面未更新(GitHub pages are not updating)
    问题 我在GitHub页面上遇到了一个奇怪的问题。 我将新提交提交到我的个人页面页面maltzj.github.io,但新文章未显示在此处。 当我在本地执行服务器时,帖子位于localhost:4000/posts/the-price-of-inconsistent-code/ 。 但是,当我转到http://maltzj.github.io/posts/the-price-of-inconsistent-code时,我得到了404。我还添加了一个新文件,该文件应该位于http://maltz.github。 io / test.html,但这还会引发404。 一切都在本地构建和运行。 我的Git存储库是最新的,并且GitHub状态页面上没有关于构建问题的任何信息,因此我对如何使用它感到有些困惑。 如何使我的页面更新为添加的新内容? 作为参考,支持我的页面的存储库的位置为http://github.com/maltzj/maltzj.github.io 回答1 这些解决方案都没有为我解决。 解决方案是在GitHub网站上编辑index.html文件。 然后,该网站将按预期在Web上更新。 回答2 对于其他人,还请检查您的帖子日期。 我只是有这个问题。 我在UTC + 11,我很确定服务器在UTC。 因此,如果我将帖子与本地时间约会,则服务器会认为它们是将来的内容,因此不会构建它们。
  • GitLab CI构建SpringBoot-2.3应用
    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等; 关于GitLab CI 在《体验SpringBoot(2.3)应用制作Docker镜像(官方方案)》一文中,咱们掌握了SpringBoot官方推荐的镜像构建方案,接下来要体验的是GitLab的CI能力,它负责把代码变成私有仓库中的镜像,咱们可以专心编码了; GitLab CI的作用如下图,开发者提交代码到GitLab后,就会触发编译、构建、制作镜像、推送到仓库这些事情,然后K8S环境就能用上最新的镜像了: 本文内容 本文继续坚持实战的风格,和大家一起完成以下操作: 准备一个SpringBoot-2.3应用;编写GitLab的pipeline脚本;提交代码触发pipeline脚本的工作;K8S环境使用最新镜像;体验GitLab如何将最新镜像自动部署到K8S环境; 环境信息 GitLab:Community Edition 13.0.6GilLab Runner:13.1.0kubernetes:1.15.3SpringBoot:2.3.0.RELEASEJDK:1.8.0_121Maven:3.3.9Docker:19.03.8操作系统:CentOS Linux release 7
  • 如何在Debian 9上安装和使用Docker
    介绍 Docker是一个简化容器中应用程序进程管理过程的应用程序。容器允许您在资源隔离的进程中运行应用程序。它们与虚拟机类似,但容器更便携,更加资源友好,并且更依赖于主机操作系统。 在本教程中,您将在Debian 9上安装和使用Docker Community Edition(CE)。您将安装Docker本身,使用容器和映像,并将映像推送到Docker存储库。 先决条件 要学习本教程,您需要具备以下条件: 一个Debian 9服务器按照Debian 9初始服务器设置指南设置,没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。 一个具有sudo权限的非root用户。 在您的服务器上启用防火墙,如果您使用的是腾讯云的CVM服务器,您可以直接在腾讯云控制台中的安全组进行设置。 如果您希望创建自己的图像并将其推送到Docker Hub,则可以使用Docker Hub上的帐户,如步骤7和8所示。 第1步 - 安装Docker 官方Debian存储库中提供的Docker安装包可能不是最新版本。为了确保我们获得最新版本,我们将从官方Docker存储库安装Docker。为此,我们将添加一个新的包源,从Docker添加GPG密钥以确保下载有效,然后安装该包。 首先,更新现有的包列表: sudo apt update 接下来
  • 如何重命名 GitHub 网站上的目录/文件夹?(How to rename a directory/folder on GitHub website?)
    问题 我能够在 GitHub 网站上找到一种方法来重命名单个文件,并且成功地做到了。 我还能够找到一种方法来重命名整个存储库并成功做到了这一点。 有谁知道如何在不使用命令行的情况下对单个目录执行此操作? 作为参考,我正在尝试将名为 InterviewTesting(包含 src 文件等)的目录更改为其他内容。 我试着用单文件的方式来做。 但这不允许我更改目录的名称(InterviewTesting),只能更改实际的文件名。 回答1 实际上,有一种使用 Web 界面重命名文件夹的方法。 参见https://github.com/blog/1436-moving-and-renaming-files-on-github 回答2 在 GitHub Web 应用程序中无法执行此操作。 我相信唯一的方法是在命令行中使用git mv <old name> <new name>或使用 Git 客户端(如 SourceTree)。 回答3 你可以! 只需按照@committedandroider 的原始帖子按编辑,然后在文件名的开头用光标点击退格键。 然后它会让你编辑文件夹。 完成后,按正斜杠,然后再次编辑文件名。 回答4 我在github上缺少对文件夹的一些区分大小写的更改的问题。 我需要保留迁移历史记录,以便举例说明如何将github中的“ basicApp”文件夹更改为“ basicapp”
  • JAVA面试题总结(一)
    ⼀、⾃我介绍 ⼆、什么是mybatis 1、Mybatis 是⼀个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精⼒去处理加载驱动、创建连接、创建statement 等繁杂的过程。程序员直接编写原 ⽣态 sql,可以严格控制 sql 执⾏性能,灵活度⾼。 2、MyBatis 可以使⽤ XML 或注解来配置和映射原⽣信息,将 POJO 映射成数据库中的记录,避免 了⼏乎所有的 JDBC 代码和⼿动设置参数以及获取结果集。    3、通过 xml ⽂件或注解的⽅式将要执⾏的各种 statement 配置起来,并通过java 对象和 statement 中 sql 的动态参数进⾏映射⽣成最终执⾏的 sql 语句,最后由 mybatis 框架执⾏ sql 并将结果 映射为 java 对象并返回。(从执⾏ sql 到返回 result 的过程)。 三、Mybaits 的优点 1、基于 SQL 语句编程,相当灵活,不会对应⽤程序或者数据库的现有设计造成任何影响,SQL 写在 XML ⾥,解除 sql 与程序代码的耦合,便于统⼀管理;提供 XML标签,⽀持编写动态 SQL 语句,并可重 ⽤。 2、与 JDBC 相⽐,减少了 50%以上的代码量,消除了 JDBC ⼤量冗余的代码,不需要⼿动开关连 接; 3、很好的与各种数据库兼容(因为
  • 如何从父克隆中的先前提交中获取git子模块的关联提交ID?(How can I get a git submodule's associated commit ID from a past commit in the parent clone?)
    问题 除了实际签出父提交之外,是否有一种方法可以根据父克隆中的提交ID确定子模块的SHA-1提交ID? 我知道我可以找到当前关联的SHA-1和git submodule 。 这是一个例子: 我有一个带有单个子模块foo的克隆,该克隆在上个月进行了多次更改。 我在父克隆中有一个标签,该标签已有几周的历史了,称为released-1.2.3 。 我想找出此标记的提交与foo的关联SHA-1是什么。 我可以简单地查看released-1.2.3并使用git submodule来查看,但是我想知道是否有一种方法可以在不影响工作树的情况下进行脚本编写。 我想这样做是因为我想构造一个脚本来对父存储库中两次提交之间的子模块中的所有更改执行“ diff”操作,即“告诉我在父模块中两次提交之间子模块foo文件已更改。” 回答1 您可以使用git-ls-tree查看给定提交期间给定路径的SHA-1 ID: $ git ls-tree released-1.2.3 foo 160000 commit c0f065504bb0e8cfa2b107e975bb9dc5a34b0398 foo (我的第一个想法是git show released-1.2.3 foo ,但是以“致命:坏对象”失败。) 由于您正在编写输出脚本,因此您可能只想单独获取SHA-1 id,例如: $ git ls-tree
  • 在不推动提交的情况下触发Travis-CI重建?(Trigger a Travis-CI rebuild without pushing a commit?)
    问题 使用Travis-CI,是否可以在不将新提交提交到GitHub的情况下触发重建? 用例:由于外部性,构建失败。 资料来源实际上是正确的。 如果只是重新运行,它将建立OK并通过。 例如,由于软件包服务器关闭, apt-get失败,但是服务器又重新备份。 但是,在推送新提交之前,构建状态为“卡住”为“失败”。 除了推动“虚拟”提交外,是否有某种方法可以使Travis-CI进行其他构建? 回答1 如果您具有该仓库的写权限:在构建的详细信息屏幕上,有一个↻Restart Build按钮。 同样在“更多选项”下有一个触发器构建菜单项。 注意:诸如Ghostery之类的浏览器扩展程序可能会阻止重新启动按钮的显示。 尝试禁用扩展或将Travis CI列入白名单。 注意2 :如果.travis.yml配置在上游已更改,则单击“重建”按钮将使用旧配置运行travis。 要对travis配置应用上游更改,必​​须向PR添加提交或关闭/重新打开它。 如果您已发送拉取请求:您可以关闭PR,然后再次打开它。 这将触发一个新版本。 重新启动构建: 触发构建: 回答2 如果打开GitHub上存储库的“设置”选项卡,请单击“集成和服务” ,找到Travis CI ,然后单击“编辑” ,您应该会看到一个“测试服务”按钮。 这将触发构建。 回答3 我知道您说的是不推动提交
  • Docker入门级别笔记
    Docker学习笔记Docker概述Docker为什么出现?c一款产品: 开发——上线 两套环境!应用环境,应用配置!开发——运维。 问题:我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说考验十分大。环境配置是十分麻烦的,每一个机器都要部署环境(集群Redis、ES、Hadoop等) ,费事费力。发布一个项目( jar + (Redis MySQL JDK ES) ),项目能不能带上环境安装打包!之前在服务器配置一个应用的环境 Redis MySQL JDK ES Hadoop 配置超麻烦了,不能够跨平台。开发环境Windows,最后发布到Linux!传统:开发jar,运维来做!现在:开发打包部署上线,一套流程做完!安卓流程:java——apk——发布(应用商店)——使用apk——安装即可用!Docker流程: java——jar(环境)——打包项目帯上环境(镜像) —— ( Docker仓库:商店)Docker给以上的问题,提出了解决方案!Docker的思想就来自于集装箱!JRE——多个应用(端口冲突) ——原来都是交叉的! 隔离:Docker核心思想!打包装箱!每个箱子是互相隔离的。Docker通过隔离机制,可以将服务器利用到极致!本质:所有的技术都是因为出现了一些问题,我们需要去解决,才去学习!Docker历史2010年,几个年轻人,就在美国成立了一家公司