Git简介

诞生

简单的来说,就是为了托管庞大的Linux源码,开始选择了商用的版本控制系统BitKeeper,但是因为一系列操作,BitKeeper不让用了,所以Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!自己写了一个,还用了两周...

对比

记住分布式的比集中式的流弊就完事了。

安装Git

  1. Linux系统

    sudo apt-get install git

  2. Windows

    直接到官网下载即可。

  3. Mac OS X

    安装homebrew,然后通过homebrew安装Git。或者,直接从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。

创建版本库

  1. 选择一个合适的地方,创建一个空目录
  2. 通过git init命令把这个目录变成Git可以管理的仓库

    git init
  3. 增加/修改文件并提交

    例如,用VSCode增加一个readme.md文件,然后

    git add readme.md

    git commit -m '我创建了readme.md文件'

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

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

文件管理

  1. git status,可以让我们时刻掌握仓库当前的状态.

  2. **git diff --file_name **,顾名思义就是查看difference,显示的格式正是Unix通用的diff格式.

  3. git log,显示从最近到最远的提交日志.

  4. git reflog,查看命令历史,以便确定要回到未来的哪个版本.

  5. git reset --hard commit_id,HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭.

  6. git reset HEAD file_name,可以把暂存区的修改撤销掉(unstage),重新放回工作区,git reset既可以回退版本,也可以把暂存区的修改回退到工作区.

  7. git checkout -- file_name,命令把file_name文件在工作区的修改全部撤销,这里有两种情况:

    一种是file_name自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

    一种是file_name已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

    总之,就是让这个文件回到最近一次git commit或git add时的状态。

  8. 拉取指定文件:

    git fetch

    git checkout origin/master -- path/folder/filename

  9. 撤销commit:

    一般本地更改代码后,会进行如下操作:

    git add . // 添加所有文件

    git commit -m “本功能完成”

    但是,此时先
    撤回commit
    如何做呢?

    git reset --mixed HEAD^

    说明:指不删除工作空间改动代码,撤销commit,并且撤销git add . 操作。这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

    git reset --soft HEAD^ // HEAD^代表上一个版本,亦可以写成HEAD~1,同理撤回两次commit,可以使用HEAD~2

    说明:不删除工作空间改动代码,撤销commit,不撤销git add . 操作 。

    git reset --hard HEAD^

    说明:删除工作空间改动代码,撤销commit,撤销git add . 操作。注意完成这个操作后,就恢复到了上一次的commit状态。

    git commit --amend

    说明:修改commit注释,此时会进入默认vim编辑器,修改注释完毕后保存就好了。

撤销修改小结:

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

远程代码库

  1. 创建SSH Key

    打开Git Bash,输入 ssh-keygen -t rsa -C "ouremail@example.com"

    回车执行后,在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
  2. 登录代码托管网站,在设置里增加SSH Key,填写id_rsa.pub文件的内容。

分支管理

  1. git checkout,命令加上-b参数表示创建并切换,相当于以下两条命令:

    git branch dev

    git checkout dev

    例如:git checkout -b dev,创建了dev分支,然后切换到dev分支。
  2. git switch,最新版本的Git提供了这个新的命令来切换分支
  3. git branch -d dev,删除了dev分支
  4. git branch,会列出所有分支,当前分支前面会标一个*号。
  5. git merge,用于合并指定分支到当前分支

    例如:当前在master,使用git merge dev,则会把dev的内容合并到master。
  6. git log --graph,可以看到分支合并图。
  7. git branch -D ,如果要丢弃一个没有被合并过的分支,可以通过该命令强行删除。
  8. git rebase,可以把本地未push的分叉提交历史整理成直线。rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

搭建Git服务器

搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt命令就可以完成安装。

假设你已经有sudo权限的用户账号,下面,正式开始安装。

  1. 安装git:

    $ sudo apt-get install git

  2. 创建一个git用户,用来运行git服务:

    $ sudo adduser git

  3. 创建证书登录:

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

  4. 初始化Git仓库:

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

    $ sudo git init --bare sample.git

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

    $ sudo chown -R git:git sample.git

  5. 禁用shell登录:

    出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

    git1001:1001:,,,:/home/git:/bin/bash

    改为:

    git1001:1001:,,,:/home/git:/usr/bin/git-shell

    这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

  6. 克隆远程仓库:

    现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:

    $ git clone git@server:/srv/sample.git

    Cloning into 'sample'...

    warning: You appear to have cloned an empty repository.

    剩下的推送就简单了。

  7. 管理公钥

    如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用Gitosis来管理公钥。

    这里我们不介绍怎么玩Gitosis了,几百号人的团队基本都在500强了,相信找个高水平的Linux管理员问题不大。

  8. 管理权限

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

参考链接

廖雪峰官网-Git教程

【Git】简易使用教程的更多相关文章

  1. mac os x使用Git简易入门教程

    具体如下: 1, 首先要了解什么是Git. 简而言之,Git是一个分布式的代码版本管理工具.类似的常用工具还有SVN,CVS. 概念了解参见:http://baike.baidu.com/subvie ...

  2. Git简易使用教程

    1.Git 安装 2.设置git登录信息 3.git操作命令 4.提交代码的过程中几个命令的顺序 5.git 学习资料. 1.Git 安装 Git 下载地址:https://git-scm.com/d ...

  3. Git GUI简易使用教程

    Git GUI简易使用教程:先上图~~~~~ 一. 先从添加文件开始讲(先上图): 1.选中要添加的文件,点击菜单栏的“提交”,选中“缓存为提交”,

  4. Git简易教程-安装及简单使用

    Git是一种版本控制器,在项目开发中可以用来托管代码 一.下载安装Git 1. Git下载 地址:https://git-scm.com/download/win 2. 安装 检验是否安装成功 电脑桌 ...

  5. Git简明使用教程

    猴子都能懂的GIT入门 https://backlog.com/git-tutorial/cn/git - 简易指南(这份教程挺好的) http://www.bootcss.com/p/git-gui ...

  6. Git 相关工具及教程地址

    一.Git GUI 客户端 Git 客户端下载(Windows) TortoiseGit 客户端下载(Windows) Sourcetree 客户端下载(Windows.Mac) Git Extens ...

  7. git——简易指南

    Git对于我来说,只知道是一个版本控制器,类似于乌龟的svn.其中也仅仅会几个常的命令,比如说“更新git pull”.“提交git push”等等,因为记得当初使用的时候,师傅告诉我,对于你不懂这个 ...

  8. Git使用详细教程(一)

    很久不发博客,最近有兴趣想写点东西,但 Live Writer 不支持从Word复制图片,疯狂吐槽下 Git使用详细教程(一) Git使用详细教程(二) 该教程主要是Git与IntelliJ IDEA ...

  9. git - 简易指南

    http://www.bootcss.com/p/git-guide/ git - 简易指南

  10. 在Dropbox上搭建私有的Git仓库的教程

    导读 Git版本控制系统需要一个服务器端,而GitHub上要想创建私有的Git服务器端仓库则触及到收费项目,于是这里我们利用Dropbox的免费空间,来看一下在Dropbox上搭建私有的Git仓库的教 ...

随机推荐

  1. 一种使用 Redis 深度驱动的,为构建轻量级分布式应用程序(Microservices)的工程方案

    Hydra 是一个轻量级的 NodeJS 库,用于构建分布式计算应用程序,比如微服务.我们对轻量级的定义是:轻处理外部复杂性和基础设施依赖 -- 而不是有限的轻处理. Hydra 声称对基础设施的依赖 ...

  2. Codeforces Edu Round 57 A-D

    A. Find Divisible 符合条件的区间一定可以选择\(l, l * 2\). 证明\(l * 2 <= r\) 假设存在一组解,\(x, x * d (l <= x <= ...

  3. 【学习笔记】最小直径生成树(MDST)

    简介 无向图中某一点(可以在顶点上或边上),这个点到所有点的最短距离的最大值最小,那么这个点就是 图的绝对中心. 无向图所有生成树中,直径最小的一个,被称为 最小直径生成树. 图的绝对中心的求法 下文 ...

  4. nginx配置访问本地资源

    参考博客:https://www.cnblogs.com/xy51/p/9973326.html 需要访问路径:http://IP:10013/p1upgrade/picfiles/image73b4 ...

  5. apidoc学习(接口文档定义取代word)

    apidoc的安装,参考:https://blog.csdn.net/qq_36386771/article/details/82149848 生产文档,需要先编写一个apidoc.json对接口文档 ...

  6. Python测试框架unittest

    Python测试框架unittest 一.unittest框架 (1)unittest特点 1.python自带的单元测试框架,不需要安装 2.用例执行互不干扰 3.提供不同范围的setUp和tear ...

  7. 【Scrapy笔记】使用方法

    安装: 1.pip install wheel 安装wheel 2.安装Twisted a.访问 http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted ...

  8. Python 学习笔记 之 01 - 基础总结

    数据类型 整数 十六进制和八进制使用0开头,0x12f, 010 浮点数 可以用科学记数法,如1.23x10^9 可以写成 12.3e8 ,0.000012可以写成 1.2e-5 空值 用None表示 ...

  9. mysql主从同步错误

    一.主从同步报错 mysql> show slave status\G; *************************** 1. row ************************* ...

  10. gnuplot添加直线和箭头

    http://blog.csdn.net/bill_chuang/article/details/18215051 6.在图中添加直线和箭头 gnuplot> set arrow from 0. ...