大致总结:
本地仓库要先去github注册,并通过github的验证。于是本地仓库的文件均可通过协议传输至github任意一个仓库。本地文件要先传到本地仓库,由本地仓库传输至远程github仓库。
在详细学习git之前,我们先来看看Git和svn之间的区别是啥,以此来进一步对git的认知。
Git 与 SVN 区别点:
1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
3、Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
4、Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
5、Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
简单点理解,svn是我们需要把文件更新到所在的地址。但是git的话是借助分支的上传合并来进行版本的更新。
本文的目的是手把手教你学会使用git来管理自己的项目。
把一些常用的git操作总结在此:
git init #初始化本地仓库
git add #提交文件至本地仓库分支,默认master(确切的说,提交到本地仓库的暂存区目录树)
git commit -m “描述“ #文件更新到本地仓库的对象库,此时分支master指向暂存区的目录树,直白点说,此时的master分支上才追踪到新增的文件,如果没有commit,也是没有的。
git rm --cached # 把文件从本地仓库暂存区进行删除
git branch #查看当前分支(会显示所有分支,有星标的就是当前所在分支)
git branch <branch_name> #新增分支
git checkout <branch_name> #切换到该分支
git status #查看当前分支的状态
git branch -d <branch_name> #删除分支
git merge <branch_name> #将分支合并到主分支上去
git pull origin master --allow-unrelated-histories
git remote add origin git@github.com:Allen-1991/test.git #添加远程仓库并命名为origin
git push -u origin master #将master的分支提交到远程origin仓库
下面是具体的操作流程介绍,以github为例。
1、注册github账户
https://github.com/
2、建立本地仓库与github仓库的连接
2.1生成key
ssh-keygen -t rsa -C “allenshnu@163.com”
2.2 回到github填写生成的key
–回到 github 上,进入 Account => Settings(账户配置)
–把刚才生成的key填写进来(id_rsa.pub文件里的内容)
–输入github的用户密码即可,从而建立了本地仓库跟github仓库数据传输的协议。
–再回到cmd,验证下建立连接是否成功
以上说明我们连接Github成功!
–再回到github创建新的仓库,创建名为test的仓库
仓库test的url (遵从SSH或者HTTP协议)
以上信息告诉我们可以从这个仓库克隆出新的仓库,也可以把本地仓库的内容推送到GitHub仓库。
3、本地建立项目(仓库),推送至github托管
–项目初始化
Git init
会在目录产生一个.git的目录(git的版本库),里面存放着本地仓库的配置信息,负责跟踪管理版本库,其中的index文件也是git的暂存区。(如下图)
但是一般我们在D:\Ellen\project目录下是看不到的,隐藏的
–在project目录下生成文件并上传github
–新建test.py文件
git add test.py #添加文件到暂存区
git commit -m “Hello world” #提交并备注文件信息(备注的信息github上会看到)
git remote add origin git@github.com:Allen-1991/test.git #添加远程仓库,命名为origin
git push -u origin master #将master的分支提交到远程origin仓库
这样代表提交文件到github成功!回到github看看
4、git的基本知识
(了解了上述的操作,我们来插入一下,git的基本知识)
–了解Git工作区、暂存区和版本库的概念
图一:
图二:
–以上述的操作来理解一下这里面的工作机制。
工作区:projec/目录
版本库(或者是本地仓库u):.git/ 目录
暂存区(stage):.git/index 文件
对象库:./git/ objects/ 目录
“master” 的是 master 分支所代表的目录树
“HEAD” 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换
–git add :当工作区新增一个文件,并执行git add时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中
–git commit :执行git commit时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
–git reset HEAD: 暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响(意思就是恢复远程的版本)
– git rm --cached : 会直接从暂存区删除文件,工作区则不做出改变
–下面试着工作区新增一个文件提交并撤回删除:
–git checkout . 或者git checkout – : 会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动
–git checkout HEAD . 或者 git checkout HEAD : 会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
5、git分支管理
此时,master分支的文件有:README.txt、test.txt
Testing分支目录只有README.txt文件,因为在创建新的分支的时候,跟当时的master分支内容一致。
再次用下面的例子感受下分支。
此时还在master分支上,master和master1分支都含有test1.txt。
此时,在分支master上,提交新建的test2.txt,master和master2含有文件test1.txt和test2.txt,而分支master1只含有文件test1.txt。
此时,又在分支master上,提交新建的test3.txt,master含有文件test1.txt、test2.txt、test3.txt,而master1仍只含有test1.txt,master2含有test1.txt、test2.txt。
此时,把master2合并到master1上,master1和master2都含有文件test1.txt和test2.txt。
所以,通过上面的两个例子,我们明白了分支的作用,以及分支之间的联系又是怎样的。上面分支的图看着更是明白了,分支可以帮助我们从开发的主线上分割出来单独开发。
6、合并分支
Master分支含有test.txt文件,内容为”master”
然后新建分支master1,修改tets.txt内容为”master1”,新增文件master1.txt,提交。
切换回分支master,新增master.txt文件,提交。
此时,在分支master上,切换至分支master1,含有文件test.txt、master1.txt。切换回分支master,含有文件test.txt、master.txt。(其中test.txt内容不一致)
将分支master1合并到master上,此时,master分支上的test.txt内容变为”master1”。
7、本地文件上传github
上传的时候,远程仓库中有着本地仓库没有的文件,及导致本地仓库和远程有不同的开始点,也就是两个仓库没有共同的 commit 出现的无法提交。
所以,应该先拉取远程仓库的文件到本地后,在此基础上再修改再提交至远程仓库。
–git pull origin master --allow-unrelated-histories
8、如何删除github上的仓库
8.1点击进入要删除的仓库
8.2、点击setting滑到最下方的Danger Zone,Delete this repository
https://www.runoob.com/git/git-remote-repo.html
https://blog.csdn.net/liulei952413829/article/details/117553977?spm=1001.2014.3001.5502