惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
小众软件
小众软件
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
J
Java Code Geeks
T
Threat Research - Cisco Blogs
Cisco Talos Blog
Cisco Talos Blog
V
Visual Studio Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Proofpoint News Feed
Hacker News: Ask HN
Hacker News: Ask HN
Application and Cybersecurity Blog
Application and Cybersecurity Blog
I
Intezer
Microsoft Azure Blog
Microsoft Azure Blog
有赞技术团队
有赞技术团队
Scott Helme
Scott Helme
MyScale Blog
MyScale Blog
B
Blog
The Last Watchdog
The Last Watchdog
The Cloudflare Blog
U
Unit 42
Last Week in AI
Last Week in AI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
Tor Project blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Tailwind CSS Blog
Project Zero
Project Zero
P
Palo Alto Networks Blog
V
Vulnerabilities – Threatpost
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 【当耐特】
C
Cisco Blogs
G
Google Developers Blog
A
About on SuperTechFans
博客园 - Franky
博客园 - 聂微东
Help Net Security
Help Net Security
Apple Machine Learning Research
Apple Machine Learning Research
Recent Commits to openclaw:main
Recent Commits to openclaw:main
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
D
Docker
N
Netflix TechBlog - Medium
V2EX - 技术
V2EX - 技术
Cyberwarzone
Cyberwarzone
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
PCI Perspectives
PCI Perspectives
W
WeLiveSecurity
Engineering at Meta
Engineering at Meta
C
Check Point Blog
量子位

卡瓦邦噶!

服务器高性能网络调优 | 卡瓦邦噶! 为何写作 | 卡瓦邦噶! 读《金阁寺》 | 卡瓦邦噶! 雨季又来 | 卡瓦邦噶! MTU Probe 引起的初始延迟 | 卡瓦邦噶! 3.5 秒的固定延迟问题 | 卡瓦邦噶! 学习网络的一点经验 | 卡瓦邦噶! ARP 问题诊断 | 卡瓦邦噶! 网络断断续续…… | 卡瓦邦噶! Piccolo P2P 镜像分发 | 卡瓦邦噶! 一起看电影 | 卡瓦邦噶! 《征服C指针》 | 卡瓦邦噶! 我的姥姥 | 卡瓦邦噶! WordPress网站迁移方案 Python的哲学 Python 3.5的新特性 学校不教的计算机课 垃圾回收(GC)的三种基本方式 在编程中体验纯粹的快乐 从《美丽新世界》谈自由 在快钱实习 迷人的嗓音和迷人的故事——《Sleepyhead》 Python 的十个自然语言处理工具 记一个愚蠢的bug 一年炉石传说的游戏体验 《以撒的结合:重生》网页版图鉴 分清 C++的指针、引用和数组 笑话三则 自由比皇帝更伟大——《悲惨世界》笔记 Git 10 周年访谈:Linus 讲述背后故事 用 0x3f3f3f3f 设定最大int值的优点 Joel给计算机系学生的建议 一个词法分析器的简单实现 怎样才算健康的生活方式 MacVim 配置攻略 学习培训课程的视频效果好吗? 语言的控制 可悲的大多数 CSS样式思维导图 2014年终总结 奥巴马成为首位写程序的美国总统 青岛老城区的下水道好在哪里? 做优秀 UI 的七个建议(第二部分) 选择爱情的骑士 Java集合总览 读 《1984》 java问答:终极父类(六)——等待/唤醒和接口 Java 问答:终极父类(五)——toString() Hyperlapse快速视频背后的技术细节 平庸之恶 Java程序员须知的七个日志管理工具 苏州 逛书摊随想 关于考试作弊 你的工作不仅仅是编程 推荐在线学习Java的英文资源 关注女性命运——《千禧年三部曲》 用好你的幻灯片——《演说之禅》 使用ReentrantLock和Lambda表达式让同步更纯净 新手学编程,从哪里开始? 程序员都是工程师吗? 不要学习代码,要学会思考 Java 问答:终极父类(四)——hashCode() Java 问答:终极父类(三)——finalize()和 getClass() 程序员职业之路的选择 我是一名摄影家 写给何小树的城市指南 为什么一些语言会比别的快? Java的常见误区与细节 跟朋友在一起玩游戏 死神永生——读《三体》 五种类型的程序员 创业圣经——读《黑客与画家》 纪念加西亚·马尔克斯 Junit中处理异常的另一种方式:catch-exception Java8采用Martin Fowler的方法创建内部DSL Linux HotSopt虚拟机GC线程的CPU占用率 J2EE概念介绍 如何成为一名黑客 Java 问答:终极父类(二)——equals()方法 为什么我喜欢Java Java 问答:终极父类(一)——clone()方法 七个改变世界的Java项目 java中默认类型转换的小问题 传统与创新 欢迎来到互联网 莫言和马尔克斯——读《生死疲劳》 位运算的妙用 读《人为什么活着》 写博客教会我的事情 中国特色操作系统 2013年总结 《永不妥协》影评 恨不相逢未嫁时——《廊桥遗梦》影评 如何优雅地使用PPT 给明年依然年轻的我们 天才与柱子 黑客守则和黑客精神 Looking for Freedom——《被解救的姜戈》 简洁之道
Git简明教程
laixintao · 2014-11-24 · via 卡瓦邦噶!

为什么会有本文?

很久以前,在我刚刚接触计算机的时候,就非常贪心,想把自己所有的文件保存下来,为了以后会“用得到”。后来有了网盘之类的东西,但是我不满足于仅仅保存一个文件。对其中的同步逻辑不明白,怕把文件同步成了不想要的版本。在我认识了Git之后,这个问题得到了完美的解决。

Git是一个版本控制的工具,是林纳斯开发,用于开发过程中项目的版本控制的一个工具。他能记录下项目的每一个提交,提交之间的变更。你可以随意的查看项目的每一次版本。还支持多人开发, 每个人的提交都一目了然。这样一个好东西也可以用来管理自己的文档,例如写一个word,或者一个ppt,将他变成一个项目,记录下项目的每一个进度,使自己的工作更加清晰明了。

有关于Git的教程,网络上已经有很多了。本文只会介绍Git,说明Git的功能,常用的命令,然后提供更多更详细的教程的链接,避免造轮子。

Why Git?

首先,Git的读音是|git|,汉字类似于“各异特”,不是“吉特”。

版本控制工具不仅仅只有Git,像流行的还有CVS,SVN等。但是这两个是“集中式版本控制系统”。而Git是一个“分布式版本控制系统”。有什么区别呢?集中式要求版本控制存放在一个服务器上,每一次工作都需要从服务器上拉取版本来进行工作。而分布式是在每一个用户的终端上都保存有一个版本仓库,不同的开发者之间可以用pull和push操作进行同步,也可以向主服务器进行同步。那么优势就很明显了——每个用户都有一个独立的版本库,拥有完全的权限,不用联网就可以工作。此外,Git还有快速,省心,可退回任意版本等优点,所以它是目前最流行的版本控制工具。

Git始于Linux,但是不止于Linux,已经有人将它移植到了windows,现在Git支持Linux,Mac和Windows等主流平台。

在Linux或者Mac的终端下,可以使用brew等工具进行安装。在windows下,需要Cygwin这样的模拟环境,但是有人将它封装好了,这个工具叫做msysgit,只要从http://msysgit.github.io/下载,然后默认安装就好了。

第一个仓库

创建一个Git仓库非常简单。首先,进入到一个空目录,然后对项目进行初始化就可以了。但是由于我们是第一次操作,所以需要对Git进行一些初始化的动作。

git的初始化配置

Shell

1

2

$git config --global user.name "laixintao"

多人协作的时候,是靠邮件来识别提交者的。在Github,不管你的用户名是什么,只根据邮箱来匹配提交者,亲测。所以邮箱一定要设定成自己的,否则你的工作成果就要打上别人的名字啦!

建立第一个项目

Shell

1

2

3

4

5

$ cd /path/to/ty/workspace

$ mkdir myGit

$ cd myGit

$ git init

Initialized empty Git repository in /path/to/ty/workspace/myGit.git/

这样,第一个项目——myGit就建立好了。

在本地的操作

你可以理解为,Git的工作目录和版本库是在一起的。在本地有一个.git文件,保存了你的提交历史。那么,在本地进行的操作如何提交呢?

首先,要理解暂存区的概念。简单来说,暂存区是介于工作区和版本库之间的存在。在本地的操作需要添加到暂存区,用commit命令提交的时候,会将暂存区的内容提交到版本库。当然了,版本库,暂存区,和工作区之间可以进行同步。

工作区的文件如果没有被追踪,是不能提交的,首先,将工作区的内容添加到暂存区:

添加

Shell

1

$ git add <filename>

也可以add所有文件加入到暂存区,然后一次提交。但是非常不推荐这样做,因为这会使版本库乱掉,版本控制就失去了他的意义。

每一个提交都要有一个说明,在查阅的时候以便得知每一次提交做的是什么。

提交

Shell

1

$ git commit -m "This is my first commit."

查看此时的工作区状态命令:

查看

Shell

1

$ git status -s

其中,-s参数是显示精简信息,在显示的信息中,每一个工作区有改动的文件前面都会有两个字母:

  • ??——新文件没有被追踪;
  • 空M——这个文件的修改没有被追踪;
  • A空——有一个新文件被追踪还没有被添加;
  • M空——有一个文件修改,已经被追踪,没有被添加。

被追踪即是添加到工作区。

还可以查看提交记录:

查看提交记录

Shell

1

2

$ git log

$ git log --graph  --pretty=oneline

第二行可以用图表的形式查看。

回退到上一个版本:

版本回退

Shell

1

$ git reset --hard HEAD^

 For more infomation:

结语,这么快就结束了吗?哈哈,没有。相信你对版本控制已经有一个印象了吧?接下来的远程操作部分,已经有关git更多更方便的操作,我会提供一些好博主的链接供参考。

学会Git之后,你就可以轻松的管理你的项目了。将来,你可以把你所有的东西变成项目——你写的博客是项目,论文是一个项目,做的作业时一个项目。这样之后,可以纵览项目的进程,变化,发展,整个人生也可以看做一个项目。