Github Action 自动构建并推送 DockerHub
写在前面Github Action 这个东西,是小成本和自动化持续集成的福音,如果想要小成本的使用持续集成,省去自己搭建服务器做自动构建,Git Action 就是个好东西。没有这个的时候,你可以自己加 hook 触发,服务可以自己搭,也可以用第三方的。Github Action 最好的优执我个人觉得是在白嫖,什么东西不要钱的都是最好的,除了玩游戏。
需求我的需求很简单,当代码正式发版后,发布tag后,自动触发通过我的指定的Dockerfile构建镜像后,推送我们指定的 DockerHub。Github Action 提供的操作,可以理解为你在 jenkins 的服务器上写的 Pipline 脚本,一个作用,说到这发现Github Action又把 jenkins的饭碗抢了。
使用 Github Action照例,先告诉你怎么用,能搜到我博客的都是来解决问题的,如果还还有耐心,在解决完问题后,接着往下看。
我使用是官方推荐配置,看了一下,没有什么可以改的地方。你点开 Action 一看,它能搞的实在太多了,基本上能满足你的所有日常构建。
找到publish Docker Contai ...
shell--检查github最新release
前言经常在需要使用脚本监控仓库是不是有最新的release版本的发布,然后进行自动构建。如何知道远程的github是发布新的release版本,可以能过脚本来获得。
git ls-remote作用:查看远程分支。能够列出远程分中的内容。
查看远程所有tag1git ls-remote --tags ./.
结果如下:
d6602ec5194c87b0fc87103ca4d67251c76f233a refs/tags/v0.99f25a265a342aed6041ab0cc484224d9ca54b6f41 refs/tags/v0.99.17ceca275d047c90c0c7d5afb13ab97efdf51bd6e refs/tags/v0.99.3c5db5456ae3b0873fc659c19fafdde22313cc441 refs/tags/v0.99.2
查看指定仓库分支1git ls-remote http://www.kernel.org/pub/scm/git/git.git master seen r ...
git 取消跟踪
取消跟踪未提交文件忽略
git rm --cached FILENAME
这样就可以了,如果后面跟的是目录就加上个 -r 就行了(这个操作不会删除这个文件)
git rm -r --cached DIR
已提交文件忽略已经维护起来的文件即已经 commit 后的文件,即使加上了.gitignore也无济于事。用下面这个命令:
git update-index --assume-unchanged logs/*.log
git制造冲突
冲突来源于合并不同分支的 commit 是不会产生冲突的,因为 commit 提交到的是当前分支的 本地库。只有将分不同分支的本地库进行合并才会产生冲突。所以:
合并本地库会产生冲突
拉远程分支的代码也会产生冲突
通常产生的情况:
两个人写同一个文件就可以先提交的不会有冲突,后拉取的会有冲突
同一个机器,不同分支,写同一个文件,也可以产生冲突
制造方法:A 、B 两分支操作同一个文件的同一行代码。A 分支 commitB 分支 commit
B 合并 A,就会产生冲突
git-工作区、暂存区、版本库
工作区就是 git init 的目录,就是工程目录。工作区下包含着版本库 .git 文件夹。
暂存区暂存区就存在于 .git 版本库文件夹内。称为 stage,这并不是指某个目录的名称,而是一个逻辑概念。一般存放在 .git 目录下的 index 文件(.git/index)中。
创建版本库的同时,会创建一个唯一的 master 分支。git add 是往暂存区提交git commit 是往 master分支提交
在实际开发中,这个作用很大,比如在编写一段时间的代码后,想要拉一下远程分支的代码,或者想回到之前的修改,但是又不想删掉这些修改,就可以用 stage 来暂存修改,暂存后,代码恢复未修改前的样子。
版本库工作区有一个隐藏目录 .git,虽然这个目录在工作区的工程目录下,但是目录是管理git的。这个不算工作区,而是 Git 的版本库。工作区中的文件的修改和 stage 暂存区中的修改都会被 git 监控到。不同的区之前的修改是独立互不影响的。工作区中的修改是不会被 commit 的。只有暂存区的才会被 commit。
checkout 检出和切换
这个命令是个多功能的命令用法很灵活。切换分支、撤消修改下面文中是 -- 两个杠框是连在一起,中间没有空格,因为字体太小,所说中间给个空格看着明显一些。
1.切换分支
git checkout <name>
2.创建并切换分支
git checkout -b <name>这其实可以拆解成两步操作 -b 应该就是branch
3.撤销工作区修改实际就是“以旧换新”的操作有两种情况:1.如果未添加到暂存区,则把版本库中的最新版本覆盖2.如果已添加到暂存区,则把暂存区中的修改拿出覆盖
撤销工作区修改:
git checkout -- <file>
git checkout -- .
4.连招假如有一个文件,做了修改,但是不确定后面的修改是不是想要的。先添加到暂存区中,过了一会这个修改是不想要的,想要把工作区的文件从暂存区撤回覆盖。
git add //放一份当前写到一半觉得没问题的放到暂存区中
git checkout - - file //将 版本库 中的修改替换到 工作区中没有 add 的情况 ...
git push的一些总结
git pull拉取并合并远程代码
git pull <远程主机名> <远程分支名>:<本地分支名>
1.拉取next 分支 拉到 本 master。
git pull origin fast:master把远程的
2.拉取到当前分支省略定法,表示拉取并合并自当前分支
git pull origin fast
3.等价上面的操作
git fetch origingit merge origin/fast
4.手动建立跟踪跟踪不是只能跟踪 master,可以指定本地和远程不同的分支。意义在于可以使用简化命令 git push/pull,而不需要显示指定的版本库。
git branch --set-upstream master origin/fastgit branch --set-upstream develop origin/develop
git rebase使用
rebase 重置作用: 是重置提效记录。本质是,当合并其它分支的提交记录后,重整提交记录。不论是自己开发,还是参加开源项目,有很多时间,需要重整提交记录。美化一下,这时候就很有用了。
需要强调一点:一定是在你自己的分支上rebase,别把master之类的分支rebase掉了。
git rebase假设你在test_rebase分支进行开发,现在master分支已经有新的提交,test有多次提交,现在你想合并master分支,并提交推送到远程仓库中看起来只有一次提交。
提交记录分别是:
test_rebase分支:
rebase: test commit2rebase: test commit1
master分支:
master: test commit2master: test commit1
在 test_rebase分支下执行:
1git rebase -i master
-i: --interactive,即交互式的界面
进入交互模式,用vim来编辑,下面这个内容是:
pick: 要保留的掉交commit 和 message,如果要重写commit message用 ...