git是目前最流行的版本管理系统。
参考:
<a href="http://www.ruanyifeng.com/blog/2014/06/git_remote.html">http://www.ruanyifeng.com/blog/2014/06/git_remote.html</a>
<a href="http://www.bootcss.com/p/git-guide/">http://www.bootcss.com/p/git-guide/</a>
手册:
<a href="http://www.yiibai.com/git/">http://www.yiibai.com/git/</a>
官网:
git有很多优势,其中之一就是远程操作非常简便。基本上经常用的几个命令就能满足大多数场景的需求。同时可以和现有的ide集成开发环境结合使用。
首先看一下git是如何工作的:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gDM4MDMxATM4ITMxUTMwIzLcRXZu5ibkN3Yuc2bsJmLn1Wavw1LcpDc0RHaiojIsJye.jpg)
这里面涉及到了workspace、本地仓库和远程仓库。workspace就是本地的个工作空间,比如说我们的一个工程。本地的工程文件要和远程仓库交互,需要先在本地创建一个仓库,这时候就需要将本地的项目,提交到本地仓库中,然后再将本地仓库提交到远程仓库。
当然还有一些东西没法在这个过程里体现的,上图中只是托管的过程,实际上还有代码库的版本更迭的过程。这里用分支来管理不同的版本。创建一个git peoject默认的分支是master。
针对我们平时的一些场景来看下上面的过程:
我在本地创建了一个workspace,简单来讲就是创建了一个本地的工程项目,我如何让远程的代码库来管理我的代码呢?
创建工程项目,并创建本地仓库repository,并添加一个文件
创建好了本地的仓库,如何去管理本地仓库?
- 增加文件: git add
- 删除文件: git rm
- 重命名文件: git mv
- 更新文件:修改文件内容
- 检出: git checkout branch,用于本地分支的操作
- 查看状态: git status -s, git log
文件的增删改操作并没有提交到本地,需要commit之后才提交到本地仓库, 常用的提交命令git commit -a -m ” “或者git commit -m ” “, -m 提交的备注信息, -a 会自动提交已有文件的更新操作。 用户也可以在本地创建新的分支git branch new_branch, 当前的branch可以git branch命令查看,本地的branch切换git checkout new_branch。git checkout -b new_branch命令用于创建一个新的分支并切换到新分支。有了分支如何合并?在master分支下运行:git merge origin/new_branch,将会把新的分支合并到master分支。
本地的修改如何提交到远程仓库?
远程代码提交,需要先将本地代码添加到本地仓库,才能提交。
- 增加 git remote add <主机名> <网址>
- 提交 git push <远程主机名> <本地分支名>:<远程分支名>
本地对文件的update、mv、rm会影响仓库中的代码吗?
本地没有代码,从远端下载的代码,又该如何管理?
- git clone
- git fetch <远程主机名> <分支名> //获取更新 origin
- git pull <远程主机名> <远程分支名>:<本地分支名> //获取更新并与本地合并
远程主机的管理 git remote add <主机名> <网址> git remote show <主机名> git remote rm <主机名> git remote rename <原主机名> <新主机名>
具体的安装可以参照相关的官方教程实现,当然还有一些简便方法,可以下载all-in-one安装包,一次性安装。安装包可以去bitnami官网下载。
基本的使用规范和github的使用是相同的,如果用户需要使用ssh来提交代码,需要添加公钥密码。当然也可以直接使用http地址提交,不需要配置。
ssh的设置可以通过,profile settings中完成,具体的过程gitlab上有帮助说明,点击进去就可以看到。这里不再赘述。
命令使用手册说明
要在对应的项目下设置不同人员的ssh key用于认证,同时在项目组成员中添加对应的成员。
象,高层的api是一个面向普通用户级别功能友好的前端。
这里主要是介绍高层的api,因为高层的api,暂时已经满足我们的需求。以下根据git的工作流程,分点列出api的介绍:
高层api操作git的方法的核心对象就是根据git类提供的方法。
(1)用filerepositorybuilder来创建新的仓库,或者打开已有的仓库。
(2)或者直接用git提供的静态初始化的方法:
git.init()
(此方法,源代码也是利用了repositorybuilder的方法)
利用核心类git的静态方法clonereposity,设置本地和远程的uri来获取仓库。
这边,jgit主要通过ssh和http(s)的方式与远程仓库进行交互。通过这两种方式,
必然是需要添加验证信息的。以下一一介绍:
clonecommand clonecommand = git.clonereposity();
clonecommand通过setcredentialsprovider()的方法,通过赋值一个
usernamepasswordcredentialsprovider对象,来提供用户名和密码登陆。
(不建议使用http的方式传送,但是也可行)
其实通过公钥访问的链接,有两种表示方式:
ssh://[email protected]/repo.git
git@../user/.git
而ssh利用公钥的访问方式的认证信息,通过jsch库提供。而在jgit中提供了
jschconfigsessionfactory的抽象类:
以下这是在command中注册认证信息:
使用的是上述jschconfigsessionfactory重写的configure方法中,设置
password,具体就不详述了。
对应git对象的add()方法,通过addfilepattern()匹配文件,添加到仓库中,使用call
方法最终实现命令执行。
往本地仓库的提交,设置信息message。
git.commit().setmessage(string message).call();
将远程的仓库拉取下来,需要设置认证的信息。
将修改提交到远程仓库,需要设置认证信息。