2019版git教程(文字版+视频版)

                                               
                                                                版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。               
                    本文链接: https://blog.csdn.net/lingshengxueyuan/article/details/100543850               
                               
                                                                                           
                                                                                                                               

在这里插入图片描述

你如果不懂git,怎么好意思说自己是个优秀的开发人员呢?有些人觉得git不就是几个命令吗?可是我们在工作中因为不懂git,却又让自己和整个团队的工作都处于一种低效模式,所以我们不仅需要了解git的原理和常见的版本管理问题的解决之道,更要了解基于git的团队协作的工作流程。
现如今我们的所有开发几乎都离不开开源项目,而github又是全球最大的开源项目管理基地,有人也称其为全球最大的同性交友网站,那么在这个神奇的网站下是如何管理开源项目的,我们可以如何参与开源项目的获取甚至是参与开发当中来呢?

github是开源项目的管理,那么在各大企业里又是如何管理自己本企业的项目的呢?这就不得不提gitlab了,那么如何搭建gitlab,如何进行权限管理,如何进行项目管理,比如code
review、CI/CD和知识内容管理的呢?

本文中将会得到解答。

**

1. Git基础

**
1.1 在Linux上安装Git
安装命令如下:

sudo apt-get install git
   
  • 1

安装完成后,输入"git --version"查看git版本,如果出现“git version x.x.x”证明安装成功。
题外话:老一点的Debian或Ubuntu Linux,要把命令改为sudo apt-get install git-core,因为以前有个软件也叫GIT(GNU Interactive Tools),结果Git就只能叫git-core了。由于Git名气实在太大,后来就把GNU Interactive Tools改成gnuit,git-core正式改为git。
如果是其他Linux版本,可以直接通过源码安装。先从Git官网下载源码,然后解压,依次输入:./config,make,sudo make install这几个命令安装就好了。

1.2 在Mac OS X上安装Git
如果你正在使用Mac做开发,有两种安装Git的方法。
一是安装homebrew,然后通过homebrew安装Git,具体方法请参考homebrew的文档:http://brew.sh/。
第二种方法更简单,也是推荐的方法,就是直接从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。
在这里插入图片描述

1.3 在Windows上安装Git
话说大家都用windows系统,那么git首先是在linux系统上开发运行的,后来才逐渐移植到windows。
先到git官网的下载页面(https://git-scm.com/downloads)下载Git-2.19.1-64-bit.exe,然后安装,安装完成后在桌面上会创建git bash工具,且如果我们在桌面上点击鼠标右键,也会在右键菜单中出现“git gui here”和“git bash here”两个菜单项。

1.4 配置git环境
当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改:

$ git config --global user.name "lizhiyong"$ git config --global user.email lizhiyong4360@gmail.com
   
  • 1
  • 2
  • 3

再次强调,如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置。
很多 GUI 工具都会在第一次运行时帮助你配置这些信息。
你也可以使用git config --list来查看git的所有配置。

1.5 获取帮助
若你使用 Git 时需要获取帮助,有三种方法可以找到 Git 命令的使用手册:

$ git help <verb>$ git <verb> --help$ man git-<verb>
   
  • 1
  • 2
  • 3
  • 4
  • 5

例如,要想获得 config 命令的手册,执行

$ git help config
   
  • 1

当然,如果你遇到问题也可以查看git的官方文档。
https://git-scm.com/book/zh/v2

视频版教程已更新至【处理突发事件】

君762073882羊获取

2.GIT常用命令

2.1 创建仓库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
所以,创建一个版本库非常简单,使用git init命令创建一个新的git仓库,它用来将已存在但还没有版本控制的项目转换成一个 Git 仓库,或者创建一个空的新仓库。大多数Git命令在未初始化的仓库中都是无法使用的,所以这就是你运行新项目的第一个命令了。
运行 git init 命令会在你项目的根目录下创建一个新的 .git 目录,其中包含了你项目必需的所有元数据。除了 .git 目录之外,已经存在的项目不会被改变(就像 SVN 一样,Git 不强制每个子目录中都有一个 .git 目录)。
例如:

$ mkdir learngit$ cd learngit$ git init
   
  • 1
  • 2
  • 3

pwd命令用于显示当前目录。在我的Mac上,这个仓库位于/Users/michael/learngit。
如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。
第二步,通过git init命令把这个目录变成Git可以管理的仓库:

$ git initInitialized empty Git repository in /Users/michael/learngit/.git/
   
  • 1
  • 2

瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。
也不一定必须在空目录下创建Git仓库,选择一个已经有东西的目录也是可以的。不过,不建议你使用自己正在开发的公司项目来学习Git,否则造成的一切后果概不负责。

创建一个裸仓库
先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:

$ sudo git init --bare sample.git
   
  • 1

使用–bare就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:
$ sudo chown -R git:git sample.git

向非裸仓库添加文件
首先这里再明确一下,所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
不幸的是,Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的,前面我们举的例子只是为了演示,如果要真正使用版本控制系统,就要以纯文本方式编写文件。
因为文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。

使用Windows的童鞋要特别注意:
千万不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题,比如,网页第一行可能会显示一个“?”,明明正确的程序一编译就报语法错误,等等,都是由记事本的弱智行为带来的。建议你下载Notepad++代替记事本,不但功能强大,而且免费!记得把Notepad++的默认编码设置为UTF-8 without BOM即可:
在这里插入图片描述
言归正传,现在我们编写一个readme.txt文件,内容如下:

Git is a version control system.Git is free software.
   
  • 1
  • 2

一定要放到learngit目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。
和把大象放到冰箱需要3步相比,把一个文件放到Git仓库只需要两步。
第一步,用命令git add告诉Git,把文件添加到仓库:
$ git add readme.txt
执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。
第二步,用命令git commit告诉Git,把文件提交到仓库:

$ git commit -m "wrote a readme file"[master (root-commit) cb926e7] wrote a readme file 1 file changed, 2 insertions(+) create mode 100644 readme.txt
   
  • 1
  • 2
  • 3
  • 4

简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
嫌麻烦不想输入-m "xxx"行不行?确实有办法可以这么干,但是强烈不建议你这么干,因为输入说明对自己对别人阅读都很重要。实在不想输入说明的童鞋请自行Google,我不告诉你这个参数。
git commit命令执行成功后会告诉你,1个文件被改动(我们新添加的readme.txt文件),插入了两行内容(readme.txt有两行内容)。
为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

$ git add file1.txt$ git add file2.txt file3.txt$ git commit -m "add 3 files."
   
  • 1
  • 2
  • 3

2.2 搭建git服务器

第一步,创建一个git用户,用来运行git服务:

$ sudo adduser git$ passwd git$ groupadd git$ usermod -G git git
   
  • 1
  • 2
  • 3
  • 4

第二步,创建证书登录:
首先我们切换到git用户,并且为git用户创建公钥和私钥:

$ su git$ ssh-keygen -t rsa //以rsa的加密方式生成秘钥对$ cd /home/git/.ssh$ touch authorized_keys
   
  • 1
  • 2
  • 3
  • 4

收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

第三步,初始化Git仓库:
先选定一个目录作为Git仓库,假定是/srv/nginx-docs.git,在/srv目录下输入命令:

$ sudo git init --bare nginx-docs.git
   
  • 1

Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:
$ sudo chown -R git:git nginx-docs.git

第四步,禁用shell登录:
作为服务器管理员,关于 SSH 还有一点需要考虑,那就是SSH的安全问题。在上面介绍本地协议时,我们说这种方式无法控制用户对 Git 仓库的操作,无法防止用户有意或无意的损坏 Git 仓库,使用SSH协议一样存在这样的问题,用户能通过SSH拉取和提交代码,也就意味着用户可以通过 SSH 连接到服务器,对 Git 仓库进行任何操作,这是一件很让人担心的事情。
因此,我们还需要对git账号做一些限制。默认情况下,我们新建账号的登陆shell是 /bin/bash,这个配置在 /etc/passwd 文件中:

git:x:1000:1000:git,,,:/home/git:/bin/bash
   
  • 1

可以使用 chsh 命令修改用户的登陆 shell,让他不能通过 SSH 访问服务器,怎么修改呢?我们可以看一下 /etc/shells 文件,这里定义了所有可以使用的登陆 shell,你可以将 /bin/bash 改成这里的任何一个:

root@myserver:~# cat /etc/shells # /etc/shells: valid login shells/bin/sh/bin/dash/bin/bash/bin/rbash
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

很显然,这些 shell 并不是我们想要的,有没有一个 shell 只允许用户进行 git 操作,而不允许其他操作呢?还好,Git 的软件包提供了一个名叫 git-shell 的登陆 shell,我们可以把他加进去,一般情况下位于 /usr/bin/git-shell。我们使用 chsh 修改 git 的登陆 shell:

root@myserver:~# chsh gitChanging the login shell for gitEnter the new value, or press ENTER for the default    Login Shell [/bin/bash]: /usr/bin/git-shell
   
  • 1
  • 2
  • 3
  • 4

这样当用户 git 通过 SSH 连接服务器时,就会直接被拒绝了。

第五步,克隆远程仓库:
现在,其它用户可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:
$ git clone git@server:/srv/nginx-docs.git
Cloning into ‘nginx-docs’…
warning: You appear to have cloned an empty repository.
剩下的推送就简单了。

管理公钥
如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用Gitosis来管理公钥。
这里我们不介绍怎么玩Gitosis了,几百号人的团队基本都在500强了,相信找个高水平的Linux管理员问题不大。

管理权限
有很多不但视源代码如生命,而且视员工为窃贼的公司,会在版本控制系统里设置一套完善的权限控制,每个人是否有读写权限会精确到每个分支甚至每个目录下。因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精神,不支持权限控制。不过,因为Git支持钩子(hook),所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。Gitolite就是这个工具。
这里我们也不介绍Gitolite了,不要把有限的生命浪费到权限斗争中。

小结
搭建Git服务器非常简单,通常10分钟即可完成;
要方便管理公钥,用Gitosis;
要像SVN那样变态地控制权限,用Gitolite。
当然有一个比较强大的工具,gitlab,如果是做正规开发建议大家使用这个集成工具。

未完待续。后面继续分享。喜欢的朋友可以先收藏~

                                   
                                   
参与评论 您还未登录,请先 登录 后发表或查看评论
<p> <span style="font-size:16px;"><img src="https://img-bss.csdnimg.cn/202111230305279002.jpg" alt="" /><br /> </span> </p> <p> <span style="font-size:16px;">本课程从零开始,以通俗易懂的方式讲解Git技术,手把手教你掌握每一个知识点。</span> </p> <p> <span style="color:#FF0000;font-size:16px;"><br /> </span> </p> <p> <span style="font-size:16px;">课程内容包括:</span><span style="font-size:16px;">本控制系统、</span><span style="font-size:16px;">Git简介、</span><span style="font-size:16px;">Git使用、常用命令、</span><span style="font-size:16px;">远程仓库、</span><span style="font-size:16px;">分支Branch、</span><span style="font-size:16px;">静态页面托管、</span><span style="font-size:16px;">在IDEA中使用Git</span> </p> <p> <br /> </p> <p> <span style="font-size:16px;"><strong><span style="color:#FF0000;">教学全程采用笔记+代码案例的形式讲解,通俗易懂</span></strong><strong><span style="color:#FF0000;">!!!</span></strong></span> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/201910230828556919.png" alt="" /> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/201910230829097767.png" alt="" /> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/201910230829185636.png" alt="" /> </p> <p> <span style="font-size:16px;"><strong><br /> </strong></span> </p> <p> <span style="font-size:16px;"><strong>讲师介绍</strong></span> </p> <p> <img src="https://img-bss.csdn.net/201910220910188617.jpg" alt="" /> </p>
02.为什么要使用本控制 03.本控制介绍 04.Git简史 05.Git优势 06.Git程序安装过程 07.Git结构 08.Git和代码托管中心 09.本地库和远程库的交互方式 10.本地库初始化 11.设置签名 12.添加提交以及查看状态操作 13.添加提交命令小结 14.本穿梭测试的准备工作 15.查看历史记录的几种不同方式 16.前进后退历史本操作的本质 17.基于索引值前进后退本 18.前进后退本的其他方式 19.hard和soft以及mixed参数对比 20.永久删除文件后找回 21.添加到暂存区的删除文件找回 22.删除文件找回方式的小结 23.比较文件 24.分支概述 25.分支操作 26.解决合并分支后产生的冲突 27.Hash算法简介 28.Git本数据管理机制 29.Git分支管理的本质是创建和移动指针 30.GitHub账号注册 31.修改GitHub账号头像 32.本地库和远程库交互方式回顾 33.为了测试远程交互初始化新的本地库 34.创建远程库 35.在本地创建远程库地址别名 36.推送操作 37.克隆操作 38.邀请令狐冲加入团队成员 39.远程库修改的拉取 40.协同开发时冲突的解决 41.跨团队协作操作演示 42.SSH免密登录 43.Eclipse中Git插件简介 44.Eclipse中把工程初始化为本地库 45.在Eclipse中设置本地库范围签名 46.Eclipse中Git图标的介绍 47.Eclipse特定文件介绍以及为什么要忽略它们 48.忽略Eclipse中的特定文件 49.Eclipse中本地库基本操作 50.将本地工程推送到远程库 51.将远程库的工程克隆到本地 52.在Kepler Eclipse中导入远程库工程 53.在Eclipse中解决冲突 54.Git工作流介绍 55.分支实战说明 56.分支实战操作 57.安装CentOS7 58.安装Gitlab前的准备和介绍 59.Gitlab安装 60.配置并启动Gitlab服务器 61.浏览器访问Gitlab首页 62.总结
git视频教程.1.Git 命令 - git help、git config.mp4 git视频教程.2.Git 命令 - git init、git clone.mp4 git视频教程.3.1.Git 命令 - git add、git status.mp4 git视频教程.3.2.Git 命令 - git diff、git difftool.mp4 git视频教程.3.3.Git 命令 - git commit.mp4 git视频教程.3.4.Git 命令 - git rm、git mv、git clean.mp4 git视频教程.3.5.Git 命令 - git reset.mp4 git视频教程.4.1.Git 命令 - git branch.mp4 git视频教程.4.2.Git 命令 - git branch.mp4 git视频教程.4.3.Git 命令 - git branch.mp4 git视频教程.4.4.Git 命令 - git checkout.mp4 git视频教程.4.5.Git 命令 - git merge.mp4 git视频教程.4.6.Git 命令 - git merge、git mergetool.mp4 git视频教程.4.7.Git 命令 - git log、git stash、git tag.mp4 git视频教程.5.1.Git 命令 - git fetch.mp4 git视频教程.5.2.Git 命令 - git pull.mp4 git视频教程.5.3.Git 命令 - git push.mp4 git视频教程.5.4.Git 命令 - git remote.mp4 git视频教程.5.5.Git 命令 - git archive.mp4 git视频教程.5.6.Git 命令 - git submodule.mp4 git视频教程.6-7.Git 命令 - git show、git shortlog、git describe、git bisect、git blame、git grep.mp4 git视频教程.8.1.Git 命令 - git cherry-pick.mp4 git视频教程.8.2.Git 命令 - git rebase.mp4 git视频教程.8.3.Git 命令 - git rebase.mp4 git视频教程.8.4.Git 命令 - git revert.mp4 git视频教程.9.Git 命令 - git apply、git am、git format-patch.mp4 git视频教程.10.Git 命令 - git svn、git fast-import.mp4 git视频教程.11.Git 命令 - git gc、git fsck、git reflog.mp4 git视频教程.12.Git 命令 - 总结.mp4

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值