Git是目前最流行的版本管理系统。
参考:
http://www.ruanyifeng.com/blog/2014/06/git_remote.html
http://www.bootcss.com/p/git-guide/
手册:
http://www.yiibai.com/git/
官网:
使用指南
Git有很多优势,其中之一就是远程操作非常简便。基本上经常用的几个命令就能满足大多数场景的需求。同时可以和现有的IDE集成开发环境结合使用。
首先看一下Git是如何工作的:
这里面涉及到了WorkSpace、本地仓库和远程仓库。WorkSpace就是本地的个工作空间,比如说我们的一个工程。本地的工程文件要和远程仓库交互,需要先在本地创建一个仓库,这时候就需要将本地的项目,提交到本地仓库中,然后再将本地仓库提交到远程仓库。
当然还有一些东西没法在这个过程里体现的,上图中只是托管的过程,实际上还有代码库的版本更迭的过程。这里用分支来管理不同的版本。创建一个Git Peoject默认的分支是master。
针对我们平时的一些场景来看下上面的过程:
场景1
我在本地创建了一个workspace,简单来讲就是创建了一个本地的工程项目,我如何让远程的代码库来管理我的代码呢?
创建工程项目,并创建本地仓库Repository,并添加一个文件
mkdir project1
git init
vim README.txt
git add README.txt
git commit -m "add README.txt"
创建好了本地的仓库,如何去管理本地仓库?
- 增加文件: 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会影响仓库中的代码吗?
场景2
本地没有代码,从远端下载的代码,又该如何管理?
- git clone
- git fetch <远程主机名> <分支名> //获取更新 origin
- git pull <远程主机名> <远程分支名>:<本地分支名> //获取更新并与本地合并
远程主机的管理
git remote add <主机名> <网址>
git remote show <主机名>
git remote rm <主机名>
git remote rename <原主机名> <新主机名>
使用小结
#Git global setup
git config --global user.name "liujie"
git config --global user.email "fiboliu@163.com"
#Create a new repository
git clone git@127.0.1.1:liujie/freelink-yarn.git
cd freelink-yarn
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
#Existing folder or Git repository
cd existing_folder
git init
git remote add origin git@192.168.1.114:liujie/freelink-yarn.git
git add .
git commit -m ""
git push -u origin master
私有平台建设
搭建GitLab代码仓库
具体的安装可以参照相关的官方教程实现,当然还有一些简便方法,可以下载All-in-One安装包,一次性安装。安装包可以去bitnami官网下载。
私有的GitLab仓库使用
基本的使用规范和GitHub的使用是相同的,如果用户需要使用SSH来提交代码,需要添加公钥密码。当然也可以直接使用HTTP地址提交,不需要配置。
SSH的设置可以通过,Profile Settings中完成,具体的过程GitLab上有帮助说明,点击进去就可以看到。这里不再赘述。
参考手册
命令使用手册说明
http://www.yiibai.com/git/
Q&A
多个人提交同一个项目
要在对应的项目下设置不同人员的SSH KEY用于认证,同时在项目组成员中添加对应的成员。
Git客户端
Git是使用JAVA的API来操控Git仓库的库,由Eclipse公司维护。
他提供的API分成两个层次,底层命令和高层命令。底层API是直接作用于低级的仓库对
象,高层的API是一个面向普通用户级别功能友好的前端。
这里主要是介绍高层的API,因为高层的API,暂时已经满足我们的需求。以下根据Git的工作流程,分点列出API的介绍:
高层API操作Git的方法的核心对象就是根据Git类提供的方法。
1.Reposity(仓库)初始化:
(1)用FileRepositoryBuilder来创建新的仓库,或者打开已有的仓库。
(2)或者直接用Git提供的静态初始化的方法:
Git.init()
(此方法,源代码也是利用了RepositoryBuilder的方法)
2.Git Clone
利用核心类Git的静态方法cloneReposity,设置本地和远程的URI来获取仓库。
这边,JGit主要通过SSH和HTTP(S)的方式与远程仓库进行交互。通过这两种方式,
必然是需要添加验证信息的。以下一一介绍:
(1)HTTPS - https://example.com/repo.git
CloneCommand cloneCommand = Git.cloneReposity();
CloneCommand通过setCredentialsProvider()的方法,通过赋值一个
UsernamePasswordCredentialsProvider对象,来提供用户名和密码登陆。
(不建议使用HTTP的方式传送,但是也可行)
(2)SSH with Public Key -
其实通过公钥访问的链接,有两种表示方式:
ssh://user@example.com/repo.git
git@../user/.git
而SSH利用公钥的访问方式的认证信息,通过JSCH库提供。而在JGit中提供了
JschConfigSessionFactory的抽象类:
SshSessionFactory sshSessionFactory = new JschConfigSessionFactory(){
@Override
protected void configure( Host host, Session session ) {
/*
解除HostKey检查,也就意味着可以接受未知的远程主机的文件,这是不安全的,这种模式只是用于测试为目的的。如果,设置为True,那么,需要将主机添加到底~/.ssh/known_hosts里面,否则会出现UnknownHostKey的问题。需要将对应的key添加到底~/.ssh/known_hosts里面,否则会出现 UnknownHostKey的问题。
*/
session.setConfig("StrictHostKeyChecking","no" );
}
};
以下这是在command中注册认证信息:
cloneCommand.setTransportConfigCallback( new TransportConfigCall back(){
public void configure(Transporttransport){
SshTransport sshTransport=(SshTransport)transport;
sshTransport.setSshSessionFactory(sshSessionFactory);
}
}
(3)SSH with Password - ssh://user@example.com/repo.git
使用的是上述JschConfigSessionFactory重写的configure方法中,设置
password,具体就不详述了。
(3)Git Add
对应git对象的add()方法,通过addFilepattern()匹配文件,添加到仓库中,使用call
方法最终实现命令执行。
(4)Git Commit
往本地仓库的提交,设置信息message。
git.commit().setMessage(String message).call();
(5)Git Pull
将远程的仓库拉取下来,需要设置认证的信息。
(6)Git Push
将修改提交到远程仓库,需要设置认证信息。