感谢教授这门课程的老师
Git的结构:
git和github的关系就是系统和托管中心的关系:
本地库和远程库的交互:
一种是团队内部协作
一种是跨团队协作
git的命令行操作:
本地库初始化
在我们工作的文件夹里边进行初始化,比如说创建一个test文件夹,里边可能会放几个.py文件,就可以对test文件夹初始化,git init
设置签名:
访问保存的配置,cat .git/config
git的基本操作:
nothing to commit (create/copy files and use "git add" to track)意思就是可以添加文件到暂存区,由git来进行追踪、管理
假设工作区只有一个文件,并且将这个文件添加到了暂存区,状态变成了
unstage 表示拆箱,如果文件没有被git track,那么文件的状态表示为unstage.
其作用在于将文件从暂存移除
我们的第一次提交也就是根提交 ,显示有一个文件修改了,修改的内容是添加了一行
修改文件之后,再查看工作区和暂存区的状态:
为分阶段提交的变化:
要么用git add去更新暂存区
要么用git restore放弃这个变化
对于这种已经被git追踪的文件,可以直接使用git commit -a直接更新这个变化
另外,对于已经被追踪的文件,将他从暂存区移除的方式会发生变化:
将更新从暂存提交至本地库,如果不想进vim写版本更新日志,可以用以下命令:
linux中经常见到这个-m,mode?
如何切换版本??
一条日志要占用5行,一旦日治多了,以这种形式显示是很冗余的
这表示以一行的形式显示日志
更简洁的命令是:
这样哈希标签值只部分显示,更加简洁
reflog = reference log,参考日志。他将显示回退到某个历史版本的步长是多少
有三种方法实现版本的前进后退
^ 异或符号,~ 波浪符号
关于git reset --hard [索引值]中的hard
linux终端要查询某个关键字,可以git help reset
用git status查看暂存区文件的状态,是绿色的modified
查看暂存区文件的状态,是红色的modified
git是对他初始化的工作区变化的记录,这个记录包括对已经提交记录的文件的删除
删除文件:rm [file name]
删除记录也要提交到本地库,都可以通过log来查看
Q:每次reset实际上也会被记录到log里面,那log岂不是会变得很繁杂??
文件的比较
git是以行为单位进行文件管理,将文件第一次提交到本地库时,会返回文件的行数
这里没太明白,比如将一个文件已经提交到本地库,然后修改它,新的文件是在工作区。这个时候使用diff是比较的工作区和暂存区吗??
将新文件添加到暂存区,使用diff,此时没有输出???
diff 可以指定和本地库的之前版本比较
当新文件只在工作区时也可以与本地库指定版本的文件比较
一般默认是在master分支下面,但很多时候我们不想直接在主干网上修改
所谓被合并的分支,即合并之后留下的那个分支。比如将hot_fix和master合并,被合并的分支就是master。但其实hot_fix这个分支还是存在
合并之后,hot_fix分支做的修改就会出现在master分支的相关文件上
出现冲突的时候,需要人工干预,手动修改错误。git的状态仍然是合并状态,所以上面的第四步要求提交到本地库的时候不能带文件名
Q:git是如何实质性的实现版本控制??
简单说,当我们在git bash中切换到某个文件的某个历史版本的时候,在git之外打开这个文件,就是相应版本的文件。导出某个版本的文件很方便
集中式版本控制使用增量式更新,节约存储空间
是否可以这样理解,每次有新的版本提交,就要对本地库的所有文件进行快照
这里提到的blob, binary large object,二进制大对象,是一个可以存储二进制文件的容器
BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件
在YOLO,CAFFE中都提到了blob,caffe中使用blob这种数据结构,
远程库和本地库没有规定必须同名,但一般同名