GIT
| -- git由来
| -- git简图
| -- github远程仓库与本地仓库的创建和关联
| -- 本地代码管理
| -- git分支管理工具
| -- git扩展功能git lfs
-
git由来
-
linux系统创建了后,作为开源系统,其创始人收到世界各地志愿者的代码,为了便于管理代码,linus创建了git,并把linux的源码放在git上管理,从此,git成为最流行的分布式版本管理系统。
-
当多人一起做一个项目的时候,项目代码原先都是放在一台服务器上,然后大家要工作了再通过互联网把代码下载到自己电脑里工作,每天工作完了再提交回服务器,这种就是集中式的版本管理控制系统;这种管理方式必须联网才能工作,一旦网不好,能把人急死,而且,服务器出问题的话,所有人无法工作;而分布式管理系统,每个人的电脑上都是一个完整的版本库,都有完整的代码,不需要联网,即使某人的电脑坏了,从其他人那边拷贝一份代码就可以了。当然,现在的分布式管理系统也会有一台服务器,这台服务器用来方便大家交换各自的“修改”,没有它大家也一样工作,就是交换修改不方便而已。
-
git属于分布式版本管理系统,除了无需联网等优点外还拥有强大的分支管理工具。
-
-
git简图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TRHAyW42-1584430599766)(/home/jiangkaifeng/personal_file/git.jpg)]
-
Remote:远程仓库
-
Repository:本地仓库
-
Index:暂存区
-
worrkspace:工作区
-
-
github远程仓库与本地仓库的创建与关联
-
github:一个提供git仓库托管服务的网站,只需注册一个github账号,就可以免费获得git远程仓库,这是一个国外的网站,国内也有提供类似服务的网站,码云。
-
github远程仓库的创建
- 注册好github账号后,建立新的仓库repository
- 选择公开仓库public,大家都能看到,而private只能自己看,但要交钱
- readme可要可不要
-
本地仓库的创建
- 本地仓库文件夹下git init,初始化,生成了一个.git目录,用来跟踪管理版本库的,被隐藏了,ls -ah查看
-
远程仓库与本地仓库建立关联:git支持SSH和HTTP(S)协议
- 在自己电脑主目录里找到.ssh目录,把里面的id_rsa.pub的内容添加到github上的“SSH Keys”上;
- 关联远程库与本地库,在本地仓库下执行git remote add origin 远程库链接地址
- 这样我们在本地管理的项目就可以同步管理在远程仓库了
-
从本地拉取远程仓库的代码:git pull origin master
-
把本地仓库的代码推送到远程仓库:git push -u origin master,第一次推送要用-u,是把本地的master和远程的master关联起来
-
删除关联的远程库git remote rm origin,origin是远程仓库名称,可以取其他的,如mars等
-
查看远程库git remote,查看详细信息,git remote -v
-
假如没有建立本地仓库,只在github下建好了远程仓库。可以直接在你自己选择的目录下 git clone 远程库网址,这样就把远程库下载到目录下了
-
-
本地代码管理
- 当你改了一点代码后,想要提交到版本库,首先添加要上传的文件,git add . ,把修改的文件放到一个暂存区,然后把文件提交并添加说明git commit -m “你对修改的描述”,这时候你的修改就提交到本地的版本库里了;
- 当然,这里面还有许多方便的工具
- 当你修改了文件后,git diff 文件名,查看自己做的修改再提交,绿色的是新增,红色的是改动
- git status查看分支信息,查看暂存区状态,git checkout – 文件名,丢弃工作区某文件的改动;git checkout .丢弃工作区的修改
- git reset HEAD ,可以把暂存区的修改撤销掉,重新放回工作区
- git reset --hard,会把暂存区和工作区的状态恢复为原始状态
- 文件从暂存区提交后,git log查看版本信息,git log --stat 查看提交详细信息
- 回退版本,git reset --hard HEAD^,会显示回退到上一个版本的版本信息,或者git reset --hard 版本号
- 版本回退错了想改回去怎么办,又记不到之前的版本号了,git reflog,记载了所有的git版本以及操作
- 删除文件,git rm 文件名,然后提交,把版本库里对应文件也删除了
-
git分支管理工具
-
正常情况下版本库里只有一条主分支master,有一个默认指向它的指针HEAD,创建一个分支,就是新建一个指针,例如dev,dev上的工作完成了,需要合并分支,则只需把master指向dev的当前提交,就完成了合并
-
查看分支git branch, *所在的分支即为当前所在的分支
-
创建分支git branch dev
-
切换分支git checkout dev
-
创建并切换分支:git checkout -b dev
-
在不同分支上修改的文件不会相互影响
-
在dev下修改了文件后,合并到master分支上git merge dev
-
删除dev分支git branch -d dev
-
当我们新建了一个分支dev修改了文件提交,然后切换回master分支也修改了文件提交,这时候合并dev分支就会出现冲突,打开修改的文件会看到出错的地方;这时候需要修改文件后再次提交
-
查看分支合并图git log --graph
-
不用丢掉分支信息的合并加上参数 --no-ff,即git merge --no-ff dev,这会建立一次新的提交
-
强行删除修改过的分支,git branch -D dev
-
多人合作时,推送自己的修改失败,先把远程的分支git pull下来,再在本地解决冲突合并,然后再提交
-
如果git pull时提示no tracking information,说明本地分支和远程分支链接关系没有创建,用命令,git branch --set-upstream-to dev origin/dev
-
在本地创建一个和远程对应的分支git checkout -b branch dev origin/dev
-
打标签git tag v1.0,查看标签git tag,对应某一版本打标签git tag v2.0 版本号
-
查看标签下对应的版本信息git show v1.0
-
删除标签git tag -d v1.0
-
推送标签git push origin v1.0
-
-
git扩展功能git lfs
有的时候项目中有一些大型文件,如模型或者图片等,这些东西和其他文件放一起会大幅增加仓库的体积。这时候会用到git LFS,LFS就是大文件存储的缩写,通常会另外建一个仓库,用于存放这些大文件,每个大文件有相对应的指针,我们的主仓库中只需要保留这些指针就可以了。当拉取新版本的时候,根据指针的对应会更新相应的大文件:
-
开启lfs功能 git lfs install
-
查看当前使用git lfs管理的匹配列表 git lfs track
-
大文件追踪 ,例如追踪后缀为png的文件 git lfs track “*.png”
-
查看当前git lfs对象的状态 git lfs status
-
拉取对应的lfs对象 git lfs pull
-