git flow, Git 分支管理, github flow, gitlab flow

git flow, Git 分支管理, github flow, gitlab flow git flow main: 稳定的生产代码,只有发布版本才合并到这里, 长期分支,始终存在。 develop:日常开发的主分支,所有新功能和 bug 修复先合并到 develop, 长期分支,始终存在。用于整合开发中的代码 feature/xxx:新功能开发的临时分支,开发完成后合并到 develop, 合并之后删掉, 短期分支, 不是长期保持。开发新特性时创建,合并后删除 release/xxx:发布准备分支,从 develop 分出,准备发布, 短期分支, 不是长期保持。 hotfix/xxx:生产环境紧急修复,从 main 分出,修复后合并回 main 和 develop, 短期分支, 不是长期保持。 Git flow 是一个Git分支管理模型,由 Vincent Driessen 于2010年发布在其个人网站的一篇博文中《A successful Git branching model》,该模型适用于多版本管理的项目,能够有效的促进团队成员之间的协作,提升代码的清晰度。 https://nvie.com/posts/a-successful-git-branching-model/ https://www.cnblogs.com/youbins/p/17632165.html Git flow的优点是清晰可控,缺点是相对复杂,需要同时维护两个长期分支。大多数工具都将master当作默认分支,可是开发是在develop分支进行的,这导致经常要切换分支,非常烦人。 更大问题在于,这个模式是基于”版本发布”的,目标是一段时间以后产出一个新版本。但是,很多网站项目是”持续发布”,代码一有变动,就部署一次。这时,master分支和develop分支的差别不大,没必要维护两个长期分支。 github flow 只有主分支(通常是 main 或 master)和临时 feature 分支。 在 GitHub Flow 中并不推荐或保留 develop 分支。 feature/bugfix 分支:开发新功能或修复 bug 时,从 main 分出,开发完成后提 Pull Request(PR),通过代码审查后合并到 main。开发完成后通过 Pull Request 合并到 main,feature 分支随即删除。 GitHub Flow 本身不适合多版本并行维护 https://docs.github.com/en/get-started/using-github/github-flow ...

2013-01-20 · 2 min · 291 words · -

lazygit

lazygit https://github.com/jesseduffield/lazygit go install github.com/jesseduffield/lazygit@latest

2012-11-23 · 1 min · 5 words · -

Git 库空间优化/清理

Git 库空间优化/清理 git仓库过大会导致哪些问题? git仓库体积过大,占用电脑本地闪存的存储空间; clone git仓库时,耗时过长,甚至完全clone不下来导致git报错; git pull时会由于引用对象过多会报错,导致本地代码无法更新; 在切换分支的时候经常会出现cpu占满,内存占满的情况导致电脑死机; 作者:江霖丶 链接:https://juejin.cn/post/7024922528514572302 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 Git库随着使用时间的延续,空间会不断增长,但实际代码其实只占很小的空间,更多的是git库本身的归档文件,其中包括已删除的文件纪录。Git优化的本质就是清除已删除文件的归档历史,并重写commit记录。 另外可以将git中变化很少,与代码无关的文件移除,如一些资源文件,放到统一的位置,可以减小很大一部分空间占用。 克隆远程库到本地 $ git clone remote-url 用下面的脚本获取所有分支. !/bin/bash for branch in git branch -a | grep remotes | grep -v HEAD do git branch –track ${branch##*/} $branchdone done 现在你拥有了远程git库的完整克隆,可先在本地进行一些测试、验证工作。 分析git库 代码文件一般都很小,Git库的优化主要从大文件入手。 用下面的脚本可以找出git归档记录中排名前十的大文件,包括已删除的文件。 !/bin/bash set -x Shows you the largest objects in your repo’s pack file Written for osx @see http://stubbisms.wordpress.com/2009/07/10/git-script-to-show-largest-pack-objects-and-trim-your-waist-line/ @author Antony Stubbs set the internal field spereator to line break, so that we can iterate easily over the verify-pack output IFS=$’\n'; ...

2012-10-26 · 2 min · 280 words · -

Emacs的缓冲区(Buffers)、窗口(Windows)和框架(Frames)

Emacs的缓冲区(Buffers)、窗口(Windows)和框架(Frames) 概念上,Emacs在两个方面有别于一般程序。首先,“窗口"的概念不同。其次,Emacs的"缓冲区"是脱离窗口或框架独立存在的。 (Emacs里的frame相当于Microsoft Windows的window概念。A frame can show several windows, each showing a buffer.) 1 窗口与框架 我们所看到的Emacs"窗口"并非Emacs的窗口,而是Emacs的图形窗口框架(GUI windows frames)。理解这个概念是必须的,因为在未有图形化窗口之前,Emacs已经可以在"终端"运行了,用Windows的术语来说,就是"控制台"程序。看看下面的图,就明白了。 1.1 缓冲区,独立于窗口与框架之外 本质上,窗口和框架只是显示缓冲区内容的工具。缓冲区内可以包含文件内容,可以是Emacs内部自定义的,譬如*Messages*,*scratch*,或*help*等,也可以是用户自定制而其中内容未写入文件的。 许多图形界面的应用程序是将图形窗口 (Emacs中称之为Frames)与一些文件紧密联系在一起的,而Emacs的将缓冲区与图形窗口分离的方式是强大又灵活的。实际上,我们在大部分时间里宁愿使用一个Emacs Frame,而使用C-x b来切换缓冲区,这要比在多个Frame中采用鼠标切换或采用切分窗口等方式更容易,尽管它们在一些情况下存有优点。 1.2 更深入地了解缓冲区 你知道该怎样获知Emacs中开了几个缓冲区及它们的详细信息吗?有三种方法可以实现: C-x C-b,显示缓冲区列表; 缓冲区菜单,列举了打开的缓冲区以及导向它们的快捷命令; 在Emacs的窗口中,摁下Ctrl键,点击鼠标左键,可以弹出缓冲区列表。 Emacs自行定义了一些缓冲区,它们的名字,通常是像*buffername*,*help*,*scratch*这样的格式,并且缓冲区列表本身就是Emacs自定义的缓冲区,如下图: 当你启动Emacs的时候,会产生*Messages*和*scratch*两个缓冲区。*Messages*是用来显示从Emacs启动开始的所有命令信 息的缓冲区,*scratch*是草稿缓冲区,你可以在其中乱写东西,但不会被保存,除非用户使用C-x C-W命令。 在用户使用 Emacs编辑文件时,所读取的文件会被复制到同名的缓冲区内。如果用户需要帮助,那么也可以打开*help*缓冲区。可打开的缓冲区的数量是没有限制 的。大部分时间,仅有一两个缓冲区被显示,还有好多即使你没看到,但它们也是存在的。你可以把缓冲区想象为一堆页面,其中仅有一页是当前页,你可以切换到 令一页,或者创建新页。每个缓冲区都关联一个主模式,它决定了在该缓冲区内,Emacs的行为。譬如,text模式,被设计为书写文档的;Lisp模式, 是用于书写Lisp程序的。用户可以在一个Emacs窗口或框架中显示多个缓冲区,要紧是记住你创建的所有缓冲区。 2 在多缓冲区模式下工作 如果你想创建一个包含文件内容的缓冲区,可以C-x C-f,Emacs会自动创建一个缓冲区并将你带入其中。如果你已经在一个缓冲区打开了这份文件的副本, 那么C-x C-f会把你带入那个已存在的缓冲区中,在此请仔细体会一下,Emacs给你带来的好处吧!而如果你要打开的文件不存在,Emacs会为你创建 一个新文件的缓冲区,并将你带入其中。 请记住: C-x C-f是打开一个文件,该命令后总是跟随这目录/文件名的,如果要打开的文件不存在,就创建新文件。 2.1 切换缓冲区 你有意识到模式行并不显示文件名,而仅仅显示缓冲区名吗?其他一些版本的Emacs可以两个名字都显示,但GNUEmacs只显示缓冲区名,这是因为通常情况下,文件名和缓冲区名是一致的,除非你去修改它们。 要在不同缓冲区之间移动,就C-x b吧。Emacs会给你提供一个默认的最近隐掉的缓冲区名,回车就可以进入。或者输入你想进入的缓冲区名字的前几个字,然后摁Tab键,Emacs会自动为你补全缓冲区名,回车进入即可。 请记住: C-x,b之后则跟随一个缓冲区的名字。如果相应缓冲区不存在,Emacs会自动创建一个新的空缓冲区,与C-x C-f的不同之处是,新建的缓冲区不与文件关联,在退出Emacs时,Emacs不会提醒你要保存缓冲区。 查看已打开的缓冲区,还有以下两种可选方式: C-x C-b,这种方法可用于终端环境中的Emacs; 在Emacs窗口中,摁下Ctrl键,点击鼠标左键。该方法只对图形化的Emacs有效。 2.2 删除缓冲区 为什么要删除缓冲区? 你的Emacs中开的缓冲区太多了,想去掉几个; 对已有文档的修改具有灾难性,将这个缓冲区干掉就可以了。 要删除缓冲区,可键入C-x k,Emacs会显示当前被显示的缓冲区名,也可键入想删除的缓冲区的名字,然后回车。如果已与文件建立关联的缓冲区,内容有了 改动,Emacs会提示你保存一下。其他情况,则缓冲区就永远的消失了。而键入M-xkill-some-buffers可成批删除缓冲区,系统会一个一 个列举已存在的缓冲区,问你是不是把它kill掉,你只需要回答`yes’or`no’就可以了。当所有的缓冲区都被kill掉之后,Emacs不会屏幕空着的,它会创建一个新的*scratch*缓冲区。 ...

2012-09-03 · 1 min · 146 words · -

Emacs24隐藏工具栏菜单栏和滚动条无效的问题

Emacs24隐藏工具栏菜单栏和滚动条无效的问题 http://blog.csdn.net/cherylnatsu/article/details/7663163 前不久发布了Emacs 24.1,下载下来编译安装后发现这样一个问题,以前旧的.emacs文件里明确设置了不显示工具栏菜单栏滚动条,但是它还是都显示了出来,旧的配置是这样的。 (tool-bar-mode nil) (menu-bar-mode nil) (scroll-bar-mode nil) 后来经过提醒才发现,新版这里已经不能用nil了,必须用0 改成: (tool-bar-mode 0) (menu-bar-mode 0) (scroll-bar-mode 0) 就好了。

2012-08-31 · 1 min · 19 words · -

emacs

emacs emacs yaml plugin (add-to-list 'load-path "/home/wiloon/.emacs.d/lisp") (require 'yaml-mode) (add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode)) (add-hook 'yaml-mode-hook (lambda () (define-key yaml-mode-map "\C-m" 'newline-and-indent))) https://www.emacswiki.org/emacs/YamlMode https://github.com/yoshiki/yaml-mode emacs git Remove git from the list of backends handled by vc-mode: (delete 'Git vc-handled-backends) or remove all source control hooks: (setq vc-handled-backends ()) emacs keys 符号 C- 意思是按住 Ctrol 键 M- 意指 Meta 键 (键盘上若无Meta 键,则可以ALT ESC 键来取而代之) DEL 意指退格键 (不是 删除(Delete) key) ...

2012-06-21 · 2 min · 303 words · -

TFS

TFS TFS 2010 是微软的软件开发生命周期管理(ALM)套件的核心服务器端,将MTLM与它进行紧密绑定更进一步凸显了微软软件生命周期管理软件的战略,并突出了Visual Studio 2010 Ultimate更多的敏捷特性。它不再只是面向开发人员或者是测试人员角色,而是要提供一个平台来有效协调和支持开发过程中各个角色,并使他们能够彼此紧密联系进行协作。

2012-06-07 · 1 min · 7 words · -

Install msysgit

Install msysgit Choose the Run Git from the Windows Command Prompt option Choose the Use (Tortoise)Plink option Choose the Checkout as-is, commit as-is option

2012-06-04 · 1 min · 24 words · -

msysgit

msysgit Choose the Run Git from the Windows Command Prompt option Choose the Checkout as-is, commit as-is option

2012-04-25 · 1 min · 18 words · -

Moving The Ctrl Key

Moving The Ctrl Key http://emacswiki.org/emacs/MovingTheCtrlKey Microsoft Windows AutoHotkey On Windows you can use the AutoHotkey program which uses “scripts” to remap the keyboard. This method has a couple benefits. One is scripts can be compiled to a stand alone .exe file which can be executed on a machine that doesn’t have AutoHotkey. Another is, the key re-mapping can be set to only apply in emacs; the caps lock key will behave normaly in every other program. (If that’s what you want.) ...

2012-04-23 · 2 min · 214 words · -

git 冲突解决, conflict, <<< === >>>

git 冲突解决, conflict, «< === »> 远程文件覆盖本地文件 git pull 出现冲突后丢弃本地冲突文件修改,采用远程文件覆盖本地文件 git checkout git checkout test/src/main/resources/spring-shiro.xml 方法二 git pull 出现冲突后可以暂存本地修改 git stash ,然后git pull 更新代码,git stash list 可查看暂存记录列表,释放本地暂存 git stash apply stash@{0} ,出现冲突文件,找到并解决,然后可以提交git add . 加入索引库,然后本地提交git commit -m ‘注释’ 最后git push到远程 方法三 1.git pull 更新代码,发现 error: Your local changes to the following files would be overwritten by merge:pom.xml Please commit your changes or stash them before you merge. 这说明你的pom.xml与远程有冲突,你需要先提交本地的修改然后更新。 2.git add pom.xml ...

2012-04-22 · 1 min · 137 words · -

git repo backup

git repo backup git bundle create /tmp/somefile master 然后传输这个文件包, somefile ,给某个其他参与者: 电子邮件,优盘,一个 xxd 打印品和一个OCR扫描仪,通过电话读字节,狼烟,等等。接收者通过键入如下命 令从文件包获取提交: $ git pull somefile 接收者甚至可以在一个空仓库做这个。不考虑大小, somefile 可以包含整个原先 git仓库。 在较大的项目里,可以通过只打包其他仓库缺少的变更消除浪费。例如,假设提交 ‘`1b6d…‘‘是两个参与者共享的最近提交: $ git bundle create somefile HEAD ^1b6d 如果做的频繁,人可能容易忘记刚发了哪个提交。帮助页面建议使用标签解决这个问题。 即,在你发了一个文件包后,键入: $ git tag -f lastbundle HEAD 并创建较新文件包,使用: $ git bundle create newbundle HEAD ^lastbundle http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/zh_cn/ch06.html http://stackoverflow.com/questions/2129214/backup-a-local-git-repository

2012-04-03 · 1 min · 50 words · -

git 团队协作, Github flow

git 团队协作, Github flow 团队协作中的 Github flow 工作流程 https://zhuanlan.zhihu.com/p/39148914 GitHub flow https://githubflow.github.io/ https://insights.thoughtworks.cn/real-agile-workflow-github-flow/

2012-03-20 · 1 min · 13 words · -

gitignore

gitignore 忽略子目录下所有某后缀的文件 **/*.iml 具体使用请看 man gitignore 一般某个项目dev过程中都会产生一些中间文件,这些文件是我们不想要追踪的。 git中可以使用.gitignore文件来忽略这些文件。 在需要的目录下面 添加 .gitignore文件 文件中每一行表示需要忽略的文件的正则表达式。 cat .gitignore .metadata # ignore obj and lib file *.[oa] 当前的目录情况 $ls -al total 24 drwxr-xr-x 4 root root 4096 2010-12-11 12:44 . drwx– 51 root root 4096 2010-12-11 12:44 .. drwxr-xr-x 8 root root 4096 2010-12-11 12:44 .git -rw-r-r- 1 root root 39 2010-12-11 12:44 .gitignore drwxr-xr-x 3 root root 4096 2010-08-19 20:01 .metadata -rw-r-r- 1 root root 52 2010-12-11 12:41 test.txt ...

2012-02-25 · 1 min · 181 words · -

emacs org mode

emacs org mode Emacs 22 以后的版本已经集成了 org-mode,打开 .org 扩展的文件会自动进入 org 模式。 增减一个TODO项目的优先级 S-Up/Down move subtree/list item up/down M-S-UP/DOWN promote/demote heading M-LEFT/RIGHT insert new TODO entry/checkbox item M-S-RET insert TODO entry/ckbx after subtree C-S-RET C-RET加入新的同级标识 M-left将当前项提升一级 M-right将当前项降低一级 M-S-left将当前分支提升一级 M-S-right将当前分支降低一级 M-S-up将当前分支向上移动 M-S-down将当前分支向下移动 C-c C-x C-k删除当前分支 C-c C-x M-w复制当前分支 C-c C-x C-y粘贴分支 C-c C-w移动当前分支 C-c *为当前分支加入内容 3.1 关于TODO ITEM的基本知识和操作 设置TODO项目所有标题只要以TODO开头,就会变成TODO 项目。例如: *** TODO 付手机费 *** TODO 开会 更改TODO项目的状态 C-c C-t Rotate the TODO state of the current item among ...

2012-02-17 · 1 min · 133 words · -

设置 Emacs 的编码格式

设置 Emacs 的编码格式 查看一下 Emacs 读取文件用的编码格式。 M-x describe-coding-system 把 Emacs 的默认编码设置为 UTF-8。 在 .emacs 文件里放入下面这段代码: [lisp] ;;set the default text coding system (setq default-buffer-file-coding-system ‘utf-8) [/lisp] 可是即使我加了上面这条语句,为什么 Emacs 依然显示 org 文件为乱码呢? 原来上面这一行,只是适用于写文件的情况。当你读取一个文件的时候,可能依然会显示出乱码,因为 Emacs 读文件也是按照一定的编码规律来解读文件的。我们再用命令 M-x describe-coding-system 仔细观察一下结果里面的内容,是不是有类似下面这样一段: Priority order for recognizing coding systems when reading files: 1. iso-latin-1 (alias: iso-8859-1 latin-1) 2. utf-8 (alias: mule-utf-8) 3. iso-2022-7bit 4. iso-2022-7bit-lock (alias: iso-2022-int-1) 5. iso-2022-8bit-ss2 6. emacs-mule 7. raw-text 8. iso-2022-jp (alias: junet) 9. in-is13194-devanagari (alias: devanagari) 10. chinese-iso-8bit (alias: cn-gb-2312 euc-china euc-cn cn-gb gb2312) 11. utf-8-auto 12. utf-8-with-signature 13. utf-16 14. utf-16be-with-signature (alias: utf-16-be) 15. utf-16le-with-signature (alias: utf-16-le) 16. utf-16be 17. utf-16le 18. japanese-shift-jis (alias: shift_jis sjis cp932) 19. undecided 这就是 Emacs 在读文件时候的解码顺序!如果你的文件是以英文开头,自然会套用第一种方法。这个时候,我们还需要调整一下这个编码的先后次序。用命令 M-x prefer-coding-system 就可以调整这些顺序。调整完顺序,再打开 org 文件看一看,终于恢复原貌了。 如果你只是用命令 M-x prefer-coding-system 来设置,下次重启 Emacs 的时候,这个设置就会自动清除。如果需要每次都采用这个设置,可以把下面这行扔到 .emacs 里指定优先用 utf-8 来解码: (prefer-coding-system ‘utf-8) ...

2011-12-27 · 1 min · 145 words · -

分布式ID, 雪花算法

分布式ID, 雪花算法 https://zhuanlan.zhihu.com/p/85837641 雪花算法这一在分布式架构中很常见的玩意,但一般也不需要怎么去深入了解,一方面一般个人项目用不到分布式之类的大型架构,另一方面,就算要用到,市面上很多ID生成器也帮我们完成了这项工作。 分布式ID的特点 全局唯一性 不能出现有重复的ID标识,这是基本要求。 递增性 确保生成ID对于用户或业务是递增的。 高可用性 确保任何时候都能生成正确的ID。 高性能性 在高并发的环境下依然表现良好。 分布式ID的常见解决方案 UUID Java自带的生成一串唯一随机36位字符串 (32个字符串+4个“-”)的算法。它可以保证唯一性,且据说够用N亿年,但是其业务可读性差,无法有序递增。 SnowFlake 今天的主角雪花算法,它是Twitter开源的由64位整数组成分布式ID,性能较高,并且在单机上递增。 具体参考: https://github.com/twitter-archive/snowflake UidGenerator UidGenerator是百度开源的分布式ID生成器,其基于雪花算法实现。 具体参考: https://github.com/baidu/uid-generator/blob/master/README.zh_cn.md Leaf Leaf是美团开源的分布式ID生成器,能保证全局唯一,趋势递增,但需要依赖关系数据库、Zookeeper等中间件。 具体参考: https://tech.meituan.com/MT_Leaf.html 雪花算法的概要 SnowFlake是Twitter公司采用的一种算法,目的是在分布式系统中产生全局唯一且趋势递增的ID。 组成部分 (64bit) 1.第一位 占用1bit,其值始终是0,没有实际作用。 2.时间戳 占用41bit,精确到毫秒,总共可以容纳约69年的时间。 3.工作机器id 占用10bit,其中高位5bit是数据中心ID,低位5bit是工作节点ID,做多可以容纳1024个节点。 4.序列号 占用12bit,每个节点每毫秒0开始不断累加,最多可以累加到4095,一共可以产生4096个ID。 SnowFlake算法在同一毫秒内最多可以生成多少个全局唯一ID呢:: 同一毫秒的ID数量 = 1024 X 4096 = 4194304

2011-11-12 · 1 min · 49 words · -

Repository write access denied

Repository write access denied Repository write access denied manually add public key to /home/git/.ssh/authorized_keys start with : command=“python /home/www/indefero/scripts/gitserve.py USER”,no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa**

2011-11-03 · 1 min · 21 words · -

emacs format, 格式化

emacs format, 格式化 http://www.blogjava.net/killme2008/archive/2011/07/26/355041.html 格式化源码是很常见的需求,emacs有个indent-region函数用于格式化选定的代码,前提是你处在某个非text mode下,如c-mode或者java-mode之类。如果要格式化整个文件,你需要先选定整个文件(C-x-h),然后调用indent-region (或者 C-M-\ )。两个命令总是麻烦,我们可以定义个函数搞定这一切,并绑定在一个特定键上,实现一键格式化: ;;格式化整个文件函数 (defun indent-whole () (interactive) (indent-region (point-min) (point-max)) (message "format successfully")) ;;绑定到F7键 (global-set-key [f7] 'indent-whole) 将这段代码添加到你的emacs配置文件 (~/.emacs),重启emacs,以后格式化源码都可以用F7一键搞定。 整理整个文件 M-x mark-whole-buffer 或者 C-x h //选中整个文件 M-x indent-region 或者 C-M- //格式化选中 整理某个函数 M-x mark-defun 或者 C-M-h //选中函数 M-x indent-region 或者 C-M- //格式化

2011-09-21 · 1 min · 49 words · -

zoom

zoom Zoom国际版 Zoom国际版,顾名思义,全球使用,支持15个数据中心相互通信。 Zoom国际版启动的数据中心在美国,中国用户无法安排 (发起)会议。 会议的发起者即便是在海外,没有选择中国数据中心 (非默认选项),那么国内的参会者将无法加入到会议中,一般显示错误代码1044,,或是102005、104101、104118、103011等。 国内客户只能使用vpn,否则将无法参会。 Zoom中国版 (国内版) 直联电信、移动、联通三大运营商的主干网,并由阿里云、百度云、华为云、腾讯云这四家云服务商提供数据加密和网关安全等服务。 非法的Zoom开发版 (第三方) http://www.zoom-chn.com/index.php/fuwuxiangmu/21.html

2011-09-06 · 1 min · 14 words · -