版本控制器Git使用介绍
:
1.从远程仓库中克隆 Git 资源作为本地仓库。
2.从本地仓库中checkout代码然后进行代码修改
3.在提交前先将代码提交到暂存区。
4.提交执行commit命令。提交到本地仓库。本地仓库中保存修改的各个历史版本。
5.在修改完成后,需要和团队成员共享代码时,可以将本地仓库的代码push到远程仓库。
下图展示了 Git 的工作流程:
1:本地仓库: 存入工程代码(压缩的)
工作区? idea工作目录(代码明文)
暂存区? 提交到本地仓库之前的存储位置,可以回退
命令:add(添加到暂存区);commit(提交到本地仓库)
2:远程仓库:(代码与他人共享的地方)
命令:clone(远程仓库的代码克隆到本地仓库 所有的版本);pull(将代码从远程仓库拉取到本地开发 只拉取某一版本的代码, 会尝试合并(远程与本地));push(将代码从本地仓库推送到远程仓库)
clone与pull的区别
clone:第一次连接远程仓库 所有的版本 初始化
1:创建版本库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来
创建一个版本库非常简单,可以使用git bash也可以使用TortoiseGit。首先,选择一个合适的地方,创建一个空目录(例如F:\repository)。
在当前目录中点击右键中选择Git Bash来启动。
创建仓库执行命令:
$ git init
(1)git init 有工作空间,可以编码,一般用于客户端
(2)git --bare init没有有工作空间,不可以编码,一般用于服务端(远程仓库)
版本库创建成功,会在此目录下创建一个.git的隐藏目录(叫做版本库)
版本库:“.git”目录就是版本库,将来文件都需要保存到版本库中。
工作目录(工作区):包含“.git”目录的目录,也就是.git目录的上一级目录就是工作目录。只有工作目录中的文件或者是文件夹才能保存到版本库中。
2:添加文件
在repository目录下创建一个mytest.txt文件,对该文件右键按下图点击添加,文本文件变为带“+”号的图标,表示该文件被放置到暂存区中:
提交文件:在mytest.txt上再次点击右键选择“提交”,此时将文件保存至版本库中。
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。
什么是工作区(Working Directory)?
工作区就是你在电脑里能看到的目录,比如我的reporstory文件夹就是一个工作区,不过如果为了方便管理,最好在这个文件夹中创建子文件夹,每个子文件夹对应一个工作区
什么是版本库?
在这个工作区目录中的“.git”隐藏文件夹是版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支(默认是master)。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
查看版本库,可点击“版本库浏览器:
3:修改文件
当文件内容修改后,需要和修改之前对比一下修改了哪些内容此时可以使用“比较差异功能”
此操作会撤销所有未提交的修改,所以当使用还原操作是需要慎重慎重
4:删除文件
需要删除无用的文件时可以使用git提供的删除功能直接将文件从版本库中删除。
此时不是真的删除,可以通过还原功能,还原文件,想要真的删除,直接提交一次工作区就可以了
如果文件版本库也被删除,此时本地文件彻底丢失了。
5:删除文件并保留副本
当然,如果不想做的太绝情,可以选择保留副本删除
此时文件删除,但是本地参考仍然存在,执行【提交】可以删除版本库的文件,但是mytest3.txt在本地会保留。
6:将java工程提交到版本库
第一步:将参考资料中的java工程HelloProjet复制到工作目录中
第二步:将工程添加到暂存区。
这两步跟上面演示的一样
第三步:忽略文件或文件夹
选择保留本地文件。完成后在此文件夹内会多出一个.gitignore文件,这个文件就是文件忽略文件,当然也可以手工编辑。其中的内容就是把.idea和out目录忽略掉。
这个文件里面就保存了需要需略的文件信息,这样在提交的时候就不会提交这几个文件
第四步:提交代码
空行或是以 # 开头的行即注释行将被忽略。
可以在前面添加正斜杠 / 来避免递归,下面的例子中可以很明白的看出来与下一条的区别。
可以在后面添加正斜杠 / 来忽略文件夹,例如 build/ 即忽略build文件夹。
可以使用 ! 来否定忽略,即比如在前面用了 *.apk ,然后使用 !a.apk ,则这个a.apk不会被忽略。
看了这么多,还是应该来个例子:
.gitignore文件
# 忽略 .a 文件 *.a # 不忽略 lib.a, 尽管已经在前面忽略了 .a 文件 !lib.a # 仅在当前目录下忽略 TODO 文件, 但不包括子目录下的 subdir/TODO /TODO # 忽略 build/ 文件夹下的所有文件 build/ # 忽略 doc/notes.txt, 不包括 doc/server/arch.txt doc/*.txt # 忽略所有的 .pdf 文件,包括在 doc/ directory 下的 doc/**/*.pdf
1:添加到远程仓库
刚刚我们只是在本地创建了一个Git仓库,要想让其他人来协作开发,此时就可以把本地仓库同步到远程仓库,同时还增加了本地仓库的一个备份。
(1)在github上创建仓库
首先你得在github上创建一个账号,这个就不演示了。然后在github上创建一个仓库:
登录后:选择Start a project
点击“create repository”按钮仓库就创建成功了。
Github支持两种同步方式“https”和“ssh”。如果使用https很简单基本不需要配置就可以使用,但是每次提交代码和下载代码时都需要输入用户名和密码(github注册的账号和密码)。如果使用ssh方式就需要客户端先生成一个密钥对,即一个公钥一个私钥。然后还需要把公钥放到githib的服务器上。我们先看ssh方式。
(2)ssh协议
使用ssh协议通信时,推荐使用基于密钥的验证方式。你必须为自己创建一对密匙(第1步),并把公用密匙放在需要访问的服务器上(第2步)。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
在windows下我们可以使用 Git Bash.exe来生成密钥,可以通过开始菜单或者右键菜单打开Git Bash
git bash 执行命令,生命公钥和私钥
命令: ssh-keygen -t rsa -C ‘邮箱’ 其中’邮箱’为注册github的登录账号的邮箱(也可使用github注册的账号) 当你创建ssh的时候:-t 表示密钥的类型 ,-b表示密钥的长度,-C 用于识别这个密钥的注释 ,这个注释你可以输入任何内容,很多网站和软件用这个注释作为密钥的名字 一路回车即可
当你创建ssh的时候:-t 表示密钥的类型 ,-b表示密钥的长度,-C 用于识别这个密钥的注释 ,这个注释你可以输入任何内容,很多网站和软件用这个注释作为密钥的名字
一路回车即可
密钥生成后需要在github上配置密钥,本地才可以顺利访问。
在key部分将id_rsa.pub文件内容添加进去,然后点击“Add SSH key”按钮完成配置。
同步到远程仓库可以使用git bash也可以使用tortoiseGit
在仓库所在的目录(F:\repository)点击右键选择“Git Bash Here”,启动git bash程序。
然后在git bash中执行如下语句:
git remote add origin git@github.com:fengchuikuchaji/itheima101_mytest.git
git push -u origin master
其中:origin就是一个名字,它是在你clone一个托管在Github上代码库时,git为你默认创建的指向这个远程代码库的标签, origin指向的是repository,master只是这个repository中默认创建的第一个分支。
查看github
配置远程服务器地址
【推送】:即push指令
查看github
(4)使用https协议同步到远程仓库
选择“Git同步”
这时候推送需要输入“用户名”和“密码”,对应注册github的账号和密码。
查看github
2:从远程仓库上克隆
克隆远程仓库也就是从远程把仓库复制一份到本地,克隆后会创建一个新的本地仓库。选择一个任意部署仓库的目录,然后克隆远程仓库。
第一次获取代码的时候,需要创建一个新的本地仓库,用的是克隆,之后拉取同一个项目的代码时,就不需要用克隆了,直接拉取就行,因为本地已经有了对应的仓库
在任意目录点击右键:
查看是否克隆下来
3:从远程仓库取代码
Git中从远程的分支获取最新的版本到本地有这样2个命令:
1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge(合并代码)
2. git pull:相当于是从远程获取最新版本并merge到本地,上述命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些,但是不常用!
git pull更常用,因为即得代码又可以自动合并
如果使用TortoiseGit的话可以从右键菜单中点击“拉取”(pull)或者“获取”(fetch)
4:解决多人协作中版本冲突问题
出现版本冲突,先拉取(pull)远程仓库的代码到本地。
编辑冲突:
合并成一个新的文件:
再次推送,没有问题
然后远程仓库还可以自己搭建,如果是在公司工作的话,很有很能就是公司搭建的仓库。git使用简单介绍就是这样了,可能还有一个分支的概念没整理。