git
git

学习网站:廖雪峰的网站

1、git简介

Git是目前世界上最先进的分布式版本控制系统(没有之一)。

Git有什么特点?简单来说就是:高端大气上档次!

这个软件用起来就应该像这个样子,能记录每次文件的改动:

版本 用户 说明 日期
1 张三 删除了软件服务条款5 7/12 10:38
2 张三 增加了License人数限制 7/12 18:09
3 李四 财务部门调整了合同金额 7/13 9:51
4 张三 延长了免费升级周期 7/14 15:17
这样,你就结束了手动管理多个“版本”的史前时代,进入到版本控制的20世纪。

2、安装git

  • 用Debian或Ubuntu Linux,通过一条sudo apt-get install git就可以直接完成Git的安装,非常简单。

  • 老一点的Debian或Ubuntu Linux,要把命令改为sudo apt-get install git-core,因为以前有个软件也叫GIT(GNU Interactive Tools),结果Git就只能叫git-core了。由于Git名气实在太大,后来就把GNU Interactive Tools改成gnuit,git-core正式改为git。

  • 如果是其他Linux版本,可以直接通过源码安装。先从Git官网下载源码,然后解压,依次输入:./config,make,sudo make install这几个命令安装就好了。

  • Windows就忽略了。实话实说,Windows是最烂的开发平台,如果不是开发Windows游戏或者在IE里调试页面,一般不推荐用Windows。不过,既然已经上了微软的贼船,也是有办法安装Git的。

3、配置git

(这一步意义不大,似乎不设置也没有影响)
安装完成后,还需要最后一步设置,在命令行输入:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

4、常规操作

$ mkdir learngit
$ cd learngit
$ git init
$ git add . 添加全部文件,也可以添加指定文件,多个用空格隔开
$ git commit -m “备注内容”
$ git status 查看结果,其中有颜色变化
$ git diff readme.txt 如果提示readme.txt文件被修改,命令查看具体修改内容
$ git log 查看提交的历史记录
$ git log –pretty=oneline 如果嫌输出信息太多,看得眼花缭乱的,可以试试加上–pretty=oneline参数
需要友情提示的是,你看到的一大串类似3628164…882e1e0的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示。

瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

特别提醒

首先这里再明确一下,所有的版本控制系统,其实只能跟踪文本文件的改动,比如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即可

4、时光机穿梭

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164…882e1e0,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

$ git reset –hard HEAD^ 把当前版本“append GPL”回退到上一个版本

最新的那个版本append GPL已经看不到了!好比你从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办?

办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个append GPL的commit id是3628164…,于是就可以指定回到未来的某个版本:

$ git reset –hard 3628164
HEAD is now at 3628164 append GPL
版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL。

现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?

在Git中,总是有后悔药可以吃的。当你用$ git reset –hard HEAD^回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPL的commit id。Git提供了一个命令git reflog用来记录你的每一次命令。

$ git reflog 查看命令历史

5、工作区和暂存区

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

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

6、撤销修改和删除文件

git checkout – file
git reset HEAD file

删除本地文件 rm test.txt

  • 一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit

  • 二是误删,轻松恢复 git checkout – test.txt

7、远程仓库配置(重要)

创建SSH Key

$ ssh-keygen -t rsa -C “youremail@example.com”
然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

登陆GitHub,打开“Account settings”,“SSH Keys”页面

然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。
Coding同样的道理。

Git冲突:commit your changes or stash them before you can merge.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
### 克隆下载
pull
fech

执行git init初始化这个文件,在clone到你们本地


### fork更新
fork 版本的修改 pull 到原版本的方法,但无法把原版本的修改 pull 到我 fork 的版本中。
new pull request
[网络错误-未链接到互联网](http://www.cnblogs.com/linxinmeng/p/7070066.html)


### git base & git merge

### git rejected

### [Git fetch和git pull的区别](http://blog.csdn.net/hudashi/article/details/7664457)

http://blog.csdn.net/wh_19910525/article/details/7554489


git是一种版本控制系统。跟svn、cvs是同级的概念。
github是一个网站,给用户提供git服务。这样你就不用自己部署git系统,直接用注册个账号,用他们提供的git服务就可以。

# 提交说明

1. fork这个项目到自己的coding.net库
2. pull这个项目到本地
fatal: Not a git repository (or any of the parent directories): .git
原因:你没有初始化git init


3. 按照学生信息表.md的示例填写自己的相关信息
4. push到自己的coding.net库
5. 提PR到https://coding.net/u/greyzeng/p/WHU_SE_2017/git/tree/master
http://overflowstack.github.io/

进入数据库,导入sql文件,输入“source sql文件的路径”(注意你的文件路径要是复制来的,要将"\"全部换成“/”)

输入“show tables”,你就会看到你导入的表了。

ova (原创动画录影带) 编辑
原创动画录影带(Original Video Animation)简称。一般指通过DVD,蓝光碟等影碟发行的方式为主的剧集,也指一些相较原著篇幅较小且内容不一的动画剧集,相较于电视动画、剧场版电视或者电影院播放的不同,OVA则是从发行渠道来划分的,一般通过DVD等影碟的形式发行。一般的OVA不见得广为人知,选材一般是应某个特定作品的爱好者的要求而出的,一般是将情节补完,以满足爱好者收藏的需要。也有的OVA是作为实验期的作品,如果反响不错,就很有可能做成电视动画。