git 入门教程之本地仓库
本地仓库
背景
创建工作目录
平时工作时我们习惯对文档分门别类进行管理,.doc
.txt
等文本类型的文件习惯存在 doc
文件下,开发java
js
等源代码文件存在在 src
目录下,这一点很好理解,那么讲解 git的项目我们也要创建一个文件夹,姑且新建一个demo
的文件夹吧!
# 在工作空间创建指定目录
mkdir demo
# 切换至工作目录
cd demo
创建本地仓库
既然已经创建了工作文件夹,那么我们自然是希望该文件下的所有文件都能被 git
管理,也就是说在当前文件下的创建新文件,修改原文件内容或者删除文件等操作都能纳入版本控制中,不然为什么要用git
呢?
下面这个命令就是告诉git
这个 demo
目录要纳入版本控制了.
# 初始化本地仓库
git init
一旦运行git init
命令,细心的读者可能会发现在原来的 demo
目录下多了.git
隐藏文件,正因如此,原来被我们称为工作目录的 demo
才能纳入版本控制,我们将.git
目录称之为版本库.
由于当前项目 demo
只在我们自己电脑上,其他人无法访问,所以我们称这种形式的版本库为本地仓库.
添加文件到版本库
首先明确的是,所有的版本控制系统只能追踪文本文件的改动,文本文件就是平常熟悉的.txt
.html
.js
.css
.java
.xml
等等文件,非文本文件的其他格式有哪些?
例如二进制文件,像我们平时听音乐的.mp3
,看视频的.mp4
,浏览图片的.png
等这些都是二进制文件,需要专门的软件才能正常打开,不信的话,你用记事本看看能不能打开视频?
了解文本文件和二进制文件的区别,那是不是说二进制文件没法进行版本控制了,刚才你不是还说demo
目录下的所有文件吗?这不是自相矛盾吗!
非也非也,git
当然也能够管理二进制文件,对于文本文件的追踪,可以细粒度到哪个文件在哪一行发生了哪些变化,而二进制文件只能粗粒度知道哪个文件变化了,并不知道具体变化.
不幸的是,Microsoft
的Word
格式是二进制格式,因此,版本控制系统是没法跟踪Word
文件的改动的,前面我们举的例子只是为了演示,如果要真正使用版本控制系统,就要以纯文本方式编写文件.
因为文本是有编码的,比如中文有常用的GBK
编码,日文有Shift_JIS
编码,如果没有历史遗留问题,强烈建议使用标准的UTF-8
编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持.
言归正传,现在我们在demo
目录下创建一个test.txt
演示文件,内容如下git test
# 创建新文件
touch test.txt
# 编辑新文件,输入 git test
echo "git test" > test.txt
接下来我们还需要两步操作才能将test.txt
纳入git
管理:
第一步,使用git add <file>
命令将文件添加到本地仓库:
# 添加到本地仓库: 第一步指定要添加的文件
git add test.txt
第二步,使用git commit -m <message>
命令将文件提交到本地仓库:
# 添加到本地仓库: 第二步指定添加文件备注
git commit -m "add test.txt"
经过上述两步操作,test.txt
文件已经纳入到版本控制中了,这里你可能会有疑问了为什么需要add
commit
两步呢?
因为commit
可以一次性提交很多文件,所以你可以多次add
不同的文件,比如:
# 创建三个文件file1.txt file2.txt file3.txt
touch file1.txt file2.txt file3.txt
# 添加一个文件file1.txt
git add file1.txt
# 添加两个文件file2.txt file3.txt
git add file2.txt file3.txt
# 一次性提交全部文件
git commit -m "add 3 files."
小结
- 初始化本地仓库
git init
- 添加文件到本地仓库分两步
git add <file>
和git commit -m <message>
- 实际工作中,大致以下流程
# 在工作空间创建指定目录
mkdir demo
# 切换至工作目录
cd demo
# 初始化本地仓库
git init
# 创建新文件
touch test.txt
# 编辑新文件,输入 git test
echo "git test" > test.txt
# 添加到本地仓库: 第一步指定要添加的文件
git add test.txt
# 添加到本地仓库: 第二步指定添加文件备注
git commit -m "add test.txt"
...
# 继续编辑目标文件,追加 git init
echo "git init" >> test.txt
# 将目标文件添加到本地仓库
git add test.txt
# 添加本次新增文件的备注
git commit -m "add git init"
原文请访问 https://snowdreams1006.github.io/git/usage/local-repository.html
git 入门教程之本地仓库的更多相关文章
- git 入门教程之本地和远程仓库的本质
本地仓库和远程仓库在本质上没有太大区别,只不过一个是本地电脑,一个是远程电脑. 远程仓库不一定非得是 github 那种专门的"中央服务器",甚至局域网的另外一台电脑也可以充当&q ...
- git 入门教程之远程仓库
远程仓库 如果说本地仓库已经足够个人进行版本控制了,那么远程仓库则使多人合作开发成为可能. 如果你只是打算自己使用git,你的工作内容不需要发布给其他人看,那就用不到远程仓库的概念. git 是分布式 ...
- git 入门教程
git 入门教程之协同开发 前面我们已经介绍过远程仓库的相关概念,不过那时并没有深入探讨,只是讲解了如何创建远程仓库以及推送最新工作成果到远程仓库,实际上远程仓库对于团队协同开发很重要,不仅仅是团队协 ...
- Git入门教程,详解Git文件的四大状态
大家好,欢迎来到周一git专题. git clone 在上一篇文章当中我们聊了怎么在github当中创建一个属于自己的项目(repository),简称repo.除了建立自己的repo之外,我们更多的 ...
- 廖雪峰Git入门教程
廖雪峰Git入门教程 2018-05-24 23:05:11 0 0 0 https://www.liaoxuefeng.com/wiki/00137395163059296 ...
- git 入门教程之协同开发
前面我们已经介绍过远程仓库的相关概念,不过那时并没有深入探讨,只是讲解了如何创建远程仓库以及推送最新工作成果到远程仓库,实际上远程仓库对于团队协同开发很重要,不仅仅是团队协同开发的基础,也是代码备份的 ...
- NO.A.0002——Git简史及安装教程/创建本地仓库/提交项目到本地仓库/误删还原
一.Git简史及同类产品对比: 1.git简史: 同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代.Linux 内核开源项目有着为数众广的参与者.绝大多数的 Linu ...
- GitHub教程(三) 本地仓库托管到GitHub
本文开头先特别声明一下:由于GitHub教程属于Git系列教程的GitHub子篇章,因此GitHub教程中将不再详细介绍Git操作命令及其用法,我会根据实际需要穿插着回顾Git操作命令.如果读者需要学 ...
- git学习笔记04-将本地仓库添加到GitHub远程仓库-git比svn先进的地方
第1步:创建SSH Key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步. 如果没有,打开Shel ...
随机推荐
- 深入Vue2.x的虚拟DOM diff原理
一.前言 Vue的核心是双向绑定和虚拟DOM(下文我们简称为vdom),关于双向绑定可以参阅木琴的文章<剖析Vue原理&实现双向绑定MVVM>,vdom是树状结构,其节点为vnod ...
- 利用vi编辑器创建和编辑正文文件(一)
1. vim是vi的升级版本. 2. vi所UNIX和Linux系统内嵌的标准文编辑器,可执行,修改,复制,移动,粘贴和删除正文等命令,也可以进行移动光标,搜索字符和退出vi的 ...
- 整理+学习《骆昊-Java面试题全集(中)》
这部分主要是与Java Web和Web Service相关的面试题. 96.阐述Servlet和CGI的区别? 答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行 ...
- javaScript笔记详解(1)
javaScript基础详解 版权声明 本文原创作者:雨点的名字 作者博客地址:https://home.cnblogs.com/u/qdhxhz/ 首先讲javaScript的摆放位置:<sc ...
- GenericFactoryMethod泛型工厂模式实现简单IOC功能
1.简介 泛型工厂理论上不算Gof23中设计模式之一,但是也算是一种非常好的设计模式,个人认为,废话不多说,先写个简单的抽象工厂,在写一个泛型工厂的例子来比较抽象和泛型的区别. 2.实战 还是房屋和道 ...
- 微信小程序:防止多次点击跳转(函数节流)和防止表单组件输入内容多次验证(函数防抖)
一.函数节流(throttle) **函数节流:一个函数执行一次后,只有大于设定的执行周期后才会执行第二次**.有个需要频繁触发函数,出于优化性能角度,在规定时间内,只让函数触发的第一次生效,后面不生 ...
- Go语言如何判断一个chan被关闭
当一个chanel被关闭后,再取出不会阻塞,而是返回零值 package main import "fmt" func main() { c := make(chan int, 5 ...
- Jenkins入门之执行定时任务
通过前面我们讲解了如何通过Jenkins执行windows command,powershell脚本,此时我们便可以开始完成一些简单任务了,然而可能看到我们都是通过手动按下Build Now按钮来执行 ...
- PXE+kickstart无人值守安装CentOS 7
kickstart+cobbler系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 本文是PXE+kickstart无人值守安装CentOS ...
- Perl数据序列化和持久化(入门):Storable模块
Perl提供了一个Storable模块,用来对数据结构进行序列化(serialization,Perl中称为冻结),也就是将数据结构保存为二进制数据. 序列化后的数据可以写入文件实现持久化,可以将持久 ...