Git学习(一)(上)

简介: Git学习(一)(上)

一、版本控制的发展


本地版本控制系统->集中式版本控制系统->分布式集中控制系统

本地版本控制系统:


早期为了方便查找历史版本,而推出版本控制

最流行的一种叫做 RCS,现今许多计算机系统上都还看得到它的踪影。RCS 的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。

缺点:无法在不同系统上的开发者协同工作


0a2653c851af460fa595bd959398a8f1.png

集中式版本控制系统


可以由多个客户机访问这个服务器,进行协同操作

缺点:


如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作

如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。

代表:CVS、Subversion以及Perforce

0a2653c851af460fa595bd959398a8f1.png

分布式集中控制系统


优点:客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

代表:Git、Mercurial、Bazaar以及 Darcs


二、Git的诞生


2.1 Git 诞生的背景


同生活中的许多伟大事物一样,Git 诞生于一个极富纷争大举创新的年代。

Linus 在1991年创建了开源的 Linux,从此,Linux 系统不断发展,已经成为最大的服务器系统软件了。在1991-2002年期间,世界各地的志愿者把源代码文件通过 diff 的方式发给 Linus,然后由 Linus 本人通过手工方式合并代码。

你也许会想,为什么 Linus 不把 Linux 代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus 坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和 Linux 的开源精神不符。


2.2 Linus 两周完成 Git


到 2002 年,Linux 系统已经发展了十年了,代码库之大让 Linus 很难继续通过手工方式管理了,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码,BitKeeper 的东家 BitMover 公司也免费授权 Linux 社区使用这个版本控制系统。后来 BitMover 公司发现社区有人试图破解 BitKeeper 的协议,于是 BitMover 公司收了回 Linux 社区的免费使用权。


这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标:


速度

简单的设计

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

完全分布式

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

于是,Linus 花了两周时间自己用 C 写了一个分布式版本控制系统,这就是 Git!一个月之内,Linux 系统的源码已经由 Git 管理了!


2.3 Git 的发展壮大


自 2005 年诞生以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。Git 迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub 网站上线了,它为开源项目免费提供 Git 存储,无数开源项目开始迁移至 GitHub ,包括jQuery,PHP,Ruby等等。


2.4 CODE CHINA


GitCode

CODE CHINA 使用手册


三、Git的安装


3.1 Windows下安装


Git 官方网站下载


3.2 Git GUI,Git Bash,Git CMD之间的区别


3.2.1 Git Bash


Bash,Unix shell的一种,Linux与Mac OS X v10.4都将它作为默认shell。

Git Bash就是一个shell,是Windows下的命令行工具,可以执行Linux命令。

Git Bash是基于CMD的,在CMD的基础上增添一些新的命令与功能。所以建议在使用的时候,用Bash更加方便。


3.2.2 Git CMD


(命令行提示符)是Windows操作系统上的命令行解释程序。当你在Windows上安装git并且习惯使用命令行时,可以使用cmd来运行git命令。


3.2.3 Git GUI


基本上针对那些不喜欢黑屏(即命令行)编码的人。它提供了一个图形用户界面来运行您喜欢的git命令。


四、Git的一些命令


4.1 config


$ git config --global user.name "李老师"
$ git config --global user.email li@csdn.net


4.1.1 检查某项配置

git config

$ git config user.name
李老师


4.1.2 配置命令颜色


$ git config --global color.ui true


4.2 忽略特殊文件


.gitignore

在Git 工作区的根目录下创建一个特殊的

.gitignore文件

# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
# My configurations:
db.ini
deploy_key_rsa


4.2.1 强制添加被忽略的文件


遇到添加一个文件到 Git,但发现添加不了,原因是这个文件被.gitignore忽略了:

$ git add App.class

The following paths are ignored by one of your .gitignore files:

App.class

Use -f if you really want to add them.


如果你确实想添加该文件,可以用-f强制添加到 Git:


$ git add -f App.class


4.2.2 检查忽略规则


git check-ignore

$ git check-ignore -v App.class

.gitignore:3:*.class App.class


Git会告诉我们,.gitignore的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。


4.2.3 添加例外规则


# 排除所有.开头的隐藏文件:
.*
# 排除所有.class文件:
*.class
# 不排除.gitignore和App.class:
!.gitignore
!App.class


4.3 配置别名


除了通过 配置忽略文件 来提高git commit 时的便捷性外,Git 中还有一种可以让大家在敲入 Git 命令时偷懒的办法——那就是配置 Git 别名。


4.3.1 配置 git status/commit/checkout/branch

$ git config --global alias.st status

$ git config --global alias.co checkout

$ git config --global alias.ci commit

$ git config --global alias.br branch


配置完成以上别名后,以后提交就可以简写成:

$ git ci -m “sth.”


4.3.2 配置 git reset HEAD file


再比如git reset HEAD file命令,他可以把暂存区的修改撤销掉(unstage),重新放回工作区。既然是一个unstage操作,就可以配置一个unstage别名:

$ git config --global alias.unstage ‘reset HEAD’


当你敲入命令:

$ git unstage test.py


实际上 Git 执行的是:

$ git reset HEAD test.py


4.3.3 配置 git log -1


配置一个git last,让其显示最后一次提交信息:

$ git config --global alias.last ‘log -1’


这样,用git last就能显示最近一次的提交:

$ git last


commit 4aac6c7ee018f24d2dabfd01a1e09c77612e1a4e (HEAD -> master)

Author: Miykael_xxm xiongjiamu@gmail.com

Date: Tue Nov 17 11:14:15 2020 +0800


branch test


相关文章
|
6月前
|
Linux 开发工具 C语言
Linux的学习之路:7、yum与git
Linux的学习之路:7、yum与git
57 0
|
JSON 前端开发 JavaScript
前端AJAX入门到实战,学习前端框架前必会的(ajax+node.js+webpack+git)(一)
前端AJAX入门到实战,学习前端框架前必会的(ajax+node.js+webpack+git)(一)
588 0
|
1月前
|
开发工具 git
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
99 1
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
|
1月前
|
Shell 开发工具 git
git学习三:git使用:删除仓库,删除仓库内文件
通过GitHub的设置页面删除仓库,以及如何使用Git命令行删除仓库中的文件或文件夹。
130 1
git学习三:git使用:删除仓库,删除仓库内文件
|
5月前
|
存储 网络安全 开发工具
【GIT】Git常用命令学习
【GIT】Git常用命令学习
64 1
|
27天前
|
Unix Shell 网络安全
git学习六:(bug总结)git@github.com: Permission denied (publickey).等
本文是关于解决在使用Git和GitHub时遇到的“git@github.com: Permission denied (publickey)”错误的指南。文章提供了详细的步骤,包括确认SSH Agent运行状态、检查密钥配置、确保密钥匹配、验证仓库URL、检查权限和代理设置,以及配置SSH文件。这些步骤帮助用户诊断并解决SSH认证问题。
69 0
|
1月前
|
编译器 网络安全 开发工具
git学习五:切换本地仓库出现的问题。修改git配置初始化。error:src refspec master does not match any。错误总结,送上几个案例
这篇文章是关于Git使用中遇到的一些问题及其解决方案的总结,包括切换本地仓库时的问题、修改Git初始化配置、以及解决"error: src refspec master does not match any"错误等。
50 0
|
6月前
|
安全 Shell 网络安全
Git学习---Git快速入门、Git基础使用、Git进阶使用、Git服务器使用(IDEA集成GitHub、Gitee、GitLab)、GitHub Desktop客户端
Git学习---Git快速入门、Git基础使用、Git进阶使用、Git服务器使用(IDEA集成GitHub、Gitee、GitLab)、GitHub Desktop客户端
197 0
|
6月前
|
缓存 数据可视化 开发工具
学习 Git,看这一篇就够了!(下)
学习 Git,看这一篇就够了!(下)
125 0
|
6月前
|
存储 Linux Shell
学习 Git,看这一篇就够了!(上)
学习 Git,看这一篇就够了!(上)
113 0