git

来源:互联网 发布:windows开发unity ios 编辑:程序博客网 时间:2024/06/05 01:12

1 安装git

1.1安装git

$ sudo apt-get install git$ sudo apt-get install tig

1.2 配置用户信息

1.2.1 配置用户名

# 在提交记录时需要知道你是谁$ git config --global user.name "tustxk"

1.2.2 配置用户邮箱

# 在提交记录时需要知道怎么联系你$ git config --global user.email "tustxk@163.com"

1.3 配置文本编辑器

# 一般我们习惯配置vim为默认编辑器$ git config --global core.editor vim

1.4 配置差异分析工具

# 一般我们习惯配置vimdiff为默认差异分析工具$ git config --global diff.tool vimdiff$ git config --global merge.tool vimdiff

1.5 输出信息着色

# git命令输出信息自动着色$ git config --global color.ui true

1.6 配置缓存

# 默认15分钟  $ git config --global credential.helper cache
# 修改缓存时间  $ git config --global credential.helper 'cache --timeout=3600

1.6 查看配置信息

1.6.1 查看已有配置信息

$ git config --list# or$ git config -l

1.6.2 查看单个环境变量的配置

$ git config user.name$ git config user.email$ git config core.editor

2 配置github

2.1添加 SSH key

2.1.1 检查你电脑是否已经有 SSH key

$ ls ~/.ssh

这里写图片描述

检查是否已经存在 id_rsa.pub 或 id_dsa.pub 文件,如果文件已经存在,那么无需创建SSH key

2.1.2 创建一个 SSH key

$ ssh-keygen -t rsa -C tustxk@163.com

这里写图片描述

2.1.3 添加SSH key 到 github上面去

$ vi ~/.ssh/id_rsa.pub

这里写图片描述

3 配置gitolite

这里写图片描述

3.1 生成SSH key(客户端)

$ ssh-keygen -t rsa -C tustxk@163.com

3.2 将生成的SSH public key拷贝到服务器(客户端)

这里注意,为了区分SSH public key,请将SSH public key重命名,最好是用用户名命名。例如 .pub

$ scp ~/.ssh/id_rsa.pub git@192.168.1.116:/tmp/tustxk.116.pub

3.3 创建Git用户(服务器端)

$ sudo adduser git$ sudo vi /etc/sudoers

3.4 下载Gitolite源码(服务器端)

3.5 安装Gitolite(服务器端)

$ sudo apt-get install gitolite3

3.6 设置SSH public key(服务器端)

$ gitolite setup -pk /tmp/tustxk.116.pub

3.7 克隆Gitolite管理库(客户端)

$ git clone git@192.168.1.116:gitolite-admin.git

这里写图片描述

conf/gitolite.conf 用于Git项目配置,访问权限设置。
keydir/ 用于存储用户的SSH public key(公钥)。

3.8 配置Git项目(客户端)

3.8.1 添加一个新的Git项目

3.8.1.1 注册gitolite.conf

$ vi conf/gitolite.conf

这里写图片描述

$ git status$ git add conf/gitolite.conf$ git commit -m 'add myTest repo'$ git push origin master
3.8.1.2 设置Git项目
$ mkdir myTest$ cd myTest$ git init$ git remote add origin git@192.168.1.116.git

3.8.2 添加一个存在的Git项目

3.8.2.1 注册gitolite.conf

同3.8.1.1

3.8.2.2 设置Git项目


$ cd myTest
$ git remote rm origin
$ git remote add origin git@192.168.1.116:myTest.git
$ git push origin master

4 git命令

这里写图片描述

  • Workspace:工作区
  • Index / Stage:暂存区
  • Repository:仓库区(或本地仓库)
  • Remote:远程仓库

4.1 git add

4.1.1 git add
这里写图片描述

# Add file contents to the index# 跟踪新文件$ git add <path>$ git add README

4.1.2 git add -u

# add to index only files modified or deleted and not those created# 把<path>中所有tracked文件中被修改过或已删除文件的信息添加到索引库,它不会处理untracted的文件。省略<path>表示.,即当前目录。$ git add -u [<path>]

4.1.3 git add -A

# 把<path>中所有tracked文件中被修改过或已删除文件和所有untracted的文件信息添加到索引库。省略<path>表示.,即当前目录。$ git add -A: [<path>]

4.2 git am

这里写图片描述

4.2.1 git am […]

如果收到的补丁文件是format-patch 制作的新式补丁,就该用 git am 命令来应用补丁。

$ git am [<patch>...]$ git am 0001-limit-log-function.patch

4.2.2 git am –resolved

如果git am 打补丁有冲突,先消除冲突,然后暂存文件,最后运行 git am –resolved 提交修正结果

$ git am --resolved

4.2% git apply

这里写图片描述

4.2%.1 git apply […]

如果收到的补丁文件是用 git diff 或由其它 Unix 的 diff 命令生成,就该用 git apply 命令来应用补丁。

$ git apply [<patch>...]$ git apply /tmp/patch-ruby-client.patch

4.2%.2 git apply –check

# 检测补丁有无问题$ git apply --check [<patch>...]

4.3 git archive

这里写图片描述

4.4 git bisect

这里写图片描述

4.5 git branch

这里写图片描述

4.5.1 git branch

# 列出本地已经存在的分支,并且在当前分支的前面加“*”号标记$ git branch

4.5.1 git branch -r

# 列出远程分支$ git branch -r

4.5.2 git branch -a

# 列出本地分支和远程分支$ git branch -a

4.5.3 git branch

# 新建分支# git branch <branchname> [<start-point>]

4.5.4 git branch -m

# 重命名分支$ git branch -m [<oldbranch>] <newbranch>

4.5.5 git branch -d

# 删除分支$ git branch -d [-r] <branchname>

4.6 git bundle

这里写图片描述

4.7 git checkout

这里写图片描述
主要功能就是迁出一个分支的特定版本。默认是迁出分支的HEAD版本

4.7.1 git checkout

# 切换分支$ git checkout [<branch>]$ git checkout master

4.7.2 git checkout -b

# 新建并切换分支$ git checkout -b <new_branch> [<start point>]$ git checkout -b new_branch$ git checkut -b new_branch master$ git checkout -b new_branch remotes/origin/master

4.7.3 git checkout –

# 撤销对工作区修改$ git checkout [--] [<paths>...]$ git checkout -- README

4.7.4 git checkout .

# 撤销对工作区所有文件的修改$ git checkout .相当于$ git checkout -- .

4.8 git cherry-pick

这里写图片描述

4.9 git citool

这里写图片描述

4.10 git clean

这里写图片描述

#删除 一些 没有 Git add 的 文件$ git clean -df

4.11 git clone

这里写图片描述

$ git clone <版本库的网址>比如,克隆mySh的版本库。$ git clone git@github.com:tustxk/mySh.git

该命令会在本地主机生成一个目录,与远程主机的版本库同名。如果要指定不同的目录名,可以将目录名作为git clone命令的第二个参数。

$ git clone <版本库的网址> <本地目录名>

git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。

$ git clone http[s]://example.com/path/to/repo.git/$ git clone ssh://example.com/path/to/repo.git/$ git clone git://example.com/path/to/repo.git/$ git clone /opt/git/project.git $ git clone file:///opt/git/project.git$ git clone ftp[s]://example.com/path/to/repo.git/$ git clone rsync://example.com/path/to/repo.git/

SSH协议还有另一种写法。

$ git clone [user@]example.com:path/to/repo.git/

通常来说,Git协议下载速度最快,SSH协议用于需要用户认证的场合。

4.12 git commit

这里写图片描述

4.12.1 git commit -m

# 提交更新$ git commit -m <msg>$ git commit -m 'modified .gitignore'

这里写图片描述

4.12.2 git commit –amend

# 修改还未提交到远程分支的 commit 信息$ git commit --amend

4.13 git describe

这里写图片描述

4.14 git diff

这里写图片描述

# 查看已暂存和未暂存的更新

git diff 会使用文件补丁的格式显示具体添加和删除的行。

  • working tree:就是你所工作在的目录,每当你在代码中进行了修改,working tree的状态就改变了。
  • index file:是索引文件,它是连接working tree和commit的桥梁,每当我们使用git-add命令来登记后,index file的内容就改变了,此时index file就和working tree同步了。
  • commit:是最后的阶段,只有commit了,我们的代码才真正进入了git仓库。我们使用git-commit就是将index file里的内容提交到commit中。

4.14.1 git diff

# 查看working tree与index file的差别$ git diff

这里写图片描述

4.14.2 git diff –cached

# 是查看index file与commit的差别$ git diff --cached

这里写图片描述

4.14.3 git diff HEAD

# 是查看working tree和commit的差别的。(你一定没有忘记,HEAD代表的是最近的一次commit的信息)$ git diff HEAD

这里写图片描述

4.14.4 git diff

# 比较当前文件和暂存区文件差异 git diff$ git diff <file>

4.14.5 git diff

# 比较两次提交之间的差异(新提交在旧提交上的差异)$ git diff <oldcommit> <newcommit># 生成补丁$ git diff <oldcommit> <newcommit> > kkk.patch

4.14.6 git diff

# 在两个分支之间比较$ git diff <branch1> <branch2>

4.15 git fetch

这里写图片描述
一旦远程主机的版本库有了更新(Git术语叫做commit),需要将这些更新取回本地,这时就要用到git fetch命令。
fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并

$ git fetch <远程主机名>

上面命令将某个远程主机的更新,全部取回本地。
默认情况下,git fetch取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。

$ git fetch <远程主机名> <分支名>

比如,取回origin主机的master分支。

$ git fetch origin master

所取回的更新,在本地主机上要用”远程主机名/分支名”的形式读取。比如origin主机的master,就要用origin/master读取。

4.16 git format-patch

这里写图片描述

4.16.1 git format-patch

# 在当前分支上,打出commit以后的所有patch(不包括commit)$ git format-patch <commit>$ git format-patch 85b30b01

这里写图片描述

4.16.2 git format-patch –root

# 在当前分支上,打出commit以前的的所有patch(包括commit)$ git format-patch --root <commit>$ git format-patch --root 85b30b01

这里写图片描述

4.16.3 git format-patch -n [commit]

# 在当前分支上,打出commit以前的的n个patch(包括commit)$ git format-patch -n [commit]$ git format-patch -1 85b30b01

这里写图片描述

# 省略commit表示HEAD^$ git format-patch -1

这里写图片描述

4.16.4 git format-patch -M

# 当前分支所有超前branch的patch$ git format-patch -M <branch>$ git format-patch -M pu

这里写图片描述

4.16.5 git format-patch -s

# 当前分支commit以后的所有patch(不包括commit)$ git format-patch -s <commit>$ git format-patch -s 85b30b01

这里写图片描述

4.17 git gc

这里写图片描述

4.18 git grep

这里写图片描述

4.19 git gui

这里写图片描述

4.20 git init

这里写图片描述

4.20.1 git init

取得项目的 Git 仓库

# 在工作目录中初始化新仓库$ git init

4.20.2 .gitignore

忽略某些文件
创建一个名为 .gitignore 的文件,列出要忽略的文件模式。
文件 .gitignore 的格式规范如下:

  • 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
  • 可以使用标准的 glob 模式匹配。
  • 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
    所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。

  • 星号(*)匹配零个或多个任意字符;

  • [abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
  • 问号(?)只匹配一个任意字符;
  • 如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
# 此为注释 – 将被 Git 忽略# 忽略所有 .a 结尾的文件*.a# 但 lib.a 除外!lib.a# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO/TODO# 忽略 build/ 目录下的所有文件build/# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txtdoc/*.txt# ignore all .txt files in the doc/ directorydoc/**/*.txt# 忽略所有以 .o 或 .a 结尾的文件*.[oa]# 忽略所有以波浪符(~)结尾的文件*~

4.21 git log

这里写图片描述
查看提交历史

$ git log -p -2-p 选项展开显示每次提交的内容差异-2 则仅显示最近的两次更新:$ git log --pretty=oneline -2

4.22 git merge

这里写图片描述

# 合并到当前分支$ git merge <branch>$ git merge origin/master

4.22% git mergetool

这里写图片描述

# 解决冲突$ git mergetool

4.23 git mv

这里写图片描述

# 移动文件$ git mv <source> <destination>$ git mv README.txt README# 相当于运行了下面三条命令:$ mv README.txt README$ git rm README.txt$ git add README

4.24 git notes

这里写图片描述

4.25 git pull

这里写图片描述
git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。

$ git pull <远程主机名> <远程分支名>:<本地分支名>

比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。

$ git pull origin next:master

如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

$ git pull origin next

上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge。

$ git fetch origin$ git merge origin/next

在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。
Git也允许手动建立追踪关系。

$ git branch --set-upstream master origin/next

上面命令指定master分支追踪origin/next分支。
如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。

$ git pull origin

上面命令表示,本地的当前分支自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并。
如果当前分支只有一个追踪分支,连远程主机名都可以省略。

$ git pull

上面命令表示,当前分支自动与唯一一个追踪分支进行合并。
如果合并需要采用rebase模式,可以使用–rebase选项。

$ git pull --rebase <远程主机名> <远程分支名>:<本地分支名>

4.26 git push

这里写图片描述
git push命令用于将本地分支的更新,推送到远程主机。它的格式与git pull命令相仿。

$ git push <远程主机名> <本地分支名>:<远程分支名>

注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。
如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。

$ git push origin master

上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。

$ git push origin :master# 等同于$ git push origin --delete master

上面命令表示删除origin主机的master分支。
如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。

$ git push origin

上面命令表示,将当前分支推送到origin主机的对应分支。
如果当前分支只有一个追踪分支,那么主机名都可以省略。

$ git push

如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。

$ git push -u origin master

上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。
不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。如果要修改这个设置,可以采用git config命令。

$ git config --global push.default matching# 或者$ git config --global push.default simple

还有一种情况,就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用–all选项。

$ git push --all origin

上面命令表示,将所有本地分支都推送到origin主机。
如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用–force选项。

$ git push --force origin

上面命令使用–force选项,结果导致在远程主机产生一个”非直进式”的合并(non-fast-forward merge)。除非你很确定要这样做,否则应该尽量避免使用–force选项。
最后,git push不会推送标签(tag),除非使用–tags选项。

$ git push origin --tags

4.27 git rebase

这里写图片描述

# 衍合到当前分支$ git rebase <branch>$ git rebase origin/master

4.28 git remote

这里写图片描述
为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。

4.28.1 git remote

不带选项的时候,git remote命令列出所有远程主机。

$ git remote

这里写图片描述

4.28.2 git remote -v

使用-v选项,可以参看远程主机的网址。

$ git remote -v

这里写图片描述
上面命令表示,当前只有一台远程主机,叫做origin,以及它的网址。
克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。

$ git clone -o kkk git@github.com:tustxk/mySh.git

这里写图片描述
上面命令表示,克隆的时候,指定远程主机叫做kkk。

4.28.3 git remote add

# Adds a remote named <name> for the repository at <url>. The command git fetch <name> can then be used to create and update remote-tracking branches <name>/<branch>.

git remote add命令用于添加远程主机。

$ git remote add <name> <url>$ git remote add origin git@github.com:tustxk/kodi-android.git$ git remote add origin https://github.com/tustxk/kodi-android.git

4.28.4 git remote set-head

Sets or deletes the default branch (i.e. the target of the symbolic-ref refs/remotes/<name>/HEAD) for the named remote. Having a default branch for a remote is not required, but allows the name of the remote to be specified in lieu of a specific branch. For example, if the default branch for origin is set to master, then origin may be specified wherever you would normally specify origin/master.

设置远程仓库的HEAD指向master分支

$ git remote set-head <name> (-a | --auto | -d | --delete | <branch>)$ git remote set-head origin master

4.28.5 git remote set-branches

Changes the list of branches tracked by the named remote. This can be used to track a subset of the available remote branches after the initial setup for a remote.$ git remote set-branches [--add] <name> <branch>…

4.28.6 git remote set-url

Changes URLs for the remote. Sets first URL for remote <name> that matches regex <oldurl> (first URL if no <oldurl> is given) to <newurl>. If <oldurl> doesn’t match any URL, an error occurs and nothing is changed.

设置远程仓库地址(用于修改远程仓库地址)

$ git remote set-url <name> <newurl> [<oldurl>]$ git remote set-url --add <name> <newurl>$ git remote set-url --delete <name> <url>$ git remote set-url origin https://github.com/tustxk/kodi-android.git git@github.com:tustxk/mySh.git$ git remote set-url --add origin https://github.com/tustxk/kodi-android.git$ git remote set-url --delete origin git@github.com:tustxk/mySh.git

4.28.7 git remote show

git remote show命令加上主机名,可以查看该主机的详细信息。

$ git remote show <主机名>$ git remote show kkk

这里写图片描述

4.28.8 git remote rm

# 删除远程主机。$ git remote rm <name># Remove the remote named <name>. All remote-tracking branches and configuration settings for the remote are removed.

4.28.9 git remote rename

# 远程主机的重命名$ git remote rename <old> <new># Rename the remote named <old> to <new>. All remote-tracking branches and configuration settings for the remote are updated.$ git remote rename origin kkk

这里写图片描述

4.28.10 git remote update

这里写图片描述

4.29 git reset

这里写图片描述

4.29.1 git reset

# 回退到某个版本,只保留working tree,回退commit和index信息$ git reset [<commit>] [<paths>]# 回退到某个版本 $ git reset 057d# 回退所有内容到上一个版本 $ git reset HEAD^# 回退a.py这个文件的版本到上一个版本 $ git reset HEAD^ a.py

备注:

HEAD 最近一个提交HEAD^ 上一次提交HEAD^^ 上一次的上一次的提交(倒数第三次)HEAD^^^ 倒数第四次的 交----------------------HEAD~0 最近一个提交HEAD~1 上一次提交HEAD^2 上一次的上一次的提交(倒数第三次)HEAD^3 倒数第四次的提交

4.29.2 git reset –soft

# 回退到某个版本,保留working tree 和index,只回退了commit的信息,如果还要提交,直接commit即可$ git reset --soft [<commit>]

4.29.3 git reset –hard

# Resets the index and working tree. Any changes to tracked files in the working tree since <commit> are discarded.# 彻底回退到某个版本,无保留$ git reset --hard [<commit>]$ git reset --hard HEAD^

这里写图片描述

4.30 git revert

这里写图片描述
Git revert 是 撤销 某次操作,此次操作之前和之后的commit都会被保留,并且 会把这次 撤销 作为一次最新的提交;

# 撤销前一次 commit$ git revert HEAD# 撤销前前一次 commit$ git revert HEAD^

git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,
版本会递增,不影响之前提交的内容。

4.31 git rm

这里写图片描述

4.31.1 git rm

#移除文件#从已跟踪文件清单中移除某个文件,并连带从工作目录中删除指定的文件$ git rm <file>

4.31.2 git rm –cached

# 从已跟踪文件清单中移除某个文件,但不删除指定的文件$ git rm --cached <file>

4.32 git shortlog

这里写图片描述

4.33 git show

这里写图片描述

4.34 git stash

这里写图片描述

4.34.1 git stash

# 对当前的暂存区和工作区状态进行保存$ git statsh

这里写图片描述

4.34.2 git stash list

# 列出所有保存的进度列表$ git stash list

这里写图片描述

4.34.3 git stash pop

# 恢复工作进度$ git stash pop [--index] [<stash>]--index 参数:不仅恢复工作区,还恢复暂存区<stash> 指定恢复某一个具体进度。如果没有这个参数,默认恢复最新进度$ git stash pop

这里写图片描述

4.34.4 git stash apply

#恢复工作进度,但不删除已恢复的进度$ git stash apply [<stash>]

4.34.5 git stash drop

# 删除某一个进度,默认删除最新进度$ git stash drop [<stash>]

4.34.6 git stash clear

# 删除所有进度$ git stash clear

4.35 git status

这里写图片描述
这里写图片描述
文件的状态变化周期

# 检查当前文件状态$ git status

这里写图片描述

4.36 git submodule

这里写图片描述

#不用

4.37. git tag

这里写图片描述

4.37.1 git tag

# 列显已有的标签$ git tag

4.37.2 新建标签

Git 使用的标签有两种类型:轻量级的(lightweight)和含附注的(annotated)。轻量级标签就像是个不会变化的分支,实际上它就是个指向特定提交对象的引用。而含附注标签,实际上是存储在仓库中的一个独立对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明,标签本身也允许使用 GNU Privacy Guard (GPG) 来签署或验证。一般我们都建议使用含附注型的标签,以便保留相关信息;当然,如果只是临时性加注标签,或者不需要旁注额外信息,用轻量级标签也没问题。

4.37.3 git tag -a

# 含附注的标签$ git tag -a <tagname> -m <msg>$ git tag -a v1.0 -m 'my version 1.0'$ git tag -a 17.3-amlogic-kodi -m "[release] bump to final 17.3-amlogic-kodi"$ git push origin 17.3-amlogic-kodi$ git show 17.3-amlogic-kodi$ git push origin :17.3-amlogic-kodi

这里写图片描述

4.37.4 git tag -s

如果你有自己的私钥,还可以用 GPG 来签署标签,只需要把之前的 -a 改为 -s (译注: 取 signed 的首字母)即可:

# 签署标签$ git tag -s <tagname> -m <msg>$ git tag -s v1.5 -m 'my signed 1.5 tag'

这里写图片描述

4.37.5 git tag

# 轻量级标签$ git tag v1.2-lw

4.37.6 git tag -v

# 验证标签$ git tag -v <tagname>$ git tag -v v1.1

4.37.7 后期加注标签

$ git tag -a v1.4 4a788918 -m 'tag for add .gitignore'

这里写图片描述
这里写图片描述

4.37.8 分享标签

默认情况下,git push 并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。其命令格式如同推送分支,运行 git push origin 即可:

$ git push origin v1.0

如果要一次推送所有本地新增的标签上去,可以使用 –tags 选项:

$ git push origin --tags

这里写图片描述

4.38 git gitk

这里写图片描述

5 配置GPG

5.1 安装

$ sudo apt-get install gnupg$ sudo apt-get install rng-tools$ sudo rngd -r /dev/urandom

5.2 生成密钥

$ gpg --gen-key

这里写图片描述

$ gpg --gen-revoke tustxk@163.com$ git config --global user.signingkey E2A6CA6D

5.3 密钥管理

5.3.1 列出密钥

$ gpg --list-keys

这里写图片描述

5.3.2 输出密钥

$ gpg --armor --output public-key.txt --export tustxk@163.com

5.3.3 上传公钥

5.3.4 输入密钥

$ gpg --import public-key.txt

5.4 加密和解密

5.4.1 加密

$ gpg --recipient E2A6CA6D --output demo.en.txt --encrypt README

recipient参数指定接收者的公钥,
output参数指定加密后的文件名,
encrypt参数指定源文件。运行上面的命令后,
demo.en.txt就是已加密的文件,可以把它发给对方。

5.4.2 解密

$ gpg demo.en.txt

5.5签名

5.5.1 对文件签名

二进制签名

$ gpg --sign README

ASCII码签名

$ gpg --clearsign README

5.5.2 签名+加密

$ gpg --local-user [发信者ID] --recipient [接收者ID] --armor --sign --encrypt demo.txtlocal-user参数指定用发信者的私钥签名,recipient参数指定用接收者的公钥加密,armor参数表示采用ASCII码形式显示,sign参数表示需要签名,encrypt参数表示指定源文件。

5.5.3 验证签名

$ gpg --verify demo.txt.asc demo.txt