Git创建版本库

运维技术 jikk345 378℃ 0评论

1、创建版本库

  1. [root@Qinglin-Student ~]# cd /data/
  2. [root@Qinglin-Student data]# mkdir qinglin #创建目录
  3. [root@Qinglin-Student data]# cd qinglin/ #进入目录
  4. [root@Qinglin-Student qinglin]# git init #把这个目录变成git可以管理的仓库
  5. Initialized empty Git repository in /data/qinglin/.git/
2、填写使用人姓名和邮件
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。
  1. [root@Qinglin-Student qinglin]# git config --global user.name "guanqinglin"
  2. [root@Qinglin-Student qinglin]# git config --global user.email "qinglin@qinglin.net"
注意事项:
把文件添加到版本库
首先这里再明确一下,所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
不幸的是,Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的,前面我们举的例子只是为了演示,如果要真正使用版本控制系统,就要以纯文本方式编写文件。
因为文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。
使用Windows的童鞋要特别注意:
千万不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题,比如,网页第一行可能会显示一个“?”,明明正确的程序一编译就报语法错误,等等,都是由记事本的弱智行为带来的。建议你下载Notepad++代替记事本,不但功能强大,而且免费!记得把Notepad++的默认编码设置为UTF-8 without BOM即可:

3、创建一个文件,把提交到git库里

创建文件:
  1. [root@Qinglin-Student qinglin]# vim readme.txt
  2. Git is a version control system.
  3. Git is free software.
用命令git add 告诉Git,把文件添加到仓库
  1. [root@Qinglin-Student qinglin]# git add readme.txt
用命令git commit告诉Git,把文件提交到仓库
  1. [root@Qinglin-Student qinglin]# git commit -m "add readme.txt" #-m 后的内容是注释,告诉git方便记录
  2. [master 74b8ee4] add readme.txt
  3. 1 files changed, 2 insertions(+), 0 deletions(-)
4、git版本的修改与查看
修改readme.txt的内容,然后查看运行status命令查看结果
  1. [root@Qinglin-Student qinglin]# vim readme.txt
  2. Git is a version control system.
  3. Git is free software.
  4. Guanqinglin
  5. [root@Qinglin-Student qinglin]# git status
  6. # On branch master
  7. # Changed but not updated:
  8. # (use "git add/rm <file>..." to update what will be committed)
  9. # (use "git checkout -- <file>..." to discard changes in working directory)
  10. #
  11. # modified: readme.txt #readme.txt显示已经被修改过了。modified修改
  12. #
  13. no changes added to commit (use "git add" and/or "git commit -a")
看查具体修改了什么内容,需要使用diff命令
  1. [root@Qinglin-Student qinglin]# git diff readme.txt
  2. diff --git a/readme.txt b/readme.txt
  3. index 46d49bf..e4c1c30 100644
  4. --- a/readme.txt
  5. +++ b/readme.txt
  6. @@ -1,2 +1,3 @@
  7. Git is a version control system.
  8. Git is free software.
  9. +Guanqinglin #比原版本多了一个内容前面有个+
提交修改后,再查看git status查看状态,工作目录是干净的了
  1. [root@Qinglin-Student qinglin]# git commit -m "readme.txt update"
  2. [master a7bcacb] readme.txt update
  3. 1 files changed, 1 insertions(+), 0 deletions(-)
  4. [root@Qinglin-Student qinglin]# git status
  5. # On branch master
  6. # Changed but not updated:
  7. # (use "git add/rm <file>..." to update what will be committed)
  8. # (use "git checkout -- <file>..." to discard changes in working directory)
  9. # #工作目录为空了
  10. #
  11. no changes added to commit (use "git add" and/or "git commit -a")
5、版本退回
修改readme.txt文件,然后提交到版本库中。
  1. [root@Qinglin-Student qinglin]# vim readme.txt
  2. Git is a version control system.
  3. Git is free software.
  4. Guanqinglin
  5. shuaige
  6. [root@Qinglin-Student qinglin]# git add readme.txt
  7. [root@Qinglin-Student qinglin]# git commit -m "add shuaige"
  8. [master b3dbcfb] add shuaige
  9. 1 files changed, 1 insertions(+), 0 deletions(-)
查看版本日志,使用git log命令,该命令是从最近到最远提交的
git log 命令显示从最近到最远的提交日志,我们可以看到3次提交,最后一次是shuaige,上一次是guanqinglin.
  1. [root@Qinglin-Student qinglin]# git log
  2. commit b3dbcfbc392a13da1b15557238427e214b9ab0b6
  3. Author: guanqinglin <qinglin@qinglin.net>
  4. Date: Fri Mar 24 15:34:39 2017 +0800
  5. add shuaige #上次
  6. commit a7bcacbcc1eb5d096f7d4528daa9b0ed8fb3d97c
  7. Author: guanqinglin <qinglin@qinglin.net>
  8. Date: Fri Mar 24 15:30:57 2017 +0800
  9. readme.txt update #上上次
  10. commit 74b8ee435ba8a62a0bba2464b70ccea9f6a4efed
  11. Author: guanqinglin <qinglin@qinglin.net>
  12. Date: Fri Mar 24 12:52:44 2017 +0800
  13. add readme.txt
  14. commit a8a1239ff40339067a3053f2fb86eda90f9ce001
  15. Author: root <root@Qinglin-Student.(none)>
  16. Date: Fri Mar 24 12:37:18 2017 +0800
  17. wrote a readme file
使用–pretty=oneline参数,优化输出内容,不至于眼花缭乱
友情提示:你看到的一大串类似3628164…882e1e0的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。
  1. [root@Qinglin-Student qinglin]# git log --pretty=oneline
  2. b3dbcfbc392a13da1b15557238427e214b9ab0b6 add shuaige
  3. a7bcacbcc1eb5d096f7d4528daa9b0ed8fb3d97c readme.txt update
  4. 74b8ee435ba8a62a0bba2464b70ccea9f6a4efed add readme.txt
  5. a8a1239ff40339067a3053f2fb86eda90f9ce001 add a.py
  6. 94b847e52b3745660a7e44acb084c7cffe64c3f6 wrote a readme file
退回版本
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164…882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
现在要把版本退回到上一个版本(本版本写的是新增一行”guanqinglin”)
  1. [root@Qinglin-Student qinglin]# git reset --hard HEAD^
  2. HEAD is now at a7bcacb readme.txt update
查看文件,版本已经退回了
  1. [root@Qinglin-Student qinglin]# cat readme.txt
  2. Git is a version control system.
  3. Git is free software.
  4. Guanqinglin
再还原到开始的版本。
最新的那个版本append GPL已经看不到了!好比你从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办?
办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个append GPL的commit id是3628164…,于是就可以指定回到未来的某个版本:

返回查看之前使用git log –pretty=oneline命令的版本号

  1. [root@Qinglin-Student qinglin]# git reset --hard b3dbcfbc392a13da1b15557238427e214b9ab0b6
  2. HEAD is now at b3dbcfb add shuaige
  3. [root@Qinglin-Student qinglin]# cat readme.txt #已经恢复了
  4. Git is a version control system.
  5. Git is free software.
  6. Guanqinglin
  7. shuaige
6、工作区和暂存区
工作区(Working Directory)

就是存在电脑里目录,这个文件夹就是工作区。

版本库(Repostiory)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

分支和HEAD的概念我们以后再讲。
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

转载请注明:清麟博客 » Git创建版本库

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址