Git学习笔记

一笑奈何 提交于 2020-03-22 13:02:18

Git学习笔记

目录
一 git的安装
二 使用git管理文件版本
三 远程仓库
四 分支管理
五 IDEA中的git
六 Eclipse使用git

同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。到 2002 年,整个项目组开始启用分布式版本控制系统 BitKeeper 来管理和维护代码。

到 2005 年的时候,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了免费使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux的缔造者 Linus Torvalds )不得不吸取教训,只有开发一套属于自己的版本控制系统才不至于重蹈覆辙。他们对新的系统订了若干目标:

• 速度

• 简单的设计

• 对非线性开发模式的强力支持(允许上千个并行开发的分支)

• 完全分布式

• 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

一. Git的安装

1.安装git for windows

下一步即可

2.安装TortoiseGit

安装后默认选项下启动配置画面填写姓名邮箱(无影响)

3.搭建私有服务器

远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改。GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用。

  1. 安装环境

    yum -y install curl curl-devel zlib-devel openssl-devel perl cpio expat-devel gettext-devel gcc cc

  2. 下载tar.gz文件传到linux中并解压缩 使用tar -zxvf xxx.tar.gz解压

  3. 使用make prefix=/usr/local/git all编译 其中prefix中的是目录

  4. 使用make prefix=/usr/local/git/gitInstallDir install安装 其中prefix中的是目录

  5. 创建git用户adduser -r -d /home/git -m git 创建密码passwd git

  6. 创建git仓库使用 git --bare init /home/git/repository

使用--bare参数,创建不带工作区的纯仓库

注意:如果不使用“--bare”参数,初始化仓库后,提交master分支时报错。这是由于git默认拒绝了push操作,需要.git/config添加如下代码:

[receive]

​ denyCurrentBranch = ignore

二. 使用git管理文件版本

1.使用TortoiseGit右键操作即可

2.使用GitBash管理

创建仓库$ git init

添加文件 $git add test.txt

将暂存区更新到仓库$git commit –m ‘日志信息 ’

删除操作$git rm file 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f

查看项目的当前状态$git status 加了 -s 参数,以获得简短的结果输出。如果没加该参数会详细输出内容

显示已写入缓存与已修改但尚未写入缓存的改动的区别$git diff :

  • 尚未缓存的改动:git diff
  • 查看已缓存的改动: git diff --cached
  • 查看已缓存的与未缓存的所有改动:git diff HEAD
  • 显示摘要而非整个 diff:git diff --stat

用于取消已缓存的内容$git reset HEAD

3.工作区和暂存区

Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。

什么是工作区(Working Directory)?

工作区就是你在电脑里能看到的目录,比如我的reporstory文件夹就是一个工作区。

有的同学可能会说repository不是版本库吗怎么是工作区了?其实repository目录是工作区,在这个目录中的“.git”隐藏文件夹才是版本库。这回概念清晰了吧。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

我们把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

三. 远程仓库

1.ssh协议

SSH 为 Secure Shell(安全外壳协议)的缩写,由 IETF 的网络小组(Network
Working Group)所制定。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用
SSH 协议可以有效防止远程管理过程中的信息泄露问题。

2.基于ssh密钥的安全验证

使用ssh协议通信时,推荐使用基于密钥的验证方式。你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。

3.ssh密钥生成

使用git bash 执行命令,生命公钥和私钥

ssh-keygen -t rsa

在C:\Users\用户名.ssh中生成公钥和私钥其中id_rsa是私钥id_rsa.pub是公钥

4.同步到GitHub

在GitHub的setting中添加自己的公钥(最好用notepad++等工具打开公钥)

然后再git bash中执行:

$git remote add origin git@github.com:自己的用户名/自己的仓库名.git ——此为ssh方式连接GitHub(推荐)

$git remote add origin https://github.com/自己的用户名/自己的仓库名.git ——此为http方式连接GitHub

$git push -u origin master

两种方式都可以但使用http会一直登录非常繁琐

PS:如果出现remote origin already exists错误需要使用下面的命令

git remote rm origin

5.从远程仓库克隆

使用此命令即可$ git clone git@github.自己的用户名/自己的仓库名.git

6.连接自己的私有服务器

$ git remote add origin git@192.168.25.128:repo

或$ git remote add origin ssh://git@192.168.25.128/home/git/repo

四. 分支管理

​ 在我们每次的提交,git都把他们串成一条时间线,这条时间线就是一条分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD指针严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。

​ 每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上。所以,Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!

​ 不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变。

​ 假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并。所以Git合并分支也很快!就改改指针,工作区内容也不变!

​ 合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支。

1.使用TortoiseGit实现分支管理

创建分支

在本地仓库文件夹中点击右键,然后从菜单中选择“创建分支”。

如果想创建完毕后直接切换到新分支可以勾选“切换到新分支”选项或者从菜单中选择“切换/检出”来切换分支:

img

分支创建完成后,右键,发现git的提交指向了刚创建的branch分支了

下面就新增一个功能 DeploymentController.java ,及将Employee中的修改方法的返回值封装成一个工具类,如下图:

img

提交到本地分支 branchOne ,并Push远程仓库。远程仓库的branchOne中的内容,如下图:

img

假如假如新功能后,系统上线运行发生故障,短时间内无法处理,需要回到之前的代码,这儿就可以通过切回到主干master即可。点右键 -> TortoiseGit -> Switch/Checkout(切换检出) ,选择master后,点击 “ OK ” 即可

合并分支

合并分支主要应用到项目的并行开发的情况,在两个项目小组或多个项目小组的开发工作完成并测试无误后,进行项目的合并工作,这一点就体现出了分支的最强大的地方。

将 branchOne 分支合并到主干 master,右键 -> TortoiseGit -> Merge(合并)

选中需要合并的分支,合并信息可选,然后点击 OK 即可,如下图:

img

在日志中,可以常看分支合并的详细内容

img

当然合并分支后,由于其他原因,有不想合并了,可以通过回退的方式,还原原来主干master的原代码状态,在日志中选中需要回退的版本右键 -> Reset "master" to this 即可。

删除分支

如果分支不想用了,可以直接删除,这儿为了体现出效果(再次将分支进行合并),分支删除后,代码将还原到主干master,右键 -> TortoiseGit -> Merge(合并) 点击 Branch 后面的选项,如下图:

img

在弹出框中,选择需要删除的分支右键 -> Delete remote branch 即可

2.使用gitbash

创建分支命令:没有参数时,git branch 会列出你在本地的分支。

git branch (branchname)

切换分支命令:

git checkout (branchname)

合并分支命令: git checkout -b (branchname) 命令来创建新分支并立即切换到该分支下

git merge 

删除分支命令:

git branch -d (branchname)

eg:

$ git branch testing
$ git branch
* master
  testing
我们也可以使用 git checkout -b (branchname) 命令来创建新分支并立即切换到该分支下
$ git checkout -b newtest
Switched to a new branch 'newtest'
------------------------------------
$ ls
README
$ echo 'lalala' > test.txt
$ git add .
$ git commit -m 'add test.txt'
[master 3e92c19] add test.txt
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt
$ ls
README        test.txt
$ git checkout testing
Switched to branch 'testing'
$ ls
README
当我们切换到 testing 分支的时候,我们添加的新文件 test.txt 被移除了。切换回 master 分支的时候,它们有重新出现了。
-----------------------------------------------
$ git branch
* master
  testing
$ git branch -d testing
Deleted branch testing (was 85fc7e7).
$ git branch
* master
-------------------------------------------------
$ git branch
* master
  newtest
$ ls
README        test.txt
$ git merge newtest
将 newtest 分支合并到主分支去

3.冲突合并

TortoiseGit

例如在master分支中对mytest.txt进行编辑,然后提交到版本库。

切换到dev分支,对mytest.txt进行编辑,最后进行分支合并,例如将dev分支合并到master分支。需要先切换到master分支然后进行分支合并。

出现版本冲突。冲突需要手动解决。

在冲突文件上单机右键选择“解决冲突”菜单项。

把冲突解决完毕的文件提交到版本库就可以了。

GitBash

一个合并冲突就出现了,接下来我们需要手动去修改它。在 Git 中,我们可以用 git add 要告诉 Git 文件冲突已经解决。

五.在IDEA使用git

配置git

安装好IntelliJ IDEA后,如果Git安装在默认路径下,那么idea会自动找到git的位置,如果更改了Git的安装位置则需要手动配置下Git的路径。

选择File→Settings打开设置窗口,找到Version Control下的git选项,选择git的安装目录后可以点击“Test”按钮测试是否正确配置。

设置GitHub账号

接下来为github设置账号密码:
菜单->settings->Version Control->GitHub->Add account
设置好了之后,IDEA的git准备工作就做好了

用IDEA从github上pull一个现成的项目到本地(Clone)

checkout
菜单->VCS->Chekout from Version Control->Github(或者Git),之后输入URL,点击test即可
这里的URL就是GitHub上的项目git地址,然后点击 Clone。

在这里插入图片描述

本地项目push到GitHub上(push)

接着在本地创建一个项目helloworld,并且新建一个Java类

菜单->VCS->import into Version Control->Create Git Repository->e:\project\helloworld-OK

把项目加入到本地仓库的stage区暂存右键项目->Git->Add

将暂存的项目提交到本地仓库然后提交到远程仓库(IDEA里将这两步骤简化为一步 即Commit and Push)

右键项目->Git->Commit Directory之后弹出如图所示的窗口,在Commit Message 输入日志信息, 然后点击 Commit And Push

在这里插入图片描述

同步代码

如果需要从服务端同步代码可以使用工具条中的“update”按钮

六.在eclipse使用git

Eclipse从LUNA版本开始默认支持了GIT客户端,可以在导航菜单中windows --> preferences搜索git查看git相关配置。
Eclipse中对于git的操作基本都在右键菜单Team中。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!