如何从远程仓库上面把代码拉取到本地?打开,你们啊,这是我们自己刚才创建的一个仓库啊,如果说你们公司项目的仓库也一样啊。 呃,打开这个地这样的一个仓库,点击代码这里,然后点击这里。呃,特龙下载这里默认可能是 h t v s, 你要点击这个后面这个 s s h 拷贝啊,复制, 然后最小号,我这里就放到我电脑的 d 盘这里啊,因为我们之前是放到桌面的,是吧?这里是桌面的一个代码,我放到 d 盘这里,鼠标右键这里有个 get the best here, 你可以用它。当然你也可以用鼠标右键啊, 按住 shift 键,按住 shift 键,鼠标右键,然后有一个抛下窗口。嗯,用,我比较喜欢用抛下啊,在这里面你输入个命令 d ctrl 空格,然后鼠标右键 这里就会自动把我们刚才拷贝的内容粘贴到这里来。回车,放大一点,回车 啊,如果说出现这样的就是就是把代码已经克隆到本地了,哎,就会出现这样的一个仓库 啊,这是我们人的拿货的代码。没没没,多少,这是一个文件,还有一个点 d 的文件。鼠标右键啊,如果你安装了 v s 扣,你可以有一个扣的打开啊,那就打开,那这个就是我们刚刚克隆下来的代码。
粉丝9201获赞9.3万

来,我们看一下啊, get 常用命令有哪些啊?我这里它命令太多了啊,就是我们比较常用的啊,基本上,呃,我罗列到这了啊。嗯 呃,有 unit 啊,在当前目录创建一个仓库。这还有克隆啊,克隆一个。呃,地址后边跟一个参数是地址啊,将项目和它的整个历史下载到本地啊。呃, add 啊,后边跟的。我们可以跟多个文件啊, 添加指定文件到攒存区。呃,艾特后边也可以跟一个点,添加当前目录目录下所有的文件到攒存区。还有添加啊,就有删除啊, r m, 嗯,后边跟文件名的话,文件路径啊,完整的文件路径啊,删除指定的文件,并将这次删除放入攒存区。 看我看,嗯, r m 有 杠杠啊, catch 的 啊,后边加文件名,停止最终指定的文件,但该文件会保留在工作区啊。 嗯嗯, commit 啊,后边。嗯,杠 m, 后边再跟一个信息啊,我们自己往上添加个信息。这个比较常用啊,提交缓存区里的文件啊,到仓库 branch, 列出所有的分支啊,后边分别加不同的。你看,杠 r, 列出所有远程分远程的分支啊,杠 a, 列出所有的本地和远程的分支,后边呢是跟。嗯,那个分支名称的话是新建一个分支啊, 但是它不会跳转到这个新建的分支,是还在当前的分支下啊, check out 啊杠杠 b 啊,后边跟一个分支的名字啊,新建一个分支并切换到该分支,这是,呃,直接就。呃,和它上面这个不同的是,它会直接啊就切换到这个新创建的分支 啊,直接啊,如果没有杠币啊,这个参数,直接后边跟啊 checkout 后边跟这个分支名字啊,就切换到了指定分支啊,合并我们也比较常常用啊。 呃,我们需要注意点,它合并的时候是合并指定后边这个分支名名称啊,指定这个分支名到当前的分支啊, 嗯,杠 d 啊,那不是后到杠 d 啊,删除指定的分支啊,后边跟的是分支名称, 嗯,删除远程的分支名名称啊,那个那 push, 然后是杠杠 delete 啊, 后边再加远程分支名名称啊,删除远程分支。呃,剩下的就还是我们更常用的,就是将远。呃, 远程的。呃,这个代码。仓库,仓库啊,就是这个这个仓库啊,同步到本地,那铺铺式将本地仓同步到远程啊,还有查看状态啊,这都是我们经常会用到的。好,如果是作为面试题呢,我们其实很简单啊, 把这个 inn 了,或者是创建版本,创建分支啊和这个,嗯,铺式啊,查看状态之类的,我们,呃,说几个就可以了。好,就到这里啊,下课。
![屎山代码检测工具 [Github 开源项目] 别笑别人写屎山,先看看这工具给自己打了多少分
#屎山代码 #代码检测 #代码审查 #程序员 #编程](https://p3-pc-sign.douyinpic.com/image-cut-tos-priv/7f0a3518f65c2bcea4d3075f80c7f8af~tplv-dy-resize-origshort-autoq-75:330.jpeg?lk3s=138a59ce&x-expires=2093014800&x-signature=U7KGp3%2BqEHcmiF7ZTiWqmh4%2F1H4%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=pcweb_cover&l=20260502012046239AE89132D280AFE11E)
没有人能经得住这个工具的考验,这是 github 上一个专门揭露史山代码的质量分析工具,用犀利又搞笑的方式告诉你你的代码到底有多烂。他在 github 上居然干到了六千六百个 star。 安装和使用都很简单,就只有一条命令,既然他这么狂,先让他检测一下他自己拉取代码,执行命令。 自己的代码史山等级四十一分,齿气扑鼻,下面还有详细的分数,都在四十多分,他自己定义这个分数,算是编码界的一股清流。那我们用 ai 生成一个项目,检测一下 ai 的 史山等级, 过程直接略过,生成完成,上传到服务器进行检测, ai 生成的项目代码也是四十分左右。看来无论是人还是 ai, 写的代码都逃不过能跑就行的终极真理。你想检测哪个项目的代码?一起来试试吧!

本土化代码托管平台 getcode 大家好,我是卓一凡,这视频给大家介绍一下 getcode 的, 近期我们优亚草科技全面迁移到 getcode 的, 以前我们用的是 gett 啊,还有 getup, 在 getup 在 很多使用方面肯定是没有那么方便的,首先科学上网就不用说了,肯定是必须的,然后还是有很多反反正不太方便的东西,我就不一一说了。 然后现在给大家说一下这个 getcode 的 吧,这次我们就开始决定今年全面迁移,因为我们有大概两百多个库啊,迁移起来是比较累的,但是我们又发现 getcode 的 它可以批量迁移。 本次我们迁移的话,主要有三点,第一啊,托管平台都是很贵的,以前我们是两千多一年,现在这个是给扣的,暂时免费,所以我们迁过去。第二点支持给配机,给配机是作为一个企业和个人的展示,是非常有用的。 第三点就是功能会完善了很多,具体有多少功能完善呢?大家可以去体验一下,反正比其他平台完善很多,我都怀疑开发商是科学家。第四点就是代码同步以及镜像的问题,给扣的可以实现自动同步,以前我给 cap 可以 同步,但是必须在 x 里面写一个工作流, 下面我比较中意的来介绍一下 geocode。 首先 geocode 的是面向开源开放的一个本地化,我们国我国本土化的一个代码托管平台,它的背景是由华为 云,华为云 call 的 二次啊牵头,然后联合 csdn 打造的。 csdn 是 我们国内啊,算是最大的知名的那个技术社区了。不说最大的,反正就是我们国内很知名的社区了。 gico 的 正式推出是二零二三年九月二十二号,从生态层面来看, gico 的 和开源生态紧密结合,主要和国内开源生态紧密结合,包括有 开开放原子基金会等开放组织啊,开源组织。所以呢,推动了 gico 的 和 autetemautemautemget 的 深度啊整合,也就是未来的人工智能。另外我要中立的说啊,因为 gico 配置的话,现在官方并没有统一说这个东西是完善的,在官公告里面表示的这个东西还没有完善,占位,完全开放,那因为属于相关功能,是持续完善中,它比起 gico 要差一点。 但是对于最后一点,企业级是否免费这个问题的话,我还是要给大家说一下,他不一定免费,有可能后面会收费,有可能收费会更高,也有可能收费会很低,这个说不清楚的,但是我们优雅草科技认为它很好用,付费啊,五千块以内一年都接受。

嗯,今天给大家简单的介绍就是我们,嗯, get 怎么在 idea 中去使用的? 嗯,我们大部分情况下呢,都是学的这个 get 的 一个基础理论,嗯,比如在网上搜这种 啊 git 的 教程,它一般都是让你简单了解 git 的 一个工作原理,然后你会用这种命令来在终端里进行一个使用,但是我们 可能在开发环境中结会结合着我们这个 vs code 或者是呃 ide 去使用到啊,我今天就给大家来简单介绍一下。首先我新新创建了一个文件目录, 如果我们想把它啊开始进行一个代码管理,我们手机首先就要呃把这个文件目录进行一个抽象,抽象成我们的代码仓库, 我们首先点击这个更多窗口命令,这块有一个提交,然后这块有一个创建 get 仓库,我们点击啊,这块会直接到你那个文件目录下,我们点点击打开啊,这样的话就已经出水话好了,我们可以看到 啊,已经有了一个慢分之。然后呢,我们在这个目录下进行一个编写代码,比如我们就简单写一个 test 类吧, t 在私立。然后呢,我们呃这块他会问你是否将呃以下文件添加到 get 处,我们可以选择取消或者添加这个,我们一会就呃手动添加吧,点点取消 啊。比如说我们简单的写一串代码吧,写一串代码的话写个慢方法,然后呃这块就 csma 的 第一次 测试提交好,这个代码已经写完了,现在我想嗯,进行一个嗯,提交管理嘛, 通常情况下我们是会 get enit, 然后 get 把这个代码文件进行一个 get edd, 但是我们在第二中呢,就不需要这么做,直接这块有提交,我们点击这个勾选,其实勾选这一步就相当于我们在命令行中 get edd 的, 把它 加入到我们这个暂存区,然后我们再 get commit, commit 会让你写一个提交信息嘛, 其实我们在这块写一个提交心,就是第一次提交,然后我们点一个提交的话,就类似于我们面板上窗口这个 get commit, 然后我们点击提交,这块没加上, 那我重新点击好,这样的话就已经完成了第一次这种提交。 嗯,然后我们再写一段嘛,就是我们写一个 test 二嘛,然后我们再进行一个提交,这一块就是第二次。 好,我们可以点击这个 get 分 支啊,可以看到它这块已经有了两次提交,第一次提交的话, 呃,这块是第一次提交吗?然后第二次提交的话,这块是第二次提交啊,就可以在这个分支中进行一个简单操作,比如说我们想要 想要什么呢?想要回复到第一次提交,怎么回复呢?我们可以点击这个,呃,第二次提交,点击这个还原提交啊,你看就可以直接的变成我们这个第一次提交, 它会还有一条信息,就是说 recover d s 提交,就是给它变到 d s 提交之前啊,很简单都是,如果我们在面对行的情况下呢,可能会用到 get recite 啊,然后通过这个版本号进行一个简单的一个操作,嗯,可以在这个目录下去看一下这个命令,来给他 get log 看一下,可以看到这些都有这个版本号,通常的话我们像刚才那样的恢复可能需要 get receipt, 把这个版本号复制在下面才能恢复的。第一次。 好,这就是我们简单的进行一个啊操作,但是通常情况下我们会使用到的是添加到远程仓库,远程仓库怎么来做呢? 嗯,我们首先点击这个 git, git 这块有个管理远程,管理远程之后呢,你需要,呃,就是把远程这个仓库 dyl 给输入下来,我们简单的在 嗯, git 中去找一下嘛。 git 中我们去新建一个仓库, 比如我们随便新建一个仓库,新建一个仓库叫 test git 啊,这块的话就私有的话,然后我们不需要选择这个抽象模板,就直接给它创建就可以了,创建的话它会有一个这样的链接,我们点击复制,复制过来之后给它添加到原车上 啊,就可以了,就可以了,这样的话我们就可以直接给他推送到远程进行一个管理。比如说我们 ps 踢掉,然后第三次,嗯,我们进行一个远程远程踢掉,然后把我们的一个框给这块勾选上第 三次远程提交,这回我们不要点击提交,提交并推送就可以给他到我们这个远程上。那可以看到啊,这块有说。嗯,将这个,嗯, 将这个主分支会推送到远程常驻我的主分支,我们进行一个推送。好,他正在推送,已经推送到临床操作上,我们刷新一下给大家看一下,可以看到这是我们第三次进行一个提交, 嗯,这会有个第三次远程提交嘛,对吧?嗯,但是通常情况下需要你配置一下这个 get 啊。

get 是 一个版本管理工具,帮你记录代码每一次改动,方便回退,写作备份。下面我们学习 windows 系统下 get 的 安装。在浏览器地址栏输入, h t t p s 冒号斜杠斜杠 g i t s c m 点 com 打开网页后 点击 install for windows 跳转到安装包下载页面,点击 click here to download a few minutes later 双击下载的 e x e 文件,点击 next, 选择安装路径,点击 browse for folder, 选择安装的文件夹,点击 next, 选择要安装的组建 additional icons 额外图标 on the desktop 在 桌面创建 git 图标一般不用勾选,因为 git 主要是命令行工具。 windows explorer integration 资源管理器右键菜单作用,在文件加右键时会出现 git bash here git git here open git bash here 右键菜单增加 git bash here 作用,在当前文件夹直接打开 git 命令行 open git bash here 右键菜单增加 git bash here 作用,打开 git 的 图形界面工具 git lfs large file support 作用, git 默认不适合存储大文件,例如视频模型文件。大型数据级 git lfs 可以 解决这个问题。 associate git configuration files with the default text editor 作用,关联的 git 相关配置文件用默认文本编辑器打开 associate fails to be run with bash 作用,双击使文件会用 bash 执行。 check daily for git for windows updates 每天检查 git 更新。 add a git bash profile to windows terminal, 把 git bash 添加到 windows terminal。 如果你使用 windows terminal 或者开发环境,可以勾选 scaler git。 add on to manage large scale repository scaler 是 git 的 一个增强工具。作用,优化超大型代码仓库,例如微软内部项目,几百万文件的仓库,普通项目其实用不到,但保留也没影响。点击 next 在 windows 开始菜单里创建 git 的 快捷方式,勾选,表示不再开始菜单创建快捷方式。 git 默认用哪个编辑器?选择 visual studio code 必须本地已安装软件, 不然无法进行下一步。在后续创建新的 git 项目时,对于主分支的命名有两种选择, let git decide。 让 git 决定默认的主分支名称为 master override the default branch name。 自定义默认分支名称,你可以在输入框中输入自己想要设定的默认分支名字。这里我们选择第二种,并且设定默认分支名称为 main。 当前窗口是设置 git 的 path 环境变量选项,亦表示仅在 git bash 中使用 git, 只能在 git bash 专门窗口使用 git。 在 c m d power shell vs code 的 终端里可能无法直接使用,就像把 git 锁在特定房间,其他地方用不了。适合特别谨慎, 只打算用 git bash 且不想改动系统环境的人。二、从命令行和第三方软件使用 git 意味着 git bash。 windows 命令提示符、 power shell vs code 及其他开发软件都能使用 git, 且只添加必要的 git 内容,不会混入大量 unix 工具。这是最省心的方案,各地方都能用,还不易搞乱系统。适合新手、普通开发者和大多数安装 git 的 人 是最佳选择。三、在命令提示符中使用 git 即可选的 unix 工具,表示 git 能在 windows 命令型使用,还会添加一些 unix 命令,如 findsort。 但 windows 本身有同名命令,可能发生重名冲突,导致误调。用 git 带来的 unix 版本 就像搬来一套相似的工具箱,容易拿错工具。适合熟悉命令型,了解 path 命令冲突和 windows unix 差异的人。新手一般不选 use bundled opens, 用 git 安装包自带的 ssh 工具。 use external opens, 用系统里已有的 s s h。 工具 get, 自己不带这套 get。 以后用 h t t p s。 访问仓库时,用哪套加密证书组建 s s l t l s 库? use the open s s l library get, 用 open s s l 这套库来处理。 http, use the native windows secure channel library git 用 windows 自带的安全通道 channel 来处理。 h t t p s。 配置换行符转换 check out windows style commit unix style 你 把代码拉到电脑上 check out 十,自动变成 windows 的 c r l f 本地编辑舒服你提交到仓库 commit 十,自动转回 l f 仓库里统一跨平台不容易乱,对 windows 用户团队跨平台协助最省心。 check out assets commit unix style 拉下来时不改仓库啥样你就拿到啥样。提交时把 c r l f 转成 l f, 更像给 unix 环境准备的设置。在 windows 上一般不如第一个直观。 check out s is commit s is。 拉下来不改,提交也不改,完全不管换行结果。团队里有人用 windows, 有 人用 linux 时,特别容易出现只改了换行,导致整文件都变了的尴尬情况。 配置 git bash 使用的终端模拟器用 minty 来当 git bash 的 窗口。优点,窗口更像现代终端,可自由缩放、 复制选择更方便,对中文 unico 的 显示更友好。小提醒,如果你在里面跑某些 windows 控制台交互程序,比如交互式拍放, 可能需要通过 winpt 才能正常交互。新系统、新工具很多时候影响不大,但安装器在这里先提醒你,用 windows 自带的 c m d 控制台窗口来显示 git bash。 优点,跟一些传统 windows 控制台程序例如交互式乒乓 mode js 兼容性更直接。缺点,体验相对老派,比如滚动回看,默认较少字体 unico 可能要额外配置,尤其老版本 windows 更明显。选择 gitpool 的 默认行为, fast forward or merge, 能直接快进你的分支,没分叉就快进,不产生额外提交记录。如果已经分叉了,你本地也有提交,远端也有提交,就自动做一次 merge, 生成一个合并提交 merge commit 适合大多数新手默认使用场景,不容易拉取失败,但历史里可能会多出 merge 提交 freebase。 如果你本地有自己的提交,就把这些提交挪到远端,最新提交后面重放一遍, 让历史更直更干净。如果你本地没提交,那效果和快进差不多。好处,提交历史漂亮代价,对新手来说更容易搞混历史被改写的概念,尤其和别人共享分支时要小心。 only ever fast forward 只允许快进,一旦发现分叉直接失败,需要你手动处理 merge 或 rebase。 好 处,不会莫名其妙产生 merge 提交代价,更常遇到破失败需要处理的情况。 选择凭证助手, git credentials manager 跨平台的凭证管理器。好处,你登录一次后,它会把凭证安全地存起来,通常走系统的安全存储,以后推送拉取,就不用老是输入。对 github gitlab 公司 git 服务器配合 token, 网页登录授权也更顺手。 none, 不 使用任何凭证助手。结果,每次需要认证时,你都得自己输入,或者自己另配别的方式更麻烦。 配置额外选项, enable file system catching 以勾选。意思, git 处理文件时会做缓存,把一些文件、系统信息先存到内存里。 好处在一些操作,比如扫描大量文件状态,检查会更快。一般建议保持勾选,属于免费加速。 enable symbolic links 意思,允许 git 在 windows 上使用。符号链接 simlink 适用场景,某些项目里真的用到 simlink, 少数仓库工具链会用。注意点, 在 windows 上开这个通常需要系统权限支持,比如管理员权限或启用开发者模式相关权限,不然可能会遇到权限问题。而且它提示对已有仓库不生效, 主要影响你之后的新操作。新克隆,两个都不勾选。点击 linux 关闭窗口,安装成功。 安装成功后,如果不配置环境变量,会出现如下情况,在 windows 上找到 get 的 安装路径,找到安装路径下的 b 目录,然后配置系统变量,输入 get version, 输出版本信息,证明安装成功。

作为一名牵手式软件工程师,我想聊聊版本管理这事。说实话,入职前我完全没有代码管理的概念,自己写代码 就是本地,改来改去,经常搞混版本。工作之后才发现,版本管理简直是必修课,它不仅能帮你规范储存代码,控制权限,更重要的是当出现问题的时候,可以快速回收到任意历史版本,精准定位问题。 现在绝大多数公司使用的代码管理工具就是 git, 结合我工作中实际的使用,今天和大家分享几个常用的操作。首先是拉取代码,直接使用 git clone, 加上仓库地址,就能把远程代码复制到本地。 如果想拉取指定分支,加上杠 b 参数,再指定分支名就行。拉下来之后怎么看提交历史呢?用 git log 就 能看到所有的提交记录,如果只想看最近几条,可以加上杠 n 参数,比如说 git log, 杠 n 只看最近五条, 那么自己改完代码怎么提交呢? git 有 一个本地仓库的概念,所以提交分为三步,第一步, git id 文件名,把修改的文件 添加到赞惩区。第二步, get commit 杠 m 提交说明,将赞惩区的内容提交到本地仓库。第三步, get push 推送到远程仓库。推送之后,通常还需要在网页端,比如说 get lab 或 get hub 发起合并请求,把你的代码和物组分枝。 除了这些, git 还有很多实用操作,比如 git init 可以 在本地注册一个账户, git stash 可以 临时保存当前修改而不提交。以上就是我平常最常用的一些 git 操作,你在工作中用的最多的 git 命令是什么?欢迎在评论区留言讨论。

嘿,各位开发者朋友们, get commit 这个命令,你们是不是想都不用想就敲出去了?就跟肌肉记忆一样对吧?但是啊,你有没有停下来想过这背后到底发生了什么?今天咱们就来深挖一下,你想想,你把文件暂存,随便写个提交信息,然后一敲回车,刷的一下就搞定了, 整个过程可能连半秒都用不了。但你信不信,就在这一眨眼的功夫里, git 已经悄悄地完成了一项非常了不起的工作。所以啊,这半秒钟里到底发生了什么呢?来,咱们今天就把这个过程给它掰开了,揉碎了看, 我们会把这半秒钟无限放慢,跟着 git commit 这个命令走一遍它的完整旅程。我跟你保证,等你看明白了,你绝对会惊叹, git 的 设计原来是这么的简洁和巧妙。 好的,咱们就从头说起。因为啊,你可能想不到,整个魔法的开端其实还不是在你输入 get commit 的 时候,它真正的起点是在你运行 get add 的 那一刻。 嗯,要理解 get, 你 首先得知道它有三个核心的区域。第一个呢,就是你的工作目录,这很简单,就是你真正在编辑文件的那个文件夹, 然后是仓库,也就是那个隐藏的点。 get 文件夹,所有东西最终都永久存放在这里,而连接这两者的桥梁就是暂存区。它还有个名字叫缩隐,也就是 index。 这个是关键好,第一个很多人会忽略的关键点来了, 当你运行 git add 的 时候, git 可不是简单地记下啊,我要把这个文件加进去,不是的,它会立刻读取这个文件的内容,把它压缩,然后算出一个独一无二的 sha one 哈希值,最后把这个压缩过的内容作为一个叫做 blob 的 对象,直接存进 dot git 叉 objects 目录里。 你没听错,在你 command 之前,你的文件内容其实就已经进到仓库里了。这个 blob 对 象的设计说实话真的非常巧妙,因为它只关心文件的内容,所以那个哈希值也完全是由内容决定的。 你看这张图就一目了然了。假如两个文件哪怕文件名不一样,只要里面的内容一模一样,那么 git 就 只会存储一个 blob 对 象。这就是 git 在 处理大型代码库时还能保持高效的秘诀之一。我们管它叫内容驱虫,非常强大。 好的,既然 blob 已经存好了,那 git 总得有个地方记一下我们下次提交到底要包含哪些文件的哪个版本吧。这个地方就是我们刚才说的缩影。 我觉得这个购物车的比喻简直太贴切了,你用 git add, 就 好像是把一个个改动,也就是商品放进购物车里。而 git commit 呢,就是最后去收银台结账,把购物车里所有的东西一次性永久保存下来。好,现在购物车装满了,我们敲下了 git commit。 那么 get 的 第一个任务是什么呢?就是根据所引里记录的所有内容,为你的整个项目咔嚓拍一张完整的快照。 嗯,如果说 blob 代表的是单个儿文件的内容,那 tree 对 象代表的就是目录结构。你可以把它想象成一个清单,这个清单上记录着某个文件夹下面有哪些文件,并且指向它们对应的 blob 哈希。同时呢,也记录着有哪些子文件指向它们对应的其他 tree。 哈希, 你看, git 的 优雅之术就在这里体现出来了。咱们假设啊,你就只改了一个文件,比如 s r c components button 这儿 g s。 那 么第一步,就像我们刚才说的, git 会为这个修改后的文件创建一个全新的 block。 然后呢,因为 button js 的 内容变了,所以包含它的那个 components 文件夹也得跟着更新,对吧?所以 git 就 会创建一个新的 components 文件夹也得跟着更新,对吧?所以 git 就 会创建一个新的 button js blob。 同样的逻辑, components tree 变了,那它的上一级目录 src 自然也需要更新。于是 git 又会创建一个新的 src tree 对 象,让它指向刚刚新建的那个 components tree。 你 看,这个连锁反应会一直向上一直传递到项目的根目录,最终呢,就会生成一个全新的根序对象,而这个根序对象就代表了你项目在这一刻的完整的快照。 那么重点来了,在刚才整个过程中,你发现没,我们其实只创建了几个新的对象,所有那些没有被修改的文件和目录,比如说 docs 文件夹, test 文件夹,它们对应的 tree 对 象和 blob 对 象全都被完整地附用了。 git 只是简单地把它们旧的哈希值重新引用到新的负 tree 里面去。这就是为什么 git 处理再大的项目也飞快的原因,因为绝大多数的提交都只是创建了少数几个新对象而已。 好,我们现在有了一个代表项目当前状态的根治对象了,下一步就是要把这个历史性的时刻给记录下来。没错,是时候创建 commit 对 象本身了。 一个 commit 对 象其实简单到让你惊讶,它本质上就是一个小小的文本文件,可能连二百个字节都不到,根本不是什么复杂的数据条目,它里面就包含了几个关键信息, 一个指向我们刚刚创建的那个根 tree 的 指证,也就是项目快照,一个指向上一个 commit 的 指证。历史的链条就是这么连起来的,还有作者和提交者的信息,以及当然了,你写的提交信息。 get 把这些信息打包算出一个哈希,然后把它作为一个 commit 对 象存起来。 好。到目前为止,这个新的 commit 对 象已经存在于 git 的 数据库里了,但它现在就像一个孤儿,还没有任何东西指向它,我们需要把它正式地连接到你的分支上。那么问题来了,这个新的 commit 已经创建好了,但是没有任何东西指向它。 git 是 怎么把它跟你当前的分支连接起来的呢?这可能就是 git 设计里最让人拍案叫绝的地方。到底什么是分支? 它不是什么复杂的数据结构,更不是你代码的一份拷贝,它就是一个普普通通的纯文本文件。比如在点 git 下面 rev slash has slash main 这个路径下,而这个文件里面就只有一行内容,一个四十个字母的 commit hash, 就这么简单。没错,你没看错,四十一个字节,一个四十位的哈希,再加一个换行符。这也就解释了为什么在 git 里面创建新分支几乎是瞬间完成的,因为它根本没有在复制你的文件或者历史,它只是创建了一个四十一字节六文本文件而已,是不是很神奇? 所以啊, git commit 最后一步,也是最关键的一步,其实就是一次超级简单的文件写入操作。 git 先读去 head 文件,找到你当前在哪个分支,比如说 main 分 支。 然后呢,他就找到对应的那个分支文件,也就是 delete slash, slash hash, slash main。 最后,他用我们刚刚创建的那个新的 commit 哈希,覆盖掉文件里原来的旧哈希,搞定你的分支指征,就这么向前移动了一步,指向了最新的 commit。 好 的,我们已经走完了整个旅程。现在呢,咱们把所有的步骤串起来,再来回顾一下 git 这套简洁又卓越的设计理念。 所以,在你敲下回车的那半秒钟里, get 到底做了什么?我们来快速回顾一下。第一,读取锁引。第二,构建一个新的 cheat 对 象,并且可能尽量地附用没变过的部分。第三,创建一个可 made 对 象,让它指向新的 cheat 和它的复可 made。 第四,哈希,并且存储这些新的对象。第五,更新那个小小的分支文件,让他指向新的,可没得哈希。哦,对了,为了安全起见,他甚至还会在 raflog 里记下这次变化。所有这些都只是基于简单的文件操作,完全没有复杂的数据库。 而这一切其实都源于一个非常简单但又极其强大的核心理念。整个系统就是建立在有可变指针连接的内容寻值对象之上的 blog tree commit。 这些对象一旦被创建,就永远不会改变我们通过它们内容的哈希值来找到它们,而分支呢,就是那些可编的指阵,它们在这些不可编的对象之间自由地移动,把你的项目历史给串联起来。 所以下次你再输入 git commit 的 时候,希望你能想起这背后的故事,欣赏它那份简洁而又强大的设计之美。

今天给大家分享一个软件,叫医保 pdf 慢夜通程序,打开之后咱们一目了然,他是做什么用的呢?写的很清楚,看国家医保信息业务编码标准数据库 pdf, 咱们转 excel 或者数据库的什么一个工具,一目了然,很简单。呃,可以点击这个链接,就是跳转到国家医保网站。 呃,这里面咱们所有的医保数据都是定期在这里发布的,像最新的是今年三月十六号发布的 医保药品的动态数据库和体外诊断世纪的数据库,咱们点击进去,你会发现在这里面咱们是可以查询的,你是以国家准字也好,那个代码也好,或者企业也好,都可以查询,可以查询到你需要呃的数据,但是咱们不能下载,这里面有多少条数据?有二十多万条吧大概 咱们不能下载,一共有啊,有二十七万一千一百五十六条数据,官方只给提供了下载 pdf 的 这么一个链接,也就是说咱们点击一下 pdf 下载, 系统就会自动下载,下载完之后呢,呃,我本人用过很多这个 pdf 转换的一个程序,包含很多付费的,我自己也是会员,有些都是终身会员,但是如果对于这种海量的数据基本转换不完,就已经报错了。你现在用咱们这个程序呢,就特别简单了,先把它放一边,回到咱们的程序, 用起来也很简单,这里面咱们不光可以转药品,可以转耗材,可以转器械,体外诊断室剂都可以转三种。之后呢,咱们选择选择刚才下载的数据, 选择刚才下载的数据应该是这个体外诊断室剂刚刚下载的文件大小是八十几兆,有点缩小了,原先都是一百多兆。选择之后,咱们可以选择一个导出的目录,可以导出两种形式,一种 excel 表形式,一种是数据库文件。 嗯,可以选择处理范围。你像咱们这个 pdf 文件,它一共有两万多页,两万多页我可以只转前一百页,或者全部两万多页都转完每一页 excel 表,咱们是每一千页元文件生成一个文件,它会生成多个文件,因为数据比较大嘛。或者咱们可以选择那个数据库文件,它就合并成一个文件,这个我给大家简单演示一下吧。呃,下面就转个 excel, 简单一点,咱们就转前一百页点开始转换, 这个很快的,包括这面还有这个预计时间,想转一百页很快,但是如果咱们要是转两万多页,可能就会慢一些。呃,大概需要四五十四五十分钟,根据你的电脑配置不同。呃,快的时候四十多分钟,慢的时候可能会一个多小时,因为页数太多了,但是他转换完的数据咱们就 可以应用,很快转换完了。零点四分钟,咱们转换了一百页,咱们打开输出的目录,朝一眼打开了,打开了,打开之后,嗯,然后可以双击打开,它就是完整的 可编辑的数据,而且还不会错。这个程序的好处就是哪怕你有一万页,两万页都不会错,包括最后一页给你标出来原文件的页数,你可以随时去做一个校验, 这个是非常方便的。包括如果说后期你想转成数据库文件也可以,你说我两万多页转成一个数据库文件都可以, 这个就是现在免费分享给大家,不光是药品,就像我说的体温诊断、湿气、医用耗材都可以转换。

刚刚本地合并还有一个需要补充的点啊,因为我们本地合并到原分支,我们肯定要推送到远程仓库的,不可能只是合并到我们本地的,对吧?我们肯定还要给他推送上去, 要推送上去,这种情况下就是你的这个分支没有被设为受保护,就是你本地能够直接推送。大家应该明白这个意思, 有些分支它是受保护的,你点击破译的话是破译不了的,所以说你只能在平台上面去发起这个 合并请求啊。比如说我们现在这个第一位分支是受保护的,我们是无法去直接破译的,我们必须要在平台里去发起这个合并请求,也就是我们下面说的这个平台合并了。 平台合并的话我们可以看一下,我们再切回我们的这个分支, 比如说我们在这里更改平台合并, 我们再提交 平台合并的话,我们一定也要保证 我们的原分支代码的更新同步到了我们当前的这个子分支,我们要先去把原分支的代码更新过来,我们直接使用这个远程仓库这个分支去更新, 也就这个先要去点击,应该先要更新一下,还是先要把当前分支去更新一下?我们先要更新一下,万一别人有写代码,对吗?我们先更新过来, 更新过来之后我们再去把这个原分支,也就是 dv 远程的,我们使用远程的,就这样的话,我们就不需要再切换到 dv 分 支去 更新第一位了。我们使用这个 remote 的 下面的这个的话就是最新的,然后我们去合并,点击这个合并,合并完成之后,那么我们再去, 我们这时候就不需要在这里去把这个第一位杠 z、 y e 这个分支去合并到第一位了,我们只要把它去推送就行了,把我们这个代码去推送, 推送到远程仓库,推送完成之后的话,我们打开我们的,打开 get lab 之后,我们在这里有个合并请求,然后新建合并请求, 点击比较分支并继续 这里的话,我们要先选择分支啊,这里没有选择原分支,因为我们的原分支是啥呢?是这个分支,目标分支是啥呢?是这个分支对吧?这些目标分支一定要选择,对啊,要检查对,不要合并错了,知道吧? 然后我们再比较分支并继续这里的话,就是写你这次合并的一个标题啊,他默认的话就是你的这个提交记录上写的那个提交信息啊,这就是一个描述,描述你这次改了什么东西,对吧?这个是可写可不写, 当然了也是按照你们公司的规范,有些公司他是有要求的,必须要写的,而且要按照某种规范去写,如果有的话,你们按照这个规范去写就行了。这个的话就是分配这个处理这个合并请求的人呢,我们比如说分配给这个张大头啊,这个也分配给张大头, 然后这个是里程碑啊,里程碑说白了就是一个计划,比如说我们这已经过期了,就不选了,这个正常情况是不需要选的,当然有时候也需要选,看你们公司啊有没有设置这个里程碑,如果设置的话,那你可能需要关联对应的里程碑啊, 我们可以进去看一下,其实你可以在这里管理里程碑的,可以增加一下里程碑,说白他就是一个计划,比如说你某个需求的计划,对吧?创建了一个里程碑,就是在某个时间节点之前进行完成啊。然后你这次提交是关联这次里程碑的,那你就关联一下就行了, 我们这里就不关联了。然后这个标记的话,就是标记你这次修改的一个类型的,比如说我们这处理了一个 bug, 那 我们就选择 bug 啊。当然了,有些公司他没有要求的话,你也不选也行啊,这个就是合并开始时间,我们就选任意时间就行了, 然后他默认的话,这里是接受合并请求,是删除原分支啊,这个你要注意一下,你可以给它取消掉。如果你不需要删除这个原分支的话, 这个原分之不是我们刚刚说那个原分之,这个原分之就说的是你的这个需要合并的这个分子就是 dv 杠 z y。 然后我们创建合并请求就行了 啊,这就可以了,这就等待这个审核人去审核就行了。比如说这个卓,这个张大头,他这边我们可以看他这边,我们刷新一下,他这边就会有个合并请求,这个合并请求就是你给的,就是你提交过来的,然后我们点击进去, 点击进去之后他这边就会进行合并,但是他也可以提交一些信息,他说点击合并之后 我们就合并过来了,我们再看一下我们这边,我们这边我们切换到第一位,我们看有没有合并过来。更新一下,我们这边需要更新一下, 我们可以看到这个内容合并过来了,这就是我们在平台合并的一个流程啊,一个流程。

欢迎来到我们的节目,今天啊,咱们来聊一个特别核心,说可以驱动了无数应用程序的概念,那就是二叉树,咱们会从理论一直讲到实际的代码,把它给彻彻底底讲明白。其实啊,你可能平时没太注意,但树这种结构,它真的是无处不在。 你想想看,你电脑里的文件系统,像一层一层的文件夹,还有像 my sql 这种数据库背后用来加速查询的溯影,甚至我们浏览网页的 html 结构在默默地支撑着。 那么问题来了,我们怎么才能跟这些树对话?怎么才能用好它们,释放它们的全部潜力呢?嗯,要做到这一点啊,咱们就得先学会它们的语言。行,那我们就从最最基本的词汇开始 吧。好,第一部分,我们就先来解剖一下这棵树,看看它到底是由哪些基本的部分组成的,咱们得先把这些基本词汇给统一了,这样后面才好交流嘛。 一棵树最最基本的单位就是这个东西。节点,英文叫 node, 你 可以把它想象成一个小盒子,这个盒子里呢,不仅装着数据,更关键的是它还有指针或者说链接,指向它下面的其他节点,也就是它的孩子们。可以说,万物始于节点。 好,咱们来快速过一下几个关键术语,一棵树最顶上没有父亲的那个节点,咱们叫它根节点,也就是 root。 然后呢,一个节点直接连在下面的就是它的子节点,反过来,它就是子节点的父节点。那些在最末梢没有自己孩子的节点,咱们就叫它叶子节点。 leaf。 最后两个概念,深度和高度,这很重要,深度是指从根节点往下数到当前节点有多远,而高度呢,是从当前这个节点出发,往下走到最远的那个叶子节点需要走多远? 好,基础词汇我们搞定了,接下来就是我们这次探索的核心环节了,到底该怎么去逛一棵树,也就是如何一个不漏的访问到树里的每一个节点,这里有四种经典的方法,可以说这几乎是所有树相关算法的基石。 首先来看三大深度优先变理方法,也就是我们常说的 d f s, 他的核心思想就八个字,一条道走到黑, 就是说他会先选一个分支,一直往下走,走到头了再退回来换另一条路继续走。那么这三种方法前序、中序、后序,他们唯一的区别就在于访问当前节点这个动作是发生在一开始中间还是最后?咱们来看一个比喻啊, 来帮助理解这个浅区便利,你就把它想象成你在逛一个景点,一到门口你先咔嚓拍张照,就相当于处理了跟接点。然后呢,你先去逛左边的展区,把左边彻底逛完,最后再回来去逛右边的展区,你看顺序就是中左右,核心就是先处理自己,再去管孩子, 然后是中序便利。顾名思义嘛,中序就是把对当前节点的访问放在了中间,顺序变成了先把左子树彻底搞定,然后回过头来处理当前节点,最后再去探索柚子树。这个左跟右的顺序有一个特别神奇的特性,可以说是它的超能力,尤其是在一种特殊的树上,我们马上就会讲到 最后是后续便利,它的顺序是左右跟,也就是说得先处理完所有的孩子,最后才能轮到自己。这种模式特别有用。你想想一个场景计算一个文件夹的总大小,你是不是得先知道它里面所有子文件和文件的大小,然后才能把它们加起来,得到这个副文件的大小? 对,就是这个道理,所以后续便利非常适合这种自底向上的计算任务。好说完了三种深度优先,咱们来看第四种,也是唯一一种广度优先的便利方法,也叫层序便利。这个思路就完全不一样了,它不像 dfs 那 样一头炸到底, 而是像玩水里扔了块石头。那个连衣啊,是一圈一圈一层一层的往外扩散,它会先把离根接点最近的这层访问完,然后再去访问下一层,非常公平。 所以你看,深度优先和广度优先这两种便利方式的哲学是完全不同的。一个像探险家喜欢钻进一个洞穴探索到底,一个像池塘里的涟漪,一层层的扩散。那它们在代码里是怎么实现这种差异的呢?关键就在于它们使用的辅助工具 d f s, 也就是深度优先,它用的是站后进先出,这能帮它记住回来的路。而 b f s 广度优先,它用的是队列先进先出,这能保证它一层一层的处理,非常有序。 好,这张速查表可以说是咱们今天的一个小总结了,你看,不同的便利方式顺序不同,用的数据结构不同,自然就适用于不同的场景。 比如说你想完整的复制一棵树,用前序便利字,自然因为你先创建根节点,再去递归的创建左右子数,想按从小到大的顺序打印,就用中序,而要找两个节点之间的最短距离,那广度优先的程序便利就是不二之选。大家可以把这张表收藏起来,以后肯定用得着 行。到现在为止,我们已经学会了怎么在一棵树里自由行走了,那接下来咱们就要把这些技能用在一个更强大的地方。一种专门为了快而生的树,它的名字叫二叉搜索树,英文是 binary search tree, 简称 b s t, 而它搜索树也就是 b s t。 它之所以厉害,就因为它遵守一条非常简单但又极其强大的规则,那就是对于树里的任何一个节点,它左子树里所有的齿都比它小,而它右子树里所有的齿都比它大。记住,就是这么简单,左小右大。就因为左小右大这条规则, b s t。 的 搜索效率变得出奇的高, 达到了 ooflogn。 这个 ooflogn 是 什么概念呢?你就小象城猜数字游戏,我要你猜一到一百之间的一个数,你每次猜中间的数,比如五十,我告诉你大了或者小了,你是不是每一次都能排除掉一半的可能? 对 bst 的 搜索就是这个原理,每次比较你都能扔掉一半不相关的节点,所以就算数里有一百万个节点,你最多也只需要比较二十次左右就能找到目标。这就是对数时间的恐怖为例。 聊了这么多理论,你可能会想,这东西在现实世界里真的有用吗?答案是,不仅有用,而且你可能每天都在用它,只是你不知道而已。这些我们刚刚讨论的数结构,其实就隐藏在你常用的编程语言和工具的底层。 举个例子,你在 java 里用过 tree map 吗?它能保证你放进去的键值对,始终是按键排好序的,很神奇对吧?其实它的底层就是一种更高级的自平衡。二叉搜索树,叫做红黑树。 这种树通过一些精妙的旋转和辨色规则来确保树永远不会长得太偏,从而死死地守住 o log n 这个高性能的底线。再比如说 priority queue 优先队列, 当你想从一大堆任务里挑出优先度最高的那个,或者找出一组数据里最大的 k 元素时,就会用它。 那它又是怎么实现的呢?它的核心是一种叫做堆的特殊二叉数。更有意思的是,这个堆在逻辑上是棵树,但是在物理存储上,它却能非常巧妙地用一个普通的数组来表示,非常节省空间。 最让人惊讶的可能还是还是 map。 我 们都知道还是 map 快, 但如果运气不好,很多元素都撞到同一个位置了,那这个位置就会形成一条长长的链表,查找效率就会从 o e 急剧下降到 o n。 那怎么办呢?从 java 八开始,设计者们想了个绝妙的主意,一旦链表太长,就直接把它原地转变成一棵红黑树。这样一来,就算在最坏的情况下,查找效率也能保证在 ologn 是 不是很酷。 好了,理论和实践都讲了,最后送给大家一张高频面试题的备忘录,你看,像求数的,最大限度验证一棵树是不是 b s t 翻转二叉数这些经典问题,他们的姐夫万变不离其宗,本质上都是我们今天讲的某一种便利方法的变体。 比如求最大深度,它的核心思想其实就是后续便利,我得先知道我左右两个孩子的深度,才能算出我自己的深度,对吧?所以把那四种便利方法吃透,这些问题就迎刃而解了。 你看一棵树,它最基本的组成部分无非就是节点和连接,但就是这么简单的两个东西,却搭建起了我们软件世界里无数高效有序的复杂系统,我们今天算是把它的神秘面纱揭开了一角。 那么下一个问题就留给你了,理解了树的原理之后,你又准备用它来构建些什么呢?

你团队中使用这个 get 有 哪些关键要注意的一些事情?需要注意,分资混乱、代码冲突、版本回滚困难。 ok, 这道题的一个核心,考团队的一个协助规范, get 流程管理和风险的一个规避能力。关键你要注意事项可以分为这几类啊,能大幅减少这个协助的一个问题。 一是分支管理规范,必须统一分支管理,避免分支混乱。一般使用 git flow 来管理这个版本的流程,主要包括分支类型管理、分支流转规则的一个管理,以及定期清理无效的分支。 第二个是提交信息与内容的规范,保证提交记录可追溯、易排查。主要包括提交信息要同一个格式,对于大功能要拆分成多个小的提交方式,方便后续的一个问题。定位和回滚 无关的文件要用 get ignore 的 一个文件去过滤,避免对项目仓库造成污染。第三,协助流程的一个管控,避免冲突堆积和操作混乱。比如提交之前一定要先拉取最新的代码,谨慎使用强制推送合并分之前先要自测凭证通过,理解了吗?嗯,好。 最后视频配套的面试题答案都整理在评论区了。另外,如果近期面试受阻,没有面试机会,我们也有面试突击陪跑服务,可以私我咨询。从简历优化、项目包装技术突击、面试突击、项目业务难点亮点梳理、模拟面试、面试复盘并向内推等。