git 入门基础

之前一直使用图形化的 git 客户端工具,导致对 git 的很多原理非常的模糊,这部分文章将依靠 git 命令作为线索,仔细的学习一下 git 的整体操作。

安装git与首次设置

安装 git 的方式有很多,比如 windows 用户通过百度搜索 git for windows ,Mac 用户可以通过安装 Xcode 或者使用 brew 来进行安装,这个就不用仔细讨论了。我们关键来说说使用 git 之前必须进行的设置操作:

1
2
$ git config --global user.name "your name" # 希望你__不要__直接在这里写 __“your name”__ 
$ git config --global user.email "email@example.com"

git 是可以多人协作的版本管理系统,所以能够追查修改者是很重要的,不要乱提交代码哟,可以查到你的。

初始化

每一个项目都应该是从新建一个文件夹开始的,文件夹中包含了一个项目所需要的骨架和各种资源,如果我们已经打定主意这个项目将要通过 git 来进行版本管理和协同操作,那我们就需要通过初始化命令将项目交给 git 这个管家来负责。

1
2
3
$ mkdir testgit # 创建项目目录,一定记住所有的项目都是被包含在一个目录中的
$ cd testgit
$ git init # 将目录进行初始化,从此以后目录中文件变化信息都将交给 git 控制

添加文件与暂存区概念

在 git 中的一个重要概念是将文件记录在三个状态中,或者理解为将文件存储在三个特殊的空间里也可以,这三个体现分别是:工作区暂存区版本仓库

所谓工作区正是我们能够看得见摸得着的那部份内容,也就是刚刚建立好的文件夹,我们新建一个文本文件,复制进来一张图片等等诸如此类的操作都是在工作区中进行的,所以我们现在就在工作区中新建一个文件

1
$ touch hello.txt # touch 命令一般用于生成一个空白文件,我们可以在其中随便写入一些内容

当工作区中的文件发生变化后,我们可以通过 git status 来查看一下,此时一般会出现 Untracked files 字样,代表有未被追踪的文件。

此时文件并没有被真的被 git 进行管理,我们需要通过命令将文件加入到 git 的暂存区中:

1
$ git add -A # -A 是add命令的参数,代表将所有未追踪的文件加入到暂存区(stage)中

每次文件如果发生变化,都会进入到一种 未追踪 状态,所以需要继续通过 add 命令来添加暂存区。

提交与版本仓库

文件进入暂存区只是第一步,或者说暂存区只是文件入库前的一个临时存放地。如果决定文件的修改已经完成,则需要通过提交来确定保存本次版本变化。时刻需要记住,我们伟大的git是一个版本控制系统,它是一个记录版本变化的系统。所以提交才是最关键的步骤。

1
$ git commit -m "some message" # -m 是commit命令的参数,代表提交需要记录的信息,一般不要做无意义的提交,而且每次提交都应该记录内容,确保有迹可循

这里我们似乎可以理解 git 的一些思路了,工作过程中总是想办法尽量保证暂存区是干净的,保证暂存区干净的两个方法是放弃本次修改或者提交本次修改

放弃本次修改

对于那些已经add进暂存区的内容,如果要放弃上一次的修改只需要执行git reset --hard <file> 就可以了。

如果有github帐号后应该怎么办?

我想各位应该并不满足仅仅在自己电脑上玩玩 git ,那么是时候将我们的本地仓库弄到网上去了。申请 github 帐号的方法这里就不赘言了。我们一般的操作都是先在在线仓库中新建一个空白的仓库。

现在我们分几种情况来讨论一下

如果你本地也是准备要开启一个新项目的

这种情况最简单了,我们直接将在线的项目clone回本地,然后在这个目录中干活就可以了。

1
$ git clone https://github.com/yourgithub/repository.git #这个就是你的项目仓库地址,每个人不同的 。这里要注意,执行这个命令的目录下会出现克隆到的项目

然后把你自己的文件复制到这个文件夹里,执行

1
$ git push

此时一般会要求你输入github的帐号和密码,如果你的身份验证无误就可以将内容提交线上了。

如果你本地已经有一个项目,但是并没有使用 git 管理

如果是这种情况,那首先要在目录中执行 git init初始化一下。然后执行

1
$ git remote add origin youname@github.com:youname/repository.git

这样就可以将你的远程用户添加到项目中,此后就可以如上面一样进行推送了。