版本控制器Git使用介绍

Git与svn对比:

svn: 集中式版本控制工具(服务器完成对文件的版本控制)(一个仓库)

git:分布式版本控制工具(客户端、服务器都可以完成对文件的版本控制)(两个仓库,本地仓库、远程仓库)

 

git工作流程

1.从远程仓库中克隆 Git 资源作为本地仓库。

2.从本地仓库中checkout代码然后进行代码修改

3.在提交前先将代码提交到暂存区。

4.提交执行commit命令。提交到本地仓库。本地仓库中保存修改的各个历史版本。

5.在修改完成后,需要和团队成员共享代码时,可以将本地仓库的代码push到远程仓库。

下图展示了 Git 的工作流程

 

 

 

1:本地仓库: 存入工程代码(压缩的)

工作区? idea工作目录(代码明文)

暂存区? 提交到本地仓库之前的存储位置,可以回退

命令:add(添加到暂存区);commit(提交到本地仓库)

2:远程仓库:(代码与他人共享的地方)

命令:clone(远程仓库的代码克隆到本地仓库 所有的版本);pull(将代码从远程仓库拉取到本地开发 只拉取某一版本的代码, 会尝试合并(远程与本地));push(将代码从本地仓库推送到远程仓库)

clone与pull的区别

clone:第一次连接远程仓库 所有的版本 初始化

pull:第一次用clone命令,如果已经连接是哪个,其他都用pull命令拉取 只拉取某一版本的代码 会尝试合并(远程与本地)

 

使用git管理文件版本-本地仓库

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复制到工作目录中

第二步:将工程添加到暂存区。

这两步跟上面演示的一样

第三步:忽略文件或文件夹

在此工程中,并不是所有文件都需要保存到版本库中的例如“out”目录及目录下的文件就可以忽略。好在Git考虑到了大家的感受,这个问题解决起来也很简单,在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

 

 

 

 

 

 选择保留本地文件。完成后在此文件夹内会多出一个.gitignore文件,这个文件就是文件忽略文件,当然也可以手工编辑。其中的内容就是把.idea和out目录忽略掉。

 

 

 这个文件里面就保存了需要需略的文件信息,这样在提交的时候就不会提交这几个文件

第四步:提交代码

将代码添加到master分支上,其中.gitignore文件也需要添加到暂存区,然后提交到版本库。

 

忽略文件(.gitignore)语法规范

空行或是以 # 开头的行即注释行将被忽略。

可以在前面添加正斜杠 / 来避免递归,下面的例子中可以很明白的看出来与下一条的区别。

可以在后面添加正斜杠 / 来忽略文件夹,例如 build/ 即忽略build文件夹。

可以使用 ! 来否定忽略,即比如在前面用了 *.apk ,然后使用 !a.apk ,则这个a.apk不会被忽略。

*用来匹配零个或多个字符,如 *.[oa] 忽略所有以".o"或".a"结尾, *~ 忽略所有以 ~ 结尾的文件(这种文件通常被许多编辑器标记为临时文件); [] 用来匹配括号内的任一字符,如 [abc] ,也可以在括号内加连接符,如 [0-9] 匹配0至9的数; ? 用来匹配单个字符。

看了这么多,还是应该来个例子:

.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仓库,要想让其他人来协作开发,此时就可以把本地仓库同步到远程仓库,同时还增加了本地仓库的一个备份。

常用的远程仓库就是github:https://github.com/,接下来我演示如何将本地代码同步到github。

 

(1)在github上创建仓库

首先你得在github上创建一个账号,这个就不演示了。然后在github上创建一个仓库:

官网:https://github.com/

注册账号:

 

然后登录,登录就不演示了

新建仓库

 

 

 

登录后:选择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 用于识别这个密钥的注释 ,这个注释你可以输入任何内容,很多网站和软件用这个注释作为密钥的名字

一路回车即可

 

 

 

 执行命令完成后,在window本地用户.ssh目录C:\Users\用户名.ssh下面生成如下名称的公钥和私钥:

 

 

 密钥生成后需要在github上配置密钥,本地才可以顺利访问。

 

在key部分将id_rsa.pub文件内容添加进去,然后点击“Add SSH key”按钮完成配置。

 

 

 

 

 

使用ssh协议同步到远程仓库

同步到远程仓库可以使用git bash也可以使用tortoiseGit

使用git bash

在仓库所在的目录(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

 

 

使用TortoiseGit同步的话:

因为tortoiseGit中使用的是PuTTYgen生成的密钥,所以如果我们想使用我们之前的密钥的话,则需要先对密钥进行转换

设置tortoiseGit

 

 配置远程服务器地址

 

 【推送】:即push指令

查看github

 

 


(4)使用https协议同步到远程仓库

使用TortoiseGit同步

创建仓库mytest3

 

 选择“Git同步”

 

 

 

 这时候推送需要输入“用户名”和“密码”,对应注册github的账号和密码。

 

 查看github

 

 

 

2:从远程仓库上克隆

克隆远程仓库也就是从远程把仓库复制一份到本地,克隆后会创建一个新的本地仓库。选择一个任意部署仓库的目录,然后克隆远程仓库。

第一次获取代码的时候,需要创建一个新的本地仓库,用的是克隆,之后拉取同一个项目的代码时,就不需要用克隆了,直接拉取就行,因为本地已经有了对应的仓库

使用ssh协议TortoiseGit克隆:

 

 在任意目录点击右键:

 

 

 

 

 

查看是否克隆下来

 

 

 

 

3:从远程仓库取代码

Git中从远程的分支获取最新的版本到本地有这样2个命令:

1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge(合并代码)

2. git pull:相当于是从远程获取最新版本并merge到本地,上述命令其实相当于git fetch 和 git merge

在实际使用中,git fetch更安全一些,但是不常用!

因为在merge前,我们可以查看更新情况,然后再决定是否合并。

git pull更常用,因为即得代码又可以自动合并

如果使用TortoiseGit的话可以从右键菜单中点击“拉取”(pull)或者“获取”(fetch)

 

 

 

4:解决多人协作中版本冲突问题

出现版本冲突,先拉取(pull)远程仓库的代码到本地。

编辑冲突:

 

 

 合并成一个新的文件:

 

 再次推送,没有问题

 

 

 

然后远程仓库还可以自己搭建,如果是在公司工作的话,很有很能就是公司搭建的仓库。git使用简单介绍就是这样了,可能还有一个分支的概念没整理。

 

 

posted @ 2020-10-19 22:13  名难  阅读(175)  评论(0编辑  收藏  举报