Git入门安装、基本命令以及和SVN的区别

Git

Git简介

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

官网地址为:https://git-scm.com/

优点

  • 适合分布式开发,强调个体;
  • 公共服务器压力和数据量都不会太大;
  • 速度快、灵活;
  • 任意两个开发者之间可以很容易的解决冲突;
  • 离线工作。

缺点

  • 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息
  • 权限控制不友好

和SVN的区别

SVN

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作.

集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。

但是相较于其优点而言,集中式版本控制工具缺点很明显:

  • 服务器单点故障
  • 容错性差

Git

Git不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

Git是分布式版本控制系统,它没有中央服务器,每个人的电脑就是一个完整的版本库,这样工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了

两者的区别

  1. Git是分布式的,SVN不是:这是Git和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
  2. Git把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
  3. Git分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
  4. Git没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
  5. Git的内容完整性要优于SVN:Git的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

Git工作流程

  1. 从远程仓库中克隆 Git 资源作为本地仓库
  2. 从本地仓库中checkout代码然后进行代码修改
  3. 在提交本地仓库前先将代码提交到暂存区
  4. 提交修改,提交到本地仓库;本地仓库中保存修改的各个历史版本
  5. 在需要和团队成员共享代码时,可以将修改代码push到远程仓库

Git中的两区两库----核心

Workspace: 工作区,就是你平时存放项目代码的地方

Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

Git的安装、卸载

这边直接下一步

选择自己常用的编辑器

安装完成

Git Bash:与Linux的命令行风格一样

Git CMD:Windows风格的命令行

Git GUI:图形界面的Git

Git配置

$ git config -l  ---查看git所有的配置
$ git config --system --list   ---查看系统下的配置
$ git config --global --list   ---查看全局配置

在git中所有的配置文件都是保存在本地文件下

E:\Git\Git\etc\gitconfig —-system系统级

C:\Users\asus.gitconfig --list查看全局配置

设置用户名以及邮箱 —重要,不设置不能提交项目

$ git config --global user.name "wj"  设置用户名
$ git config --global user.email "wj1623847352@gmail.com"

仓库搭建

本地

在本地建立一个文件夹,然后在文件夹里边右键Git Bash

$ git init   初始化一个项目

克隆远程仓库

克隆远程目录

$ git clone [url] https://gitee.com/mihh/mimihuhu.git --Gitee
$ git clone [url] https://github.com/MMHH-mh/mmhh.git --GitHub

Git文件的四种状态

版本控制就是对文件的版本控制,要对文件修改、提交等操作。首先我们要先知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上

  • untracked :刚被新建,存放在文件夹中并没有加入到git库中。还未被跟踪 通过git add 或者 git add.将其状态变为staget 也就是将其添加到暂存区

  • unmodify:文件已入库,还未被修改,这个时候版本库中的文件快照内容与文件夹内容完全一致。如果他被修改状态就会变为modify,如果使用git rm移出版本库,他就又会变成为untracked 文件

  • modify :文件已经修改并没有进行其他操作。通过git add可以将其添加到staget (暂存区)或使用git checkout从库中取出文件,覆盖掉当前修改的内容,并将其状态变为unmodify

  • staget : 暂存状态,执行git commit将修改文件同步到库中,这时库中的文件和本地文件又变为了一致。文件变为unmodify状态。执行git reset HEAD fileame取消暂存,文件变为modify

查看文件的状态

--可以查看文件夹下所有文件的状态,也可以查看单文件的状态
git status [filename]

--添加所有文件到暂存区
git add .

--提交暂存区的内容到本地仓库 -m为提交信息
git commit -m "new file Hello.java"

在IDEA中如何在每次提交的时候不会自动提交不想要提交的文件,比如数据库文件,临时文件等

在主目录下建立.gitignore文件,然后可以在里边定义一些规则

  1. #号开头的行会被忽略

  2. 可以使用通配符·*来代表多个任意字符,用表示一个字符,方括号([a,b,c])代表可选字符范围,大括号({string1,string2})代表可选的字符串

  3. 名称最前边加一个!号表示例外规则,不会被忽略

  4. 名称最前边为/表示要忽略的文件在此目录下,而子目录中的文件不被忽略

  5. 名称最后边为/表示的是此目录下该名称的子目录,而非文件(默认文件和目录都忽略)

码云设置

设置SSH公钥

我们每次提交代码的时候都需要输入用户名和密码,绑定本地SSH之后就可以实现免密登录

进入本机下 C:\Users\asus\.ssh 目录
进入git窗口中
ssh-keygen 便可生成公钥
如果自己想加密的话可以使用 : ssh-keygen -t rsa ----rsa就为加密算法
然后一路回车即可(三个回车)

在码云中添加SSH公钥

将公有文件打开,将里边的内容复制到码云里边

复制到码云中

---- 密码验证 的时候密码就是自己码云账号的密码

在IDEA中集成Git

第一种

  1. 在IDEA中新建一个项目

  2. 将已经远程拷贝下来的目录复制到新建的项目目录中

第二种

  1. 打开IDEA设置

  2. 找到Version Control -->Git

将Git上的项目拉取到本地

提交代码

和SVN中的操作基本一致

提交代码

也可使用命令来提交

将代码提交到远程仓库,也可使用命令直接push到远程仓库

Git分支

在一个比较大的项目中会有许许多多的分支,我们也可以使用一些命令来对他进行管理

git branch  查看本地所有分支
E:\collection\IDEA\git-test\mimihuhuw>git branch
* master

git branch -r  查看远程所有的分支
E:\collection\IDEA\git-test\mimihuhuw>git branch -r
  origin/HEAD -> origin/master
  origin/master

git branch 0.0.1dev  新建分支

$ git checkout 0.0.1dev  切换分支

git merge 0.0.1dev  将指定分支合并到当前分支 注意:需要切换到需要接收的那一个分支上

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

一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:

每次提交,master分支都会向前移动一步,这样随着不断提交,master分支的线也越来越长。

当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:

Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!

不过切换到了dev分,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变

假如我们在dev上的工作完成了,就可以把dev合并到master上。直接把master指向dev的当前提交,就完成了合并

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

.ignore插件的使用

IDEA在提交项目到本地仓库的时候,会把.idea文件夹中的内容也提交上去,这里面放的是一些项目的配置信息,包括历史记录,版本控制信息等。可以不传到Git上面去。有时候会造成一些奇奇怪怪的小问题。这个时候就需要编写.gitignore文件来忽略提交这些文件,不过有的小伙伴又嫌每次编写配置文件太麻烦,使用这个插件就可以免去编写的麻烦(懒人专用)

最后点击Generate生成

也可右键在单文件添加

常用Git命令

配置用户名和邮箱

$ git --version   # 查看git的版本信息
$ git config --global user.name   # 获取当前登录的用户
$ git config --global user.email  # 获取当前登录用户的邮箱

登录Git

# 如果刚没有获取到用户配置,则只能拉取代码,不能修改 要是使用git,你要告诉git是谁在使用
$ git config --global user.name 'userName'    
  # 设置git账户,userName为你的git账号,
$ git config --global user.email 'email'
# 获取Git配置信息,执行以下命令:
$ git config –list

配置https和ssh推送时保存用户名和密码

# https提交保存用户名和密码
$ git config --global credential.helper store
# 生成公钥私钥,将公钥配置到GitHub,ssh提交就可以免输入用户名密码
# 三次回车即可生成 ssh key
$ ssh-keygen -t rsa
# 查看已生成的公钥
$ cat ~/.ssh/id_rsa.pub

提交代码

#将项目克隆到本地
git clone [url]

#将所有项目添加到暂存区
git add .

#将单个文件提交到暂存区
git add 文件名

#将所有文件提交到本地仓库
git commit

#提交单个
git commit 文件名

#新建分支
git branch <name> bugFix
  
#切换到该分支
gir checkout <name>
  
#在不切换分支的情况下将文件提交到其他分支上
git checkout  bugFix;git commit
 
#merge合并就是将另外一个分支的所有内容都合并到一个分支上
#合并新建分支内容到主分支(master)上
git merge bugFix

#将主分支合并到其他分支上
git checkout bugFix;git merge master
  
#rebase也是合并,但是更像是复制,他将一个分支上的内容复制到另外一个分支下,两个就变成了并行开发
 #合并到主分支下
 git rebase master
 #切换到主分支,然后合并.  这时候两个分支就变为了一个
 git rebase bugFix

  #将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态,但是它并不会改变你本地仓库的状态。它不会更新你的 master 分支,它可能已经将进行这一操作所需的所有数据都下载了下来,但是并没有修改你本地的文件
  git fetch
  
  #当远程分支中有新的提交时,你可以像合并本地分支那样来合并远程分支
  git rebase o/master
  git merge o/master
#由于先抓取更新再合并到本地分支这个流程很常用
  git pull
  
#提交到远程仓库
	git push
  
  #在项目中你在前一天将远程仓库上的项目都拷贝下来进行开发,到了周末想要提交代码的时候发现,有人对远程仓库的分支内容进行了改动,在svn中如果提交就会造成冲突,但是在git中他会默认不允许你将代码提交到远程仓库,你需要将远程的先pull下来,然后进行合并,在提交到远程仓库
  git pull --rebase;git push
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值