Git使用入门,使用原理解读及如何在GitLab、GitHub或者Stash上管理项目(二)

来源:互联网 发布:淘宝 钥匙书签 编辑:程序博客网 时间:2024/06/03 05:15

这是继承上一篇的续篇,所以希望小白读者尽量先看完第一篇再来看本篇。上一篇的链接:Git使用入门(一)

本篇将会主要讲解一下remote和merge相关,读者理解以后则可以开始了解所谓的Merge Request流程(当然这个流程还有很多叫法~)。


上一篇已经讲到,remote即远程。比如你公司使用Stash管理项目时,你们公司的Stash服务器就是你的remote端;比如你使用Github管理自己的项目时,Github端就是你的remote端。其实你的本地库Repository可以同时对应到很多remote端的哦~也就是说你可以把你本地的库push到任何几个你有权限的remote端!这一点amazing,但是一开始不建议大家这么做,等以后越来越熟悉了再涉足这方面省着出乱子~下面就先对一个本地库对应到一个remote端来进行分析。


就Github进行举例吧,如果我们要在Github这个服务器上维护一个自己的项目,或者叫Repository,其实有两种方法可以实现,下面就来一一介绍流程及原理:

统一的起始步骤:

我们在Github上用自己的账号新建一个Repository(这个步骤直接上Github按照说明做,简单的几步操作即可完成),建立完成后Github会给我们一个地址(这里的地址其实有两种,一种是SSH的一种是HTTPS的,建议大家直接用HTTPS的比较方便),如https://balabala/testproject。此后就代表Github已经为你在服务器端开辟了一个Repository,而那个地址就是指向这个Repository的。显然,目前这个Repository还是个空的库,里面什么东西都没有,顶多有个说明文件README。

现在的进度大家明确一下:我们仅仅是在服务器上有了一个空仓库,而我们的本地还什么都没做什么都没有。

而我们要实现的状态是:在服务器上的仓库中有我们的项目,在我们本地也有一份同样的项目,并且两者是相互“关联”的(即我们如果pull则能从这个服务器上拉数据下来,如果push则能把本地数据推到这个服务器的这个仓库中去)。

下面就要分两种方法了:

第一种方法:

用Git Bash打开并进入一个目录,使用Git clone https://balabala/testproject 命令将Github上的仓库“克隆”下来,就在当前目录。这个过程其实从整体上做了两类事情:1.在当前目录下建立Repository库,将Github上的testproject库中的文件下载下来并按部就班地部署到本地Repository库中;2.既然是clone下来的,那么“自然而然”地就会产生了关联。即本地Repository与Github上的Repository已经产生了联系,我们不管是git pull命令还是git push命令都会互相找到对方。我们不必了解到底发生了什么,这里涉及到的原理会在第二种方法中彻底帮大家解读。

不要忘了现在不管是本地还是remote都是空项目呢,里面基本没什么东西。那么下一步就是去我们事先已经有了的项目目录,将我们要管理的文件内容拷贝到本地当前的目录下,然后git add进所有要管理的文件,再git commit进所有的文件。现在是不是我们所有想管理的文件都已经在本地纳入了Git的管理了?我们本地的Repository库已经内容丰富了!下一步就是git push啦,将本地Repository里所有新的内容都推到Github服务器上去,这样不管是本地还是remote都已经达到了我们想要的状态了。

上面这个方法同时也是很多新人喜欢的方法。弊端有两个:1是这样很表层,我们很难理解底层到底做了什么,我们为什么这样做,一旦出了问题我们就瞎眼了。2.这样做会对我们的项目文件来回迁移,再import进IDE,这样的迁移成本比较高而且相当相当没必要!!!为什么我们因为对Git工具的不理解而做工具的奴隶呢?我们要了解正在使用的工具,让工具屈服于我们才对啊!


第二种方法:

直接用Git Bash进入我们事先已经有了的IDE正在指向的项目目录,这个目录下有我们要管理的所有文件。使用git init命令,直接在当前目录下建立Repository进行项目管理,然后把所有需要管理的文件git add然后git commit进来。这时候我们本地就有了饱满的Repository,与我们的目标唯一的区别就是我们本地的饱满的Repository和Github上的空Repository完全没有关系。

怎么建立联系呢?git remote add myGithubRemote https://balabala/testproject 命令就OK了!这个命令的意思就是,我们本地的Repository定义了一个名字叫做myGithubRemote的remote端,这个remote端指向的是https://balabala/testproject地址上的远程Repository。此时你可以用git remote -v 命令查看一下我们的remote状态,在结果信息里就可以看到了myGithubRemote 和 https://balabala/testproject 的对应关系。简单情况下,这时我们在执行git push命令时Git就知道应该把数据推到哪里了,就是myGithubRemote对应的https://balabala/testproject地址的仓库。当我们push完毕之后,就已经达到了目标状态,而且不用做什么文件迁移。了解了这些之后,不难猜测第一种方法中git clone的第二类操作到底做了什么,其实Git就是默认为我们git remote add origin https://balabala/testproject了,Git默认给我们建立了这个对应关系,并且给这个远程库起名叫origin!这个origin就相当于我们自己定义的那个myGithubRemote~


这里的目的不是为了手把手教大家如何操作,而是为了让大家明白原理,所以,为了尽快地说明原理,很多细节小编就没有赘述。具体细节小编建议,自己思考着原理,亲自去实践几遍,到时候收货才会更大。


好吧已经很晚了,没想到自己又说了这么多废话。merge相关和Merge Request相关都没有来得及讲,姑且就先放在下一篇中讲完吧~点击打开链接






0 0