Git Worktree

是什么 一个 Git 仓库(一份 .git 目录)可以同时关联多个"工作树"(working tree),每个工作树是磁盘上一个独立的目录,各自可以检出不同的分支。也就是说不用反复 git checkout 切换分支、不用为了同时看两个分支的代码而 git clone 出第二份仓库。 普通仓库只有一个工作树(主工作树,main worktree);git worktree 可以在此基础上新增若干"链接工作树"(linked worktree),它们共享同一个 .git 对象库(commit、blob、tree 等),但有各自独立的工作区和索引(index)。 典型场景 紧急修 bug:正在 feature-a 分支开发到一半,不想 stash,直接开一个新工作树检出 main 改 hotfix,改完切回来继续原来的活。 同时对比多个分支的代码,或者在一个分支跑测试的同时在另一个分支继续写代码。 CI / 构建场景:需要同时构建多个分支时,避免重复克隆仓库浪费磁盘和时间。 review 别人的 PR:新建一个工作树检出对方分支,本地起服务验证,不影响自己当前的工作区。 常用命令 # git worktree add <path> [<branch>] # path 是新工作树的目录(不能已存在),branch 是要检出的分支 # 新建一个工作树,并基于新分支 feature-x(自动创建) git worktree add ../feature-x feature-x # 基于已存在的分支创建工作树 git worktree add ../hotfix hotfix-branch # -b <new-branch>:基于 commit-ish(这里是 main)新建分支并检出,一步完成 git worktree add -b hotfix-branch ../hotfix main # 基于某个 commit/tag 创建一个游离状态(detached HEAD)的工作树 git worktree add ../review v1.2.0 # 查看当前仓库关联的所有工作树 git worktree list # 删除一个工作树(目录和 Git 的关联记录一起清理) git worktree remove ../feature-x # 工作树目录被手动删掉了,用这个清理 Git 内部残留的记录 git worktree prune # 防止某个工作树被 prune 误删(比如它在一个可能断线的移动硬盘上) git worktree lock ../feature-x git worktree unlock ../feature-x 注意事项 同一个分支不能同时被两个工作树检出:main 分支已经在主工作树里检出了,就不能在另一个工作树里再检出一次 main,Git 会报错拒绝,这是为了避免同一分支在两处被修改造成冲突。 工作树目录是普通目录,删除前建议先 git worktree remove:直接 rm -rf 目录后,Git 会认为这个工作树"丢了",需要用 git worktree prune 清理记录,否则 git worktree list 里还会显示一个失效条目。 共享 .git 对象库:多个工作树之间共享 commit 历史和暂存的对象,占用磁盘远小于多次 clone;但每个工作树有独立的索引和 HEAD,互不影响。 链接工作树内部会生成一个 .git 文件(不是目录),内容指向主仓库 .git/worktrees/<name> 下的元数据。 锁定(lock) 锁定是 Git 自带的功能,不是哪个工具额外加的。锁定的工作树会被 Git 保护起来,不会被清理掉、移动或删除。 ...

Created 5056-07-05 · Updated 12126-10-12 · 2 min · 342 words · -

javadoc

javadoc eclipse 在项目列表中按右键,选择Export (导出) ,然后在Export(导出)对话框中选择java下的javadoc. Java8下 忽略Javadoc编译错误 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> <version>2.10.3</version> <executions> <execution> <id>attach-javadocs</id> <goals> <goal>jar</goal> </goals> <configuration> <additionalparam>-Xdoclint:none</additionalparam> </configuration> </execution> </executions> </plugin> http://www.javajia.com/JAVAbiancheng/7713.html 维护记录 时间 修改内容 原因 2026-10-09 修复本地 Hugo 构建的 Raw HTML 警告:代码/配置放入代码块,正文中的尖括号占位符改为行内代码 正文中的 HTML/XML 片段被当作原始 HTML 丢弃;文件名/URL/标题按规范调整

Created 28286-08-28 · Updated 9096-10-09 · 1 min · 40 words · -

Emacs org-mode TODO 状态

emacs org-mode TODO状态 https://qiwulun.github.io/posts/org-mode%E5%B8%B8%E7%94%A8%E5%8A%9F%E8%83%BD%EF%BC%8D%EF%BC%8DTODO%E7%8A%B6%E6%80%81%E4%B8%8E%E5%A4%8D%E9%80%89%E6%A1%86.html org-mode常用功能--TODO状态与复选框 快捷键 t 将当前项的状态在 (unmarked) ->TODO->DONE 之间循环切换 =,/= 各种稀疏树的检索形式 =,T= / C-c / t 在稀疏树中显示 TODO 项,同时显示 TODO 项和它们所在的层次的标题 =, a t= / SPC a o t (agenda) 显示全局 TODO 列表,将从所有的议程文件中收集 TODO 项到一个缓冲区中 S-M-RET 在当前项下插入一个新的 TODO 项 格式 定义 用 TODO 关键字来定义不同的状态,用以处理项,比如: (setq org-todo-keywords '((sequence "TODO" "FEEDBACK" "VERIFY" "|" "DONE" "DELEGATED"))) 竖直线将 TODO 关键字 (还需要进一步的动作) 和 DONE 状态 (不需要进一步的动作) 分隔开。如果你不给出竖直线,最后一个状态会作为 DONE 状态。设置之后,C-c C-t 就会将状态从 TODO 转换到 FEEDBACK,再转换到 VERIFY,最后到 DONE 和 DELEGATED。 ...

Created 11116-12-11 · Updated 9096-10-09 · 7 min · 1310 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) ...

Created 21216-06-21 · Updated 9096-10-09 · 2 min · 319 words · -

android adb

android adb macos install adb brew install --cask android-platform-tools http://blog.sina.com.cn/s/blog_51335a000101j59n.html 启动adb服务, 该服务用来为模拟器或通过 USB 数据线连接的真机服务, 需要以 root 权限启动, 否则 adb devices 会提示 no permissions. adb kill-server adb start-server 列出已连接的android设备 adb devices 安装apk adb install xxx/xxx.apk adb shell 在SDK的Tools文件夹下包含着Android模拟器操作的重要命令ADB,ADB的全称为Android Debug Bridge,就是调试桥的作用,借助这个工具,我们可以管理设备或手机模拟器的状态 ,还可以进行以下的操作: (1) 快速更新设备或手机模拟器中的代码,如应用或Android系统升级; (2) 在设备上运行Shell命令; (3) 管理设备或手机模拟器上的预定端口; (4) 在设备或手机模拟器上复制或粘贴文件。 ADB的工作方式比较特殊采用监听Socket TCP 5554等端口的方式让IDE和Qemu通信,默认情况下ADB会daemon相关的网络端口,所以当我们运行Eclipse时ADB进程就会自动运行,在Eclipse中通过DDMS来调试Android程序;也可以通过手动方式调用,以下为一些常用的操作供参考。 1.版本信息 D:\unsetup\android-sdk-windows-1.0_r1\tools>adb version Android Debug Bridge version 1.0.20 2.安装应用到模拟器 adb install [-l] [-r] <file> 其中file是需要安装的apk文件的决定路径。 3.卸载已经安装的应用 (1) 方法1: adb uninstall [-k] <package>。 其中package表示需要卸载的应用的包的名字,k表示是否保留应用的配置信息和cache数据。 ...

Created 23236-06-23 · Updated 9096-10-09 · 4 min · 702 words · -

obsidian

obsidian # archlinux pacman -S obsidian https://forum-zh.obsidian.md/ flatpak install flathub md.obsidian.Obsidian flatpak run md.obsidian.Obsidian https://decoge.medium.com/how-to-install-obsidian-on-a-chromebook-53e379217adf install plugin: remotely save Obsidian> settings> community plugins> turn on community plugins> browse search remotely save and install and enable config s3 storage: setting> community plugins> remotely save Choose A Remote Service: S3 or compatible endpoint: s3.ap-southeast-1.amazonaws.com region: ap-southeast-1 ak: <check in bitwarden> sk: <check in bitwarden> bucket name: obsidian-w10n 调整页边距 解决编辑区域过窄的问题 Obsidian> settings> Editor> Readable line length: diable ...

Created 12126-01-12 · Updated 9096-10-09 · 1 min · 92 words · -

APK 编译、反编译, AXMLPrinter2, smali, baksmali

apk 编译,反编译,AXMLPrinter2,smali,baksmali http://blog.csdn.net/android_tutor/article/details/5724435 1.AXMLPrinter2.jar 2.baksmali.jar 3.smali.jar 三、准备工作 为了方便起见,作者把AXMLPrinter2.jar, 还有baksmali.jar,还有smali.jar(下下来为了方便重命名),放在Android SDK tools文件夹中如下图所示: 为了便于大家更容易程序比对,作者写了一个简单的应用(叫APKInstaller)目录结构如下图所示: 四、开始拿来主义 1.用 AXMLPrinter2.jar查看apk中的布局xml文件: 将ApkInstaller应用生成的ApkInstaller.apk(为了方便起见放到tools目录里)用WinRAR等 工具打开,将res/layout/main.xml解压出来(也还是放在tools目录里哦) 打开main.xml文件,内容如下(一堆天文): 这时候AXMLPrinter2.jar派上用场了,打开cmd终端,一直进入到tools目录下,输入如下命令: java -jar AXMLPrinter2.jar main.xml > main.txt. (如下图所示) 打开main.txt代码如下(是不是有个123了呵呵~): <?xml version="1.0" encoding="utf-8"?> <WebView android:id="@7F050000" android:layout_width="-1" android:layout_height="-2" > </WebView> </LinearLayout> 为了比对打开源程序中的main.xml代码如下(大家比对一下吧): <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" <WebView android:id="@+id/apk_web" android:layout_height="wrap_content" android:layout_width="fill_parent" /> </LinearLayout> 2.用baksmali.jar反编译classes.dex: 将ApkInstaller.apk里的classes.dex解压到tools目录里,然后baksmali.jar就派上用场了,在cmd命令行里输入如下命令: java -jar baksmali.jar -o classout/ classes.dex .(如下图所示:) 你将会发现在tools里多一个classout文件夹里面(我代码的包目录结构清晰可见呀),如下图所示: 从上面看出除了Android本身资源的类R开头的,我的源程序里只有一个ApkInstaller.java,完全吻合,真TMD的猥琐呵呵~ 下面我们看一下ApkInstaller.smali内容是什么,如以下代码: .class public Lcom/tutor/apkinstaller/ApkInstaller; .super Landroid/app/Activity; .source "ApkInstaller.java" # instance fields .field private apkWeb:Landroid/webkit/WebView; # direct methods .method public constructor <init>()V .registers 1 .prologue .line 8 invoke-direct {p0}, Landroid/app/Activity;-><init>()V return-void .end method # virtual methods .method public onCreate(Landroid/os/Bundle;)V .registers 5 .parameter "savedInstanceState" .prologue .line 13 invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V .line 14 const/high16 v2, 0x7f03 invoke-virtual {p0, v2}, Lcom/tutor/apkinstaller/ApkInstaller;->setContentView(I)V .line 15 const/high16 v2, 0x7f05 invoke-virtual {p0, v2}, Lcom/tutor/apkinstaller/ApkInstaller;->findViewById(I)Landroid/view/View; move-result-object v2 check-cast v2, Landroid/webkit/WebView; iput-object v2, p0, Lcom/tutor/apkinstaller/ApkInstaller;->apkWeb:Landroid/webkit/WebView; .line 16 iget-object v2, p0, Lcom/tutor/apkinstaller/ApkInstaller;->apkWeb:Landroid/webkit/WebView; invoke-virtual {v2}, Landroid/webkit/WebView;->getSettings()Landroid/webkit/WebSettings; move-result-object v1 .line 17 .local v1, webSettings:Landroid/webkit/WebSettings; const/4 v2, 0x1 invoke-virtual {v1, v2}, Landroid/webkit/WebSettings;->setJavaScriptEnabled(Z)V .line 19 const-string v0, "http://frankiewei.net/apk/demos/main/index.html#home" .line 20 .local v0, apkUrl:Ljava/lang/String; iget-object v2, p0, Lcom/tutor/apkinstaller/ApkInstaller;->apkWeb:Landroid/webkit/WebView; invoke-virtual {v2, v0}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V .line 21 return-void .end method 同样为了比对我们看一下ApkInstaller.java的源代码如下: ...

Created 14146-04-14 · Updated 9096-10-09 · 2 min · 269 words · -

apktool APK 解压、打包

apktool APK解压、打包 keytool -genkey -alias JFrench.keystore -keyalg RSA -validity 1000000 -keystore JFrench.keystore jarsigner -verbose -keystore E:\projects\keystore\JFrench.keystore -s ignedjar JFrench_signed.apk foo.apk JFrench.keystore http://showlike.iteye.com/blog/1686103 http://blog.csdn.net/jesusjzp/article/details/7922451 apktool之APK解压、打包 http://blog.csdn.net/caszhao/article/details/6030425 博客分类: java apktoolandroidjava 简介: Android apktool是一个用来处理APK文件的工具,可以对APK进行反编译生成程序的源代码和图片、XML配置、语言资源等文件,也可以添加新的功能到APK文件中。用该工具来汉化Android软件然后重新打包发布是相当简单的。 安装 .首先安装需要JAVA环境,先下载JDK/JRE,点击下载,已经有JAVA环境的可跳过此步 .到code.google上下载apktool.jar以及相关文件: http://code.google.com/p/android-apktool/downloads/list 点击下载apktool1.4.3.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2 .解压apktool-install-windows-r04-brut1.tar.bz2到任意文件夹,然后解压apktool1.4.3.tar.bz2,把apktool.jar拷贝至apktool-install-windows-r04-brut1.tar.bz2解压所在的文件夹下,此时文件下有aapt.exe、apktool.bat及apktool.jar三个应用。 .点击开始菜单,运行,输入CMD回车,用cd命令转到刚刚解压的D:\My Documents\Desktop\apktool-install-windows-r04-brut1所在的文件夹,输入apktool,出现如下命令即说明安装成功 (以下信息,即apktool使用命令) 。 D:\My Documents\Desktop\apktool-install-windows-r04-brut1>apktool Apktool v1.4.3 - a tool for reengineering Android apk files Copyright 2010 Ryszard Wi?niewski <brut.alll@gmail.com> Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0) Usage: `apktool [-q|-quiet OR -v|-verbose] COMMAND [...]` COMMANDs are: d[ecode] [OPTS] <file.apk> [<dir>] Decode <file.apk> to <dir>. OPTS: -s, -no-src Do not decode sources. -r, -no-res Do not decode resources. -d, -debug Decode in debug mode. Check project page for more info. -f, -force Force delete destination directory. -t <tag>, -frame-tag <tag> Try to use framework files tagged by <tag>. -keep-broken-res Use if there was an error and some resources were dropped, e.g.: "Invalid config flags detected. Dropping resources", but you want to decode them anyway, even with errors. You will have to fix them manually before building. b[uild] [OPTS] [] [<out_file>] Build an apk from already decoded application located in . It will automatically detect, whether files was changed and perform needed steps only. If you omit then current directory will be used. If you omit <out_file> then /dist/<name_of_original.apk> will be used. OPTS: -f, -force-all Skip changes detection and build all files. -d, -debug Build in debug mode. Check project page for more info. if|install-framework <framework.apk> [<tag>] Install framework file to your system. For additional info, see: http://code.google.com/p/android-apktool/ 使用 .解压APK D:\My Documents\Desktop\apktool-install-windows-r04-brut1>apktool d F:\document\APK\PushAd.apk F:\document\app ...

Created 24246-09-24 · Updated 9096-10-09 · 2 min · 344 words · -

Nutch hello world

Nutch hello world download and install ant download and install Cygwin download HBase 0.94.14 http://mirrors.cnnic.cn/apache/hbase/stable/hbase-0.98.9-hadoop2-bin.tar.gz config java_home in .bashrc Download a source package http://mirror.bit.edu.cn/apache/nutch/2.2.1/ cd apache-nutch-2.2.1 Run ant Now there is a directory runtime/local which contains a ready to use Nutch installation. Customize your crawl properties Add your agent name in the value field of the http.agent.name property in conf/nutch-site.xml, for example: <property> <name>http.agent.name</name> <value>My Nutch Spider</value> </property> Edit the file conf/regex-urlfilter.txt and replace ...

Created 6066-01-06 · Updated 9096-10-09 · 1 min · 199 words · -

Linux JMeter 分布式测试

linux jmeter 分布式测试 http://www.51testing.com/html/55/383255-847895.html 我将使用3台linux测试机部署jmeter,部署方法也是非常简单,打包后放在指定的目录就ok了, 先定义了 A服务器:控制机 B C服务器为负载机 主意如果要运行jmeter一定要安装1.6以上版本的jdk并正确配置环境变量, 首先在bin目录下 启动B C 服务器 jmeter的jmeter-server服务器,如果启动报错请根据报错内容检查对应的环境配置,我这边报错的原因是hosts没有指定地址, jmeter-server正常启动会提示"创建远程服务" 接下来是准备测试脚本,可以在windows环境下先创建jmx文件,主意最好不要添加监听器,应为命令行启动的话监听器可能会占用资源而且有没有任何视图效果. 将生成好的jmx文件上传到A服务器 jmeter目录的bin目录下,然后在bin目录下创建xx.jtl文件.jtl文件用来接收测试中产生的测试结果 好了 现在进bin目录 打入启动命令,当然你也可以用绝对路径来运行启动命令 ./jmeter -n -t xx.jmx -R B服务器ip,C服务器ip -l $jmeterpath/bin/xx.jtl 参数说明 : -n 告诉jmeter使用nogui模式运行测试 -t 执行的测试脚本名 -R 后面跟随负载机的ip地址 ,注意用逗号隔开 -l 后面跟着测试结果记录的路径与文件名,主意这个文件jmeter不会自己创建,请预先创建好, 万事俱备 按下回车 ! 就开始虐待你的测试项目吧 测试完成后把xx.jtl文件下载到windows机上在不同的监听器上分析测试结果 如果想修改测试脚本,起始也不必把脚本在windows机上打开gui界面修改,直接编辑.jmx文件 你就可以看到许多熟悉的名字,这里就简单介绍几个 </elementProp> <stringProp name="ThreadGroup.num_threads">5</stringProp> <stringProp name="ThreadGroup.ramp_time">5</stringProp> <longProp name="ThreadGroup.start_time">1281132211000</longProp> <longProp name="ThreadGroup.end_time">1281132211000</longProp> <boolProp name="ThreadGroup.scheduler">true</boolProp> <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> <stringProp name="ThreadGroup.duration">60</stringProp> <stringProp name="ThreadGroup.delay">5</stringProp> </ThreadGroup> 看吧xml格式的测试脚本,很清楚则么改了吧 ThreadGroup.num_threads 线程数 ThreadGroup.ramp_time 全部线程启动完成的时间 ThreadGroup.duration 测试的持续时间 还是很容易看明白的.哈哈 这次测试运维把tomcat的内存占用开到了36g 并发线程开到了500万 但是最终在jmeter800线程的压力下还是变成了僵尸进程. 维护记录 时间 修改内容 原因 2026-10-09 修复本地 Hugo 构建的 Raw HTML 警告:代码/配置放入代码块,正文中的尖括号占位符改为行内代码;文件重命名为 jmeter-distributed-testing.md;title 改为「Linux JMeter 分布式测试」;url 改为 jmeter-distributed-testing;旧 url 加入 aliases;categories 改为 Tools 正文中的 HTML/XML 片段被当作原始 HTML 丢弃;文件名/URL/标题按规范调整

Created 16166-09-16 · Updated 9096-10-09 · 1 min · 104 words · -

sdkman

sdkman #install curl -s http://get.sdkman.io | bash sdk list gradle sdk install gradle sdk install gradle 4.2 sdk default gradle 4.2 http://blog.csdn.net/jjlovefj/article/details/51103578 1.sdkman介绍 sdkman(The Software Development Kit Manager), 中文名为:软件开发工具管理器.这个工具的主要用途是用来解决在类unix操作系统(如mac, Linux等)中多种版本开发工具的切换, 安装和卸载的工作.对于windows系统的用户可以使用Powershell CLI来体验. 例如: 项目A使用Jdk7中某些特性在后续版本中被移除 (尽管这是不好的设计) ,项目B使用Jdk8,我们在切换开发这两个项目的时候,需要不断的切换系统中的JAVA_PATH,这样很不方便,如果存在很多个类似的版本依赖问题,就会给工作带来很多不必要的麻烦. sdkman这个工具就可以很好的解决这类问题,它的工作原理是自己维护多个版本,当用户需要指定版本时,sdkman会查询自己所管理的多版本软件中对应的版本号,并将它所在的路径设置到系统PATH. 2.安装 直接打开终端,执行如下命令: $ curl -s http://get.sdkman.io | bash 上面的命令的含义: 首先sdkman官网下载对应的安装shell script,然后调用bash解析器去执行. 接下来,你需要打开一个新的终端窗口,执行命令: $ source “$HOME/.sdkman/bin/sdkman-init.sh” 再次之后,可以通过输入sdk help确认安装是否完成. jiangjian@jiangjian-ThinkPad-E450c:~$ sdk help Usage: sdk <command> [candidate] [version] sdk offline <enable|disable> commands: install or i <candidate> [version] uninstall or rm <candidate> <version> list or ls [candidate] use or u <candidate> [version] default or d <candidate> [version] current or c [candidate] ...

Created 1016-07-01 · Updated 9096-10-09 · 2 min · 322 words · -

Git HEAD

Git HEAD 当你提交(commit)新更改时,HEAD 会随着分支一起移动到新的提交。 当你切换分支(比如用 git checkout 或 git switch),HEAD 会改变指向,指向你切换到的分支。 这个 HEAD 随你切换分支而变化,始终指向你“当前所在”的分支或 commit。 你在 main 分支,HEAD 内容是 ref: refs/heads/main 你切换到 dev 分支,HEAD 变为 ref: refs/heads/dev 你 checkout 某个历史 commit,HEAD 内容是该 commit 的 SHA(分离 HEAD 状态) # 正常情况下(attached HEAD),HEAD 是一个符号引用,指向当前分支 # 本地 HEAD 通常指向分支,而不是直接指向提交 cat .git/HEAD # 输出:ref: refs/heads/main # 1. HEAD 指向 main 分支 # 2. main 分支指向它的最新提交 # 3. HEAD 通过分支间接指向最新提交 # HEAD -> 分支 -> 最新提交 # HEAD → refs/heads/main → commit_abc123 # 查看 HEAD 指向的分支 git symbolic-ref HEAD # 输出:refs/heads/main # 查看 HEAD 最终指向的提交 git rev-parse HEAD # 输出:abc123...(提交SHA) git rev-parse HEAD # 获取当前HEAD指向的提交SHA git rev-parse main # 获取main分支的最新提交SHA cat .git/refs/heads/main # 直接查看分支文件内容(提交SHA) detached HEAD # 当检出具体 commit 时,HEAD 直接指向提交 git switch --detach commit_abc123 cat .git/HEAD # 输出:commit_abc123...(直接是提交SHA,不是 ref: 开头) # 此时 HEAD 直接指向提交,不通过分支 HEAD 的作用是告诉 Git “我现在在哪里工作” ...

Created 3036-08-03 · Updated 9096-10-09 · 5 min · 863 words · -

reveal.js, markdown > PPT

‘reveal.js, markdown > PPT’ 快捷键 全屏 f , 退出全屏 Esc 上一页 p, 下一页 n/空格 首页 Home, 末页 End 缩略图 Esc 或 o 黑屏 b 演讲提示模式 s vi导航键: h, j, k, l 帮助页面: ? 字号 reveal.js的markdown支持4种字号#,##,###,#### 安装 # install nodejs sudo pacman -S nodejs # install npm sudo pacman -S npm # git clone reveal.js git clone https://github.com/hakimel/reveal.js.git cd reveal.js npm install mv index.html index.html.bak ln -s scrum/index.html index.html npm start npm start -- --port=8001 <section data-markdown="example.md" data-separator-notes="^Note:" data-charset="UTF-8"> </section> 内容左对齐 <style> .reveal .slides { text-align: left; } .reveal .slides section>* { margin-left: 0; margin-right: 0; } </style> 插入图片并控制样式 路径是相对于 index.html 的路径 ...

Created 16166-04-16 · Updated 9096-10-09 · 1 min · 130 words · -

Git 中 .gitignore 与 .gitkeep

.gitignore .gitignore 用来告诉 Git 哪些文件或目录不需要纳入版本控制。 一般在项目开发过程中会产生很多中间文件(例如构建产物、日志、IDE 临时文件),这些文件不适合提交到仓库。通过 .gitignore,可以让 git status 更干净,也能减少误提交。 .gitkeep 则是另一个常见约定:它通常是一个空文件,放在原本为空的目录里用于占位。因为 Git 只跟踪文件,不直接跟踪空目录,所以如果希望目录结构被保留下来(例如 logs/、tmp/),就可以在目录中放一个 .gitkeep 并提交。 常见组合方式: logs/ !logs/.gitkeep 上面的规则表示忽略 logs/ 目录里的运行时文件,但保留 logs/.gitkeep 这个占位文件。 忽略子目录下所有某后缀的文件 **/*.iml 具体使用请看 man 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 ...

Created 25256-02-25 · Updated 4046-06-04 · 1 min · 204 words · -

git merge, git rebase

git merge git rebase interactive rebase Join two or more development histories together merge 合并 用于将两个或多个分支的更改合并到一起。它通常用于将一个分支上的开发成果合并到当前分支(如将 feature 分支合并回 main 分支)。其主要作用是整合不同开发者或分支上的工作,保持代码库的统一和最新。 # 基本用法 # git merge <branch-name> # merge 默认会把 commit 的历史都合并进来 # 把 branch_0 合并到当前分支 git merge branch_0 # -m 参数用于指定合并提交(merge commit)的说明信息,即合并时生成的 commit message。 git merge branch_0 -m "MSG0" # 禁用 Fast forward git merge branch_0 -m "merge with no-ff" --no-ff 合并方式 Fast-forward(快进合并) 如果当前分支没有新的提交,仅仅是落后于目标分支,Git 会直接把指针向前移动到目标分支的位置,这种合并不会产生新的合并提交。快速合并,看不出做过合并。快进合并后不会留下一个明显的"feature 分支合并节点",只有一条线性的记录。 特点: 不创建 merge commit 分支指针直接前移 提交历史呈线性 无法看出曾经有分支存在 示意图: ...

Created 13136-02-13 · Updated 13136-02-13 · 11 min · 2185 words · -

vi basic, vim basic command

vi/vim basic, command commands vim -u NONE -N -n bigfile.txt # -u NONE: 不加载配置文件 # -u 后面跟的是要加载的配置文件路径。 # -u NONE:不加载任何配置,相当于“安全模式”或“干净模式”。 # -N: 启用现代兼容模式(非 Vi) # -n: 不创建 swap 文件 基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode) Command mode, 命令模式: 用户启动Vim之后,vim 默认是在命令模式。 Insert mode, 输入模式: i 切换到插入模式 Last line mode,底线命令模式: : 切换到底线命令模式 快捷键 ctrl + d 向下滚动半屏 ctrl + u 向上滚动半屏 基本插入 i: 在光标前插入;一个小技巧:按8,再按i,进入插入模式,输入=, 按 esc 进入命令模式,就会出现 8 个=。 这在插入分割线时非常有用,如`30i+<esc>`就插入了 36 个+组成的分割线。 I: 在当前行第一个非空字符前插入; gI: 在当前行第一列插入; a: 在光标后插入; A: 在当前行最后插入; o 小写 `o` 在当前行的下边插入新行, 在当前行的下边插入一行. O 大写 `O` 在当前行的上边插入新行. :r filename 在当前位置插入另一个文件的内容。 :[n]r filename 在第 n 行插入另一个文件的内容。 :r !date 在光标处插入当前日期与时间。同理,:r !command 可以将其它 shell 命令的输出插入当前文档。 escape/ESC 回到命令模式 ^v char 插入时忽略char的指定意义,这是为了插入特殊字符 vim 编辑二进制文件 # 注意用 -b,否则后面会有 0a vim -b test.bin # 以 16 进制格式查看 :%!xxd # 编辑完成后转换为二进制文件 :$!xxd -r :wq # force write :w! ### vim utf8 乱码 #### 查看文件编码 :set fileencoding # 临时显示行号 :set number # 不自动换行 :set nowrap # 自动换行 :set wrap 如果你只是想查看其它编码格式的文件或者想解决用 Vim 查看文件乱码的问题,那么你可以在 ~/.vimrc 文件中添加以下内容: ...

Created 15156-12-15 · Updated 15156-12-15 · 6 min · 1261 words · -

JetBrains, idea, basic

JetBrains, idea, basic file> open recent, 点击打开项目的同时按 ctrl 会在新窗口打开 jetbrain> Git, 选中分支名 Ctrl + C 会复制分支名 HiDPI https://intellij-support.jetbrains.com/hc/en-us/articles/360007994999-HiDPI-configuration search everywhere (shift shift)> “Show HiDPI Info” vm option help> edit custom vm options> add line “-Dsun.java2d.uiScale.enabled=true” JetBrains keys, 快捷键 列编辑/column selection mode, Alt+Shift+Insert, Alt+Shift+i Expand All, Ctrl+Shift+= goto line: Ctrl + g ctrl + shift + k, git push ctrl + alt + y, reload from disk ctrl + alt + f, find in files ctrl + n, Down ctrl + p, Up ctrl + f, Right ctrl + b, Left ctrl + [, Move caret to code block start ctrl + ], Move caret to code block end ctrl + shift + i, generate date ctrl + shift + f, find in file ctrl + alt + l, reformat code ctrl + shift + o, Run ctrl + shift + up, move statement up ctrl + shift + down, move statement down alt + sift + up, move line up CTRL+SHIFT+N 查找文件 ...

Created 9096-12-09 · Updated 9096-12-09 · 2 min · 417 words · -

Vim光标移动

Vim 光标移动 搜索结果之间跳转 文件之间移动 Vim 最大的特征与最大的困难就是键盘操作,所以快速移动光标是 Vim 的最基本技能。光标移动可以配合其他快捷键使用,比如 y, x, d, v,更好地掌握了光标移动也就更好地掌握了其他编辑技能。 上下左右:以字符为单位 进入 Vim 的 normal 模式(如果你在 visual 模式或者 insert 模式,可以按若干次 Esc 回到 normal 模式)。 h 向左移动一个字符。 j 向下移动一个字符。 k 向上移动一个字符。 l 向右移动一个字符。 和其他快捷键一样,可以配合数字来移动多个字符,比如 5l 向左移动 5 个字符。 以单词为单位移动 多数情况下单词移动比字符移动更加高效,比如要走到当前变量名前加一个 let。 w 移动到下一个单词的词首。 b 移动到上一个单词的词首。 e 移动到下一个单词的结尾。 单词移动同样支持数字前缀,比如 4w 可以向后移动 4 个单词。此外大写的 W, B, E 具有同样的功能,只不过小写用标点符号来分隔单词,大写用空格来分隔单词,更适合在代码里移动。 以行为单位移动 ^ 移动到行首第一个词的首字母。 | 移动到行首第一个字符。 $ 移动到行尾。 j 移动到下一行。 k 移动到上一行。 :10 移动光标到文件第 10 行。可以 :set number 来让 vim 显示行号。 gg 移动到文件首行。 G 移动到文件尾行。 上下行移动的命令同样可以加数字,比如 10j 向下移动 10 行。 ...

Created 22226-07-22 · Updated 22226-07-22 · 1 min · 184 words · -

vim 粘贴注释

vim 粘贴注释 vim在粘贴代码时会自动缩进,这样会把有注释的代码搞得一团糟,可能因为某行的一个注释造成后面的代码全部被注释掉,以前就是直接粘贴的,发现不得不解决这个自动添加注释的问题。 临时方法: vim 是自带缩进的,我们执行粘贴前需要设置为粘贴模式: set paste 当我们写代码时需要缩进,进而,在粘贴完了需要改回来: set no paste 一劳永逸方法: 为了避免麻烦,我们可以为vim设置快捷键: 在/etc/vim中,修改vimrc,追加代码: vim /etc/vim/.vimrc 追加代码: set pastetoggle=<F9> 这样你每次粘贴前就按一下F9,完事之后再F9切回来,OK! vim粘贴注释-解决方法 http://www.chenglin.name/linux/blog-linux/595.html/embed#?secret=QDy4MQGTrl

Created 22226-04-22 · Updated 22226-04-22 · 1 min · 23 words · -

开源镜像站, open source mirror

开源镜像站, open source mirror 清华 https://mirrors.tuna.tsinghua.edu.cn/ 华为 https://mirrors.huaweicloud.com/ 中科大 https://mirrors.ustc.edu.cn/help/dockerhub.html aliyun https://developer.aliyun.com/mirror/ 北京外国语大学开源软件镜像站 https://mirrors.bfsu.edu.cn/ http://mirrors.cqu.edu.cn http://mirrors.nju.edu.cn http://ftp.sjtu.edu.cn http://mirrors.bupt.edu.cn http://mirrors.cn99.com http://mirrors.bfsu.edu.cn http://mirrors.njupt.edu.cn

Created 13136-03-13 · Updated 13136-03-13 · 1 min · 21 words · -