GIt 入门

python学习网 2017-08-10 21:32:02

关于GIT

GIT 是一个分布式版本控制软件,最初由林纳斯·托瓦兹(Linus Torvalds)创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。是目前世界上最先进的分布式版本控制系统.

什么是版本控制

版本控制(Revision control)是维护工程蓝图的标准作法,能追踪工程蓝图从诞生一直到定案的过程。此外,版本控制也是一种软件工程技巧,借此能在软件开发的过程中,确保由不同人所编辑的同一代码文件案都得到同步。

集中式和分布式

再说分布式是什么前, 我们前看一下什么是集中式.

集中式

集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟,这还不得把人给憋死啊。

分布式

那分布式版本控制系统与集中式版本控制系统有何不同呢?首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

安装GIT

  1. sudo apt-get install git

 

创建版本库

第一步, 先要创建一个目录, 这个目录就是用来存放仓库的.

 

  1. $ mkdir git         创建一个名叫git的目录
  2. $ cd git    


第二步, 使用git init命令, 将当前目录创建成git仓库.

 

  1. $ git init

 

马上就把仓库创建成功了, 并提示这是一个空仓库.

 

  1. $ ls -al           al表示列出所有的文件,包括隐藏文件,就是文件前面第一个字符为.的文件
  2. 总用量 12
  3. drwxrwxr-x  3 linux linux 4096 8  10 18:14 .    
  4. drwxr-xr-x 43 linux linux 4096 8  10 18:00 ..
  5. drwxrwxr-x  8 linux linux 4096 8  10 18:00 .git           .git为隐藏文件夹, 表示创建成功

 

配置用户信息

配置用户名, 这个用户名是你的提交patch的名子, 最好写真的名了, 不是网名, 如果有一天你成为名人了,那这个东西会一直印着你的足迹.

  1. $ git config --global user.name "你的名字"

 

配置用户邮箱, 这个邮箱最好写你最常用的邮箱, 说不定会有人给你写邮件的, 这个是可能来自世界的任何角落, 可能是任何肤色和眼睛.

  1. $ git config --global user.email "你的邮箱"

 

配置编辑提交信息的编辑器, 我们熟悉的编辑器是vim. 使用这个去编辑提交信息, 最好把每一次提交信息填写写的全面, 不是为了给别人看, 万一那天自己想回顾一下. 也需要详细的信息.

  1. $ git config --global core.editor vim

 

Git用户名邮箱的全局配置和单仓库配置

  1. Git可以配置了一个全局的用户名和邮箱:
  2. $ git config --global user.name "xxxxx"
  3. $ git config --global user.email "xxxxx@xx.com"
  4. $ git config --list
  5. 但是你的项目可能是公司自己搭建的gitlab进行管理的,那就需要单独针对这个项目单独配置用户名和邮箱。
  6. 在项目根目录下进行单独配置:
  7. $ git config user.name "gitlab's Name"
  8. $ git config user.email "gitlab@xx.com"
  9. $ git config --list
  10. git config --list查看当前配置, 在当前项目下面查看的配置是全局配置+当前项目的配置, 使用的时候会优先使用当前项目的配置

 

增加文件

当前目录里没有文件, 那么我们先创建一个文件README.

 

  1. $ touch README

 

编辑这个文件, 写一点东西在里面.

 

  1. $ vim README

 

先用查看当前状态的命令, 查看一下现在目录下文件的状态.

 

  1. $ git status
  1. 位于分支 master
  2. 未跟踪的文件:
  3.  (使用 "git add <文件>..." 以包含要提交的内容)
  4. README
  5. 提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

 

把文件加到仓库中去, 只有加到仓库中了, 才可能看一下文件的变化.

 

  1. $ git add README

 

现在使用查看状态的命令, 看一下目录下文件的状态.

 

  1. $ git status
  2. 位于分支 master
  3. 要提交的变更:
  4.  (使用 "git reset HEAD <文件>..." 以取消暂存)
  5. 新文件:   README

 

提交

  1. $ git commit

 

现在使用查看状态的命令, 看一下目录下文件的状态.

 

  1. 位于分支 master
  2. 无文件要提交,干净的工作区

 

查看提交信息

  1. $ git log
  2. commit 50f37204c0a3f056f799683415f577a3a6bfb11b id
  3. Author: klous <klous530.outlook.com> 我们的用户名,邮箱
  4. Date: Thu Aug 10 19:10:13 2017 +0800
  5. Add file README
  6. 新文件: README

删除文件恢复

有时候, 我们不小心把文件给删除了. 想恢复这个文件时, 需要用到下面的命令.

我现在把仓库里的README这个文件给删除了. 然后再使用ls命令查看文件, 看看这个文件是否还存在.

  1. $ rm README
  2. $ ls
  3. $ ls -al


文件已经被删除了, 这是我们使用linux基本命令去查看文件是不是还存在这个目录中.现在我们使用git去查看一下现在仓库是什么状态

  1. $ git status
  2. 位于分支 master
  3. 尚未暂存以备提交的变更:
  4. (使用 "git add/rm <文件>..." 更新要提交的内容)
  5. (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
  6. 删除: README
  7. 修改尚未加入提交(使用 "git add" 和/或 "git commit -a"


发现这个文件是误删了, 我们想把它恢复回来, 现在我们有办法吗? 如果没有将这个文件提交到仓库里, 我们是没有办法将它恢复的.

  1. $ git checkout README

 

然后我们再用ls查看一下文件是否存在.

  1. $ ls -al ==> ll
  2. 总用量 16
  3. drwxrwxr-x 3 linux linux 4096 8 10 19:20 ./
  4. drwxr-xr-x 44 linux linux 4096 8 10 19:10 ../
  5. -rw-rw-r-- 1 linux linux 9 8 10 19:20 README
  6. drwxrwxr-x 8 linux linux 4096 8 10 19:20 .git/

 

再查看git仓库状态

  1. $ git status
  2. 位于分支 master
  3. 无文件要提交,干净的工作区

 

版本回退

 

什么叫版本, 一次提交就相当于一个版本. 如果更准确的说是提交的回退. 每一次提交都会将修改的状态提交到仓库中保存着, 这些信息都保存那里呢?都保存在.git的目录下.

如果想回退到上次提交的版本, 那么需要使用git reset命令.

  1. $ git reset --hard commit ID


注意: 使用这个命令后,再使用git log命令不会查看到所有log的相关信息, 那么我们没有办法获取到后一个提交的CommitID.


在这里我们需要使用git reflog命令查看后一次提交的CommitID, 如果已经有了后一次提交的CommitID, 那么我们需要使用git reset命令恢复到前面提交版本.

 

  1. $ git reflog

 

版本之间对比

  1. $ git diff commitID1 commitID2
 



 

阅读(802) 评论(0)