(十四)Git进阶与测试--如何把文件真正的从Git里删除
本章主要测试讲解
利用git filter-branch命令,彻底删除已提交文件。
测试过程内容较多,每个步骤都逐一截图以便真实说明,也有列示用法。若不感兴趣,可直接查看总结部分。
测试过程前置说明例如在开发过程中,把私用账号密码文件提交了,或者其它机密文件提交了,那么在 git 中就会保留那份文件,如果 push 到远程,那么其它人也有可能看到这份他们可能不应该看到的文件,所以,如何把这份文件从 git 中移除掉?
大概流程:
1、新建一个项目 test-filter-branch,git 初始化,并放入两个文件,初始化提交
2、模拟误操作添加了不应该提交的 password.txt 文件,并提交
3、误提交 password.txt 之后,模拟又多次提交
4、将每个提交中的 password.txt 移除,并清理垃圾回收中的相关设定
测试步骤新建一个在 test-filter-branch 项目并初次提交
之后,在项目中创建了一个 config,里面有个 password.txt 文件。假设属于私有机密文件,不应该被提交,但是又忘记在创建前加入.gitignore 文件。且 ...
(十三)Git进阶与测试--多样化处理本地commit记录
本章主要测试讲解
利用git rebase命令,多样化处理本地 commit 记录。例如
修改提交信息
删除提交信息
合并提交信息
……
测试过程内容较多,每个步骤都逐一截图以便真实说明,也有列示用法。若不感兴趣,可直接查看总结部分。
测试过程前置说明在本地开发时,有提交很多次,但是其中提交信息,可能有些是可以合并到一起,有的可能没必要可以删除,有的需要修改 commit measssge……
这些都可以使用git rebase命令的相关参数指令实现。
项目准备在本地的 tensorflow 项目中添加几次提交
测试步骤修改非最近一次的提交信息假如需要修改 commit id 为 699b10610 的 commit message。因为这不是最近的一条 commit,所以 git commit --amend无法使用。
需要使用 git rebase 指令相关参数
输入git rebase -i ,进入 interactive 模式其中为此次想要调整这个节点(commit id)开始至 HEAD 中间的提交纪录。
因为我们要修改 commit id 为 699b10610 ...
(十二)Git进阶与测试--三种实现undo(还原)操作的命令对比
本章主要测试讲解
git reset、git checkout和git revert在撤销修改,内容还原功能中的对比。
测试过程内容较多,每个步骤都逐一截图以便真实说明,也有列示用法。若不感兴趣,可直接查看总结部分。
测试过程前置说明使用需求大概都是一致,就是在修改了代码之后,想要会到旧版本去。虽然列示的三种操作过程不一样,但都达到了那样的效果。
指令原理说明简单说明区别git revert:只能用于 commit-level,会新建一个 commit,在历史记录中说明还原了什么
git reset:可用于 commit-level 和 file-level,用于撤销未被提交到远程(remote)的改动,即撤销本地(local)的修改。
可以将其 git revert 视为撤销已提交更改的工具,同时 git reset HEAD 用于撤销未提交的更改。
git checkout:可用于 commit-level 和 file-level,是将 HEAD 指针移动到想要回退的版本,不会修改历史记录
示例演示说明项目准备,一个有简单修改的 tensorflow 项目
git che ...
(十一)Git进阶与测试--clone远程仓库很慢的处理
上一篇有讲到克隆远程仓库,在 clone 时,如果每次都 clone 完整的仓库的话,随着提交的次数变多,在项目变大之后,clone 的速度会非常的慢。
所以克隆时可以设定参数 --depth 1,加快 clone 速度
-- depth代表克隆的深度,--depth 1代表只克隆最新一次提交记录以及这次提交之后的最新内容,不克隆历史提交。
这样所造成的影响就是不能查看历史提交记录,但是克隆速度大大提升。
完整命令:
git clone --branch --depth 1查看 commit 总数,可用:
git rev-list --all --count
或者
git log --oneline | wc -l后续补充:注意,这里 git rev-list 查看到的提交数量,并不一定和仓库中显示的提交数一样,获取的原理不同。后者是一致的。详细请查看官方文档关于git rev-list的说明。
查看简要显示日志,可用:
git log --all --oneline示例,今日(2019/12/25)克隆 github 中 tensorflow 项目,深度只有 1 层,编写本文示例 ...
为什么身体或灵魂未在路上?
2019年12月25日,19:39:59 不得不承认,针对“身体和灵魂必须有一个在路上”这句话,一开始我的理解就错了。因为太多时候,都是在一些山水摄影里看到这句话,颇有一种“即便我没有实际到过那里,但是我已经看过那里了,所以我也去过了那里”的感觉。
今日我终于没有忍住,去搜索了这一句话。
在看到原文的时候,我立马感到非常诧异,为什么这些引用者,从来都不愿意把这句话说完整呢?——“You can either travel or read, but either your body or soul must be on the way.” 要么旅行,要么读书,身体和灵魂必须有一个在路上。余师的那本书,表面了他先选择了前者,这也可能可以解释为什么总是在山水田园影像相关内容板块看到这句话。
Either…or…,要么…要么…一开始我对这样的句式产生了不少的兴趣,因为这是一个选择句式,它表示只选择其中一项,而不是所有的两者。为什么,这样的东西不应该全而美吗?读书体会他人的人生,旅行经历自己的人生,两者结合,不应该更好吗?难道只是单纯的读书就不能旅行,旅行就没法读书吗 ...
(十)测试文件(夹)数量内容增减对项目还原是否有影响?
本章主要测试讲解
项目中的文件数量消长(新增或删除文件时) 与 存在的文件内容消长(同一份文件修改多次) ,这两种情境的版本还原有无区别
测试误删除文件,然后还原
本章使用 git reset,更多还原操作可参看下一章
测试过程内容较多,每个步骤都逐一截图以便真实说明,也有列示用法。若不感兴趣,可直接查看总结部分。
测试过程前置说明这里是测试不同正常修改的操作会不会影响到项目还原,按道理来讲,代码写到一般,文件未保存计算机电源被扒了,这部分如果编辑器没有缓存,应该是不会在 git 的还原操作内了。
项目准备1、远程仓库准备
在 github 上找到了一个 commit 次数较多的项目,放置到测试的远程仓库,本例是 tensorflow
2、本地仓库的准备
clone 一个到本地,作为测试仓库
创建一个 dev 分支,进行测试
将本地 dev 分支推到远程 dev 分支
大概流程
1、使用 git rm 指令删除 tensorflow 子文件夹,commit 一次;
2、然后再新建 tensorflow 文件夹,并加上两个文件,commit 第二次;
3、再使用手动删除 t ...
(九)Git进阶与测试--merge和rebase分支合并、解决冲突及特征对比
本章主要测试讲解
git merge和git rebase指令的用法和进行分支合并,并做简单比较分析。
测试过程内容较多,每个步骤都逐一截图以便真实说明,也有列示用法。若不感兴趣,可直接查看总结部分。
测试过程前置说明关于无论是使用 merge 还是 rebase 进行合并,出现冲突的原因都是在不同的分支修改了同一处的代码,合并时版控工具 git 不知道保留哪一份的修改,从而导致冲突,需要合并人员去判断并解决。
使用 merge 和 rebase 合并的做法
大概流程:测试 git merge 和 git rebase 的合并及解决冲突效果:
1 准备测试项目及分支记录
创建 master、dev1、dev2 三个分支
除了 master 创建 dev1 和 dev2 的初始提交外,3 个分支各自有两个不同的提交记录
时间顺序为:master 新建空文件,再初始提交 –>创建 dev2 –> dev2 commit 第一次文件修改 –> dev2 commit 第二次文件修改 –>切回 master 创建 dev1 –> dev1 commit 第一次文件修改 –> dev1 ...
若不作为,梦怎成真?
最近我好像喜欢上一个女生了,因为每次看见她,便“心跳加速,面红耳赤,思绪纷飞,不敢直视”。偶尔空闲时间,就开始想着她的优点。笑靥如花,落落大方,活泼阳光……有时都分不清,是她本来如此,还是我心中她就是这样。
我不知道这现象表达了什么意思,我也不知道为什么出现了这样的情况。我们认识也一年多,平时难得见面,没有什么交集,很少有正面交流,没有什么陈见,似乎就是只是两个互相认识的人而已。突兀出现的这样感觉,让我觉得诧异、惊奇。
岁月磨平了棱角,冲动不再轻易突破理性的桎梏。到了不再相信一见钟情的年纪,更想要明白产生这样变化的原因。
所以心态的变化,并不在外显露出来,不过的确更加关注她和自己来。是她有什么新的蜕变吸引了一尘不变的我,还是我有什么改变重新审视了一如既往的她?
我就这样不动声色地关注起她来,突然觉得,她出现在我视线里的时间变得频繁起来,但是我依然隐藏地很好。
也许是因为白天工作太忙,或者过于疲劳,这时间晚上睡眠质量下降了很多,睡前脑中思绪万千,总是浮想联翩,无法静下心来,还经常做梦。虽然大部分时间梦醒了,就忘记了。
直到昨天晚上,直接从梦中惊醒,才意识到事情可 ...
(八)Git进阶与测试--.git文件夹中object数量过大是否影响commit效率?
在此往后的几篇文章,主要是说明一些使用 Git 时比较高级一点的问题或者比较重要的问题。除了一些测试说明、功能介绍、操作引导之外,还可以增长见识和思考方法,可以一看。
有些测试截图是比较旧(也就几个月),但是目前来看,依然是 ok 的。
测试过程内容较多,每个步骤都逐一截图以便真实说明,也有列示用法。若不感兴趣,可直接查看总结部分。
测试过程众所周知,.git 文件夹是 git 管理项目的本地仓库。objects 目录存储所有数据内容,每一次 git commit 都会将信息存到该文件夹。这部分不清楚,可去官网Git 内部原理 - 底层命令和高层命令和Git 内部原理 - Git 对象等地方再巩固。所以,一般情况下来看,git commit 的次数过多,object 文件夹体积就会变大,如果非常巨大了,会不会影响到提交的速度?
前置准备将 github 中的两个项目 tensorflow 和 liunx,clone 一份到本地,并推到自建 gitlab 服务器(内网 1.0Gbps)中,作为测试项目远程仓库。主要说明 Git 客户端的使用,所以本地需要安装 Git
大概流程准备两个比较 ...
(七)Git入门及常用命令
罗杰•杜德勒编写整理了一个不错的git - 简易指南,可以查看学习。网上也有很多内容,没记住的,要用时搜一下就好了。
另外,我在github有放一个简单的《7-Git入门指南》的 PPT,可以一并查看,主要说明的是:
Git 是什么?
Git 简明指南补充说明
Git 常用指令(本文正文)
使用 Git 一般开发规范
Git Client GUI 及在 VS code 中使用 Git
此处只是列示一些可能常用的 git 指令:
配置使用 Git 的账号密码:
git config --global user.name "Your Name"
git config --global user.email email@example.com初始化一个 Git 仓库:
git init添加文件到 Git 仓库,分两步:添加到暂存区:
git add #注意,可反复多次使用,添加多个档;
提交到仓库
git commit -m 。查看工作区的状态:
git status。可以查看修改内容:
git diff关联一个远程库:
git remote add origin git@server ...