本篇文章,是基于我自用Linux系统中的自定义文件夹“test_rep”,当做示例演示
具体Git仓库的目录在:/usr/local/git/test_rep
Git创建版本库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被 Git 管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
所以,创建一个版本库非常简单,首先,选择一个合适的地方,你可以使用一个已经存在的目录作为仓库,当然新创建一个空目录也可以。
创建一个新的目录仓库这里就不做过多解释了,毕竟操作系统不同,命令也不同。但是有那一点小问题需要说一下,如果你使用 Windows 系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。
git init
使用 git init
命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以git init
是使用Git的第一个命令。
在执行完成 git init
命令后,Git 仓库会生成一个 .git
目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。这个目录是 Git 来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把 Git 仓库给破坏了。
$ pwd
/usr/local/git/test_rep #我本机测试的目录位置 Linux系统
$ git init
Initialized empty Git repository in /usr/local/git/test_rep/.git/
而且在执行完 git init
命令后,它会告诉你是一个空的仓库提示(empty Git repository)。
另外,如果你没有看到 .git
目录,那是因为这个目录默认是隐藏的,用 ls -ah
命令就可以看见。
git add 与 git commit
首先这里再明确一下,所有的版本控制系统,其实只能跟踪文本文件的改动,比如 txt 文件,网页,所有的程序代码等等,Git 也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。所有有时候你会发现 Microsoft 的 Word 文档,它不会记录里面改了哪些,只会记录它这个 word 文档改动了,因为 Microsoft 的 Word 文档是二进制格式。再有,Windows 自带的记事本编辑任何文本文件,有时候也会有问题,比如编码问题。
现在我们编写几个 txt 文件,如下(作者有的 Linux 测试环境):
$ vim read.txt
Git is a version control system.
$ vim test.txt
this is a test file.
一定要放到 Git 目录下(子目录也行),因为这是一个 Git 仓库,放到其他地方 Git 再厉害也找不到这个文件。
把一个文件放到Git仓库只需要两步,
第一步,用命令git add
告诉 Git,把文件添加到仓库:
$ git add read.txt
$ git add test.txt
执行上面的命令,没有任何显示,这就对了,Linux 说过“没有消息就是好消息”,说明添加成功。
第二步,用命令git commit
告诉 Git,把文件提交到仓库:
$ git commit -m 'append two files'
[master (root-commit) 0fdd224] append two files
2 files changed, 2 insertions(+)
create mode 100644 read.txt
create mode 100644 test.txt
注意:作者这里用的是 Linux 测试环境,所以git commit
命令,-m
后面用的单引号,那如果您是 Windows 系统,-m
后面就应该使用双引号。
简单解释一下git commit
命令,-m
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
嫌麻烦不想输入-m "xxx"
行不行?确实有办法可以这么干,但是强烈不建议你这么干,因为输入说明对自己对别人阅读都很重要。实在不想输入说明的童鞋请自行搜索,因为99%的公司要求,需要输入提交说明,需要用到这个参数。
另外,如果你刚才输入了git commit
命令并没有得到你预计的效果,有时候提示 Author identity unknown
,那指定是你在这之前没有设置 config 参数,可以跳至文章末尾的参考。
最后,至于为什么 Git 添加文件需要add
,commit
一共两步呢?因为commit
可以一次提交很多文件,所以你可以多次add
不同的文件,最后统一commit
。
几个问题:
Q:输入git add xxx文件
,得到错误:fatal: not a git repository (or any of the parent directories)
。
A:Git 命令必须在 Git 仓库目录内执行(git init
除外),在仓库目录外执行是没有意义的。
Q:输入git add xxx文件
,得到错误fatal: pathspec 'readme.txt' did not match any files
。
A:添加某个文件时,该文件必须在当前目录下存在,用ls
或者dir
命令查看当前目录的文件,看看文件是否存在,或者是否写错了文件名。
我们这里是直接在 Git 仓库中执行的一些操作,所以必要条件,就是一定要在 Git 仓库目录下才行。
Git的配置
git 的设置使用 git config 命令。
显示当前的 git 配置信息:
$ git config --list
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
返回的信息,你我不一定非要相同,我们返回这个信息的主要目的是为了看看有没有设置提交代码时的用户信息,很明显从上面的信息反馈是没有用户相关信息的。
编辑 git 配置文件:
$ git config -e #针对当前仓库
或者:
$ git config -e --global #针对系统上所有仓库
设置提交代码时的用户信息:
$ git config --global user.name "Lee"
$ git config --global user.email "test@test.com"
#根据自己的要求,设置name和email
如果去掉 –global 参数只对当前仓库有效。