0%

Git

Git

简介

Git是一个免费的,开源的分布式版本控制系统,被设计用来又快又好地处理大大小小的项目。

分布式 集中式

配置

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

--global 表示这台机器上的所有仓库都会用这个配置。

建立工程

初始化文件夹为仓库

1
2
$ git init
Initialized empty Git repository in D:/Temp/learn-git/.git/

之后本地文件夹就会有.git文件夹

基本使用

添加文件到版本库

在Git目录下新建文件。

1
2
3
4
5
6
7
8
9
10
11
$ git status
On branch master

No commits yet

Untracked files:
(use "git add <file>..." to include in what will be committed)

first.txt

nothing added to commit but untracked files present (use "git add" to track)

git status 查看当前==文件夹==状态。

1
$ git add .

给当前目录下的所有文件创建一个快照。这些快照保存在一个暂时的区域,Git中叫做index(暂存区)。

1
$ git commit

之后再用git commit就可以把暂存区中的内容永久地存到Git仓库里。

直接git commit会要求你输入这次提交的信息,vim方式输入。

git commit -m "message" 可以综合这两步过程。

修改

修改一下文件内容,然后把TA们添加到暂存区。

1
$ git diff --cached

可以查看最近一次add的文件的修改内容,如下所示:

1
2
3
4
5
6
7
8
9
diff --git a/first.txt b/first.txt
index b683137..53c5510 100644
--- a/first.txt
+++ b/first.txt
@@ -1 +1 @@
-This is first line.
\ No newline at end of file
+First line.
\ No newline at end of file

add之后再status查看当前暂存区与上一次commit之间的差别。

如果没什么再需要修改的,就可以commit添加到仓库了。

git commit -a 可以把addcommit一次完成。

这会把所有修改的(不包括新建的)文件添加到暂存区,再commit提交

Git追踪的是内容不是文件

查看历史

1
$ git log

git log可以在任何时刻使用,来查看每一次commit的信息

TODO

分支和合并

管理分支

一个Git仓库可以有多个分支。

新建分支

1
$ git branch dev

查看分支

1
$ git branch

Git会显示出所有分支,TODO

1
2
  dev
* master

切换分支

2.23加入,现在还在试验阶段,是为了分担git checkout(以前切换分支是checkout)的功能。

Git 更新(Windows) git update-git-for-windows

1
$ git switch dev

就切换到了dev分支

分享和更新项目

检查和比较

补丁

原理

更多

.gitignore

.gitignore用来规定一些不需要提交到版本库(不被Git追踪)的文件,大多是配置文件和临时文件或中间生成的文件。第一次push后,在.gitignore中写入新的过滤规则是不会更新的,所有最好一开始就编写好,否则需要先git rm

.gitignore忽略规则的匹配语法

来自 https://www.cnblogs.com/kevingrace/p/5690241.html

在 .gitignore 文件中,每一行的忽略规则的语法如下:
1)空格不匹配任意文件,可作为分隔符,可用反斜杠转义
2)以“”开头的行都会被 Git 忽略。即#开头的文件标识注释,可以使用反斜杠进行转义。
3)可以使用标准的glob模式匹配。所谓的glob模式是指shell所使用的简化了的正则表达式。
4)以斜杠”/“开头表示目录;”/“结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件;”/“开始的模式匹配项目跟目录;如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录。
5)以星号”**”通配多个字符,即匹配多个任意字符;使用两个星号”*“ 表示匹配任意中间目录,比如`a//z`可以匹配 a/z, a/b/z 或 a/b/c/z等。
6)以问号”?“通配单个字符,即匹配一个任意字符;
7)以方括号”[]“包含单个字符的匹配列表,即匹配任何一个列在方括号中的字符。比如[abc]表示要么匹配一个a,要么匹配一个b,要么匹配一个c;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配。比如[0-9]表示匹配所有0到9的数字,[a-z]表示匹配任意的小写字母)。
8)以叹号”!“表示不忽略(跟踪)匹配到的文件或目录,即要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。需要特别注意的是:如果文件的父目录已经被前面的规则排除掉了,那么对这个文件用”!”规则是不起作用的。也就是说”!”开头的模式表示否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用”!”也不会再次被包含。可以使用反斜杠进行转义。

需要谨记:git对于.ignore配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;

2019-11-28 22:39:44