首页 > 技术文章 > Git学习使用

zhou-zr 2021-05-04 22:08 原文

Git

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

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

Git 与 SVN 区别

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

Git 与 SVN 区别点:

  • 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 Bash:Unix与Linux风格的命令行,最推荐使用。

Git CMD:Windows风格的命令行。

Git GUI:图形界面的Git。

# 设置提交代码时的用户信息
$ git config --global user.name "[name]"
$ git config --global user.email "[email address]"

# 显示当前的Git配置
$ git config --list

# 添加当前目录的所有文件到暂存区
$ git add .

# 提交暂存区到仓库区
$ git commit -m "[message]"

git push origin master

#密钥
ssh-keygen -t rsa -C "这里换上你的邮箱"

#历史记录
history

#配置信息
git config -l
git config --global --list  #用户配置
git config --system --list  #系统配置

系统配置文件在:安装目录Git/etc/gitconfig

用户配置文件在:C盘,当前用户,.gitconfig

基本理论

Git本地有三个工作区域,工作目录,暂存区,资源库(本地仓库),如果加上远程的git仓库,就可以分为四个工作区域。

工作目录----git add----暂存区----git commit----本地仓库----git push----远程仓库。

远程仓库----git pull----本地仓库----git reset----暂存区----git checkout----工作目录。

git init:创建全新的仓库。

git clone 地址:从远程仓库克隆到本地。

Git文件操作

文件的四种状态:

  • Untracked:未跟踪,此文件在文件夹中,但并没有加到git库,不参与版本控制,通过git add . 状态变为Staged。
  • Unmodify:文件已经入库,未修改,即版本库中的文件快照内容与文件夹中的完全一致,这种类型的文件有两种去处,如果它被修改就变为modefied,如果它被git rm,移除版本库,则成为Untracked文件。
  • Modefied:文件已修改,但没有其它的操作,这个文件也有两个去处,通过git add . 进入暂存staged状态,使用git checkout,则丢弃修改,返回unmodify,这个git checkout即从库中取出文件,覆盖当前修改。
  • Staged:暂存状态,执行git commit则将修改同步到库中,这时库中的文件和本地的文件变为一致,文件为Unmodify状态,执行git reset HEAD filename取消暂存,文件状态为Modified。

git status:查看文件状态

忽略文件:有时候我们不想将某些文件纳入版本控制中,比如数据库文件,临时文件等。

在主目录下建立 .gitignore 文件,此文件有以下的规则:

  1. 忽略文件中的空行或以井号(#)开始的行将会被忽略。
  2. 可以使用Linux的通配符,例如:星号(*)代表任意多个字符,问号代表一个字符,方括号[ ]代表可选字符范围,大括号()代表可选的字符串等等。
  3. 如果名称的最前面有一个!号,代表例外规则,将不被忽略。
  4. 如果名称的最前面是一个路径分隔符(/),表示忽略的文件在此目录下,而子目录中的文件不忽略。
  5. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
*.txt   #忽略所有的.txt结尾的文件
!lib.txt  #lib.txt除外
/temp   #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/   #忽略build下的所有文件
doc/*.txt  #忽略 doc/notes.txt但不包括doc/server/arch.txt

使用码云

  1. 注册登录码云

  2. 设置本机绑定SSH公钥,实现免密登录。(C/user/adminnistrator/.ssh)

    ssh-keygen -t rsa -C "邮箱":生成公钥

  3. 将公钥信息添加到码云SSH中。

  4. 使用码云创建一个仓库。

IDEA集成Git

  1. 新建项目。(将远程下载的项目拷贝到新建的项目中,拷贝的颜色变红)

  2. 修改文件,使用IDEA操作git。

    • 添加到暂存区
    • commit提交
    • git push到远程仓库
  3. 提交。

Git分支

Git分支中常用的命令

#列出所有的本地分支
git branch

#列出所有的远程分支
git branch -r

#新建一个分支,但依然停留在当前分支
git branch [branch-name]

#新建一个分支,并切换到该分支
git checkout -b [branch]

#合并指定分支到当前分支
git marge [branch]

#删除分支
git branch -d [branch-name]

#删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]

如果同一个文件在合并分支时都被修改了则会引起冲突,解决的办法就是修改冲突文件后重新提交。选择要保留哪一个。

master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作。工作一般会在新建的dev分支上工作,工作完后,比如要发布,或者dev分支代码稳定后可以合并到主分支master上。

推荐阅读