gitlab
原本在工作中使用的版本控制工具为svn,由于是多人合作开发,产生操作失误,会导致一些严重的后果,比如我的操作就导致项目搬家,重新控制,非常不好。
后来使用了gitlab,因为没有使用过git ,特地去网络上找了git的相关使用资料。
首先安装git
git是有密钥这一个东西的,我们要先生成密钥,然后在自己的git账户里设置密钥。
打开本地git bash,使用如下命令生成ssh公钥和私钥对
ssh-keygen -t rsa -C ‘xxx@xxx.com’ 然后一路回车(-C 参数是你的邮箱地址)
然后打开~/.ssh/id_rsa.pub文件(~表示用户目录,比如我的windows就是C:\Users\Administrator),复制其中的内容
打开gitlab,找到Profile Settings–>SSH Keys—>Add SSH Key,并把上一步中复制的内容粘贴到Key所对应的文本框,在Title对应的文本框中给这个sshkey设置一个名字,点击Add key按钮
到此就完成了gitlab配置ssh key的所有步骤,我们就可以愉快的使用ssh协议进行代码的拉取以及提交等操作了
再试一下拉取代码和提交代码,应该就不需要输入密码了
我是使用的idea插件进行git的操作的:
在配置完成后,对本地创建的项目点击add(添加进版本控制),commit directory(项目提交到本地仓库),push(将本地仓库里的代码推送到远程仓库),pull(将远程仓库的代码更新一份到本地,git pull 命令即可)
这些是git的命令
gitlab tool仓库(使用gitlab下载软件)
常用命令:
git init
初始化git仓库
git clone
克隆
git add .
添加到暂存区
git status
查看文件提交状态
git commit -m
提交
git remote add [repo name] [repo location]
增加远程仓库
git remote -v
查看远程仓库
git remote rm repo name
移除远程仓库
git push optional [repo name] [repo branch]
push到远程仓库
git pull
pull到远程仓库
git工作流程:
首先 git add 将文件添加版本控制,添加到暂存区,暂存区通过git commit 添加到本地仓库,
本地仓库,进行push 将 本地仓库存的每一个commit 推到远程仓库
git ignore:添加要忽略的文件后缀。(要使这个文件生效,那么就不能让要忽略的文件添加到本地仓库和远程仓库,也不能存在与暂存区,idea 有一个插件 ignore 可以尝试去使用以下)
关于分支操作:
在远程仓库会有一个master分支,这个分支是默认创建的分支,可以理解为,远程仓库会有很多分支这只是其中一条分支(主分支,稳定分支,不会经常修改)。
那么要进行功能开发push到远程仓库,进行保管,但是又不想干扰到主分支怎么办呢?
那就创建一个属于自己的分支,源分支为master分支,然后开始开发功能,功能开发完成后,将开发的分支合并进主分支中。这就是分支操作的流程。
这其中有一些细节:有好多人分别开发功能,创建了许多的分支,你开发功能完成之后,你的源分支master已经被别人合并过了,那么你再合并会出问题吗?
这里要讲的是:请把每一次的提交(commit)看成一个个的对象,在你开发时,主分支上有一个commit,你通过源分支创建了一个自己的分支,另一个人也创建了一个分支,在你进行commit时,你的本地仓库有两个commit了,另一个人也在他自己的本地仓库commit了,这时他也有两个commit ,然后你们要合并到主分支上,另一个人先合并。
在他的仓库中有两个commit 比 主分支多一个commit,于是主分支被合并,主分支就有两个不同的commit了,这时你再push,主分支和你自己的分支分别有一个相同的commit 和一个不同的commit,合并操作时,会将你的commit 给 合并到 主分支中去,所以这其实只是一个 commit的转移,全程操作commit。
我把每一个commit 看成一个叠箱子的过程(每一个箱子都是一个commit)。主分支上的箱子越堆越多,自己造的箱子都堆到主分支上去。(有点抽象,但是很好理解)
分支在表达上,类似于河流的分流,但是其实不是这样的
在系统创建分支时,就有一条将commit串起来的一条“流”。
我们每创建一条分支,其实就是创建了一个指针,这个指针指向最新的commit。
我们进行分支的切换,就是在这些指针中间切换。
当我们在另一条分支上工作并且提交了之后,那么这条“流”就会多出一段来,多出的一段就是刚才提交的commit。
这时,新创建的分支指向最新提交的,默认分支则没有变化,可以自由的在分支之间进行切换,当你切换分支的时候 git会重置你的工作目录使你看起来像回到了没提交之前。
分支切换
在远程有多个分支时,将分支checkout到本地,这时本地有两条分支,一条为测试分支,一条为主分支,这时测试分支与主分支完全相同,在测试分支中进行修改操作但是没有添加到暂存区,没有提交的话,进行分支切换,切换到主分支时,在测试分支中的操作在主分支中也会出现,尽管这是两个不同的分支。
在测试分支进行添加暂存区并且提交到本地仓库之后,再切换到主分支,这时在测试分支作的改变在主分支就不会出现了,测试分支的祖先就成了主分支。这时测试分支进行修改但是不提交,要进行分支切换的话,git就会提醒你本地正在进行修改,要切换分支的话
分支合并
在多个分支工作,提交之后,需要把分支中的内容给提交到主分支(master)上,那么就需要合并分支。
合并分支需要发出合并请求,在合并过程中,如果你当前提交的分支是主分支的直接上游,那么指向master分支的指针就会直接指向这个需要合并的超前分支的最新commit上。
如果是两个不同的分支进行合并,两条分支在更早的时间点产生了分叉,并且其中一条分支合并入了master,所以现存的这两条分支是处在一个分叉上要将它们进行合并就有一些不同,这时 git会将两个分支的最新commit和两个分支的直接祖先进行一个三方合并,合并成一个新的commit,并且master指针指向这个commit,需要说的是 git会自己选择哪一个提交作为最优的共同祖先,并以此作为合并的基础。
如果两个分支对同一个文件的同一个地方进行了修改,那么就会出现冲突,需要自己手动解决冲突,此时git做了一个合并,但是并没有自动创建一个commit,git会暂停下来等你解决冲突了之后,使用add命令,将它标记为冲突已解决状态。这时再进行提交,则会产生一个commit了。
在进行分支合并了之后最好删除源分支,重新创建一个分支,可以避免许多不必要的麻烦
git ignore(忽略文件)
最近学习git的使用的时候,可以将某些文件忽略掉,不需要提交。在当时进行git的初始化的时候,没有想到这一层,将我本地的项目全部都进行了 Add(添加到了暂存区),然后进行git ignore 的文件的创建的时候,我发现了这个文件似乎没有作用,进行了百度,看了很多别人的博客发现时由于git ignore对进行跟踪的文件无法进行忽略,需要将暂存区中这部分文件给删除。
使用
git rm -r –cached . 清空暂存区
清空了之后,自己进行 add 添加暂存区 就可以了,注意远程仓库也需要删除想忽略的文件
本地分支操作
将远程分支master分支拉到本地后 在这之上做出修改,提交到远程分支,分支名称可以自己定,如果远程没有这个分支那么会创建一个,如果主分支更新了,可以执行更新,将主分支master更新到本地