40. 发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
41.
a. 切换到需要打标签的分支上
git checkout master
b. git tag <name> 就打一个新标签
git tag v1.0
c. git tab 查看所有标签
42. 默认标签是打在最新提交的commit上的。如果想要打在历史提交的commit上
a. git log --pretty=oneline --abbrev-commit //显示历史提交
b. git tab v0.9 9988888 //9988888时commit id
43. 标签是按字母排序的,可以用git show <tagname> 查看标签信息
git show v1.0
44. git tag -a v0.1 -m “versino 0.1 released” 56789 //创建带有说明的标签,-a指定标签名,-m指定说明文字
45. -s 用私钥签名一个标签
git tag -s -v0.2 -m “signed version 0.2 released” 724897
签名采用PGP签名,因此,首先必须安装gpg(GunPG),如果没有找到gpg,或者没有gpg密钥对,就会报错
46. git tab <name> 创建一个新标签 默认为HEAD 也可以指定一个commit id
git tag -a <tagname> -m “lalalala” 指定标签信息
git tag -s <tagname> -m “lalalala” 用PGP签名标签
git tag 查看所有标签
git show <tagname> 查看标签信息
47. 删除标签 git tag -d v0.1
因为创建的标签只存储在本地,不会自动推送到远程,所以,打错的标签可以在本地安全删除
48. git push origin <tagname> 推送某个标签到远程
git push origin --tags 一次性推送全部未推送到远程的本地标签
49. 如果标签已经推送到远程,要删除远程标签
a. 先从本地删除 git tag -d v0.9
b. 然后从远程删除 git push origin :refs/tags/v0.9
登录Github查看哪是否真的从远程库删除了标签
50.
git push origin <tagname> 推送一个本地标签
git push origin --tags 推送所有未推送过的本地标签
git tag -d <tagname> 删除一个本地标签
git push origin :refs/tags/<tagname> 删除一个远程标签
51. 参与一个开源项目 在项目主页 点击fork就在自己账号下克隆了一个仓库,从自己的账号下clone。只能从自己的账号下clone才能推送修改。自己修复bug或者添加新功能后,向开源项目的官方发起一个pull request
52. 有时候,你必须把某些文件放在git工作目录里,但又不能提交它们,比如保存了数据库密码的配置文件等等。在git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,git就会自动忽略这些文件
不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore
忽略文件的原则是:a. 忽略操作系统自动生成的文件,如缩略图等;
b. 忽略编译生成的中间文件、可执行文件的功能。
c. 忽略带有敏感信息的配置文件,比如存放密码的配置文件
最后把.gitignore提交到git。检验.gitignore的标准是git status命令是不是说”working directory clean”
53. 自定义别名
git config --global alias.st status //以后st就代表status 命令
其他的一些别名:co == checkout
ci == commit
br == branch
54. 配置git的时候, 加上--global是针对当前用户起作用,不加就是针对当前仓库起作用
每个仓库的git配置文件都在.git/config文件中
当前用户的git配置文件在用户主目录下的.gitconfig中
55. 搭建git服务器
用Linux的机器,例如ubunte或者debian
a. 安装git
sudo apt-get install git
b. 创建git用户,用来运行git服务
sudo adduser git
c. 创建证书登录
收集所有需要登录的用户的公钥,就是它们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个
d. 初始化git仓库
先选定一个目录作为git仓库, 在该目录下
sudo git init —-bare sample.git
git就会创建一个裸仓库,裸仓库没有工作去,因为服务器上的git仓库纯粹是为了共享,所以不让用户直接登录到服务器上改工作区,并且服务器上的git仓库通常以.git结尾。然后把owner改成git
sudo chown -R git:git sample.git
e. 禁用shell登录
出于安全考虑,第二步创建的git用户不允许登录shell,通过/etc/passwd文件完成。找到类似下面的一行
git:x:1001:1001:,,,:/home/git/bin/bash
改为 git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出
f. 克隆远程仓库
现在就可以git clone克隆远程仓库,在各自的电脑运行了
56. 管理公钥
如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用Gitosis来管理公钥。
57. 管理权限
因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精神,不支持权限控制。不过,因为Git支持钩子(hook),所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。Gitolite就是这个工具。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
41.
a. 切换到需要打标签的分支上
git checkout master
b. git tag <name> 就打一个新标签
git tag v1.0
c. git tab 查看所有标签
42. 默认标签是打在最新提交的commit上的。如果想要打在历史提交的commit上
a. git log --pretty=oneline --abbrev-commit //显示历史提交
b. git tab v0.9 9988888 //9988888时commit id
43. 标签是按字母排序的,可以用git show <tagname> 查看标签信息
git show v1.0
44. git tag -a v0.1 -m “versino 0.1 released” 56789 //创建带有说明的标签,-a指定标签名,-m指定说明文字
45. -s 用私钥签名一个标签
git tag -s -v0.2 -m “signed version 0.2 released” 724897
签名采用PGP签名,因此,首先必须安装gpg(GunPG),如果没有找到gpg,或者没有gpg密钥对,就会报错
46. git tab <name> 创建一个新标签 默认为HEAD 也可以指定一个commit id
git tag -a <tagname> -m “lalalala” 指定标签信息
git tag -s <tagname> -m “lalalala” 用PGP签名标签
git tag 查看所有标签
git show <tagname> 查看标签信息
47. 删除标签 git tag -d v0.1
因为创建的标签只存储在本地,不会自动推送到远程,所以,打错的标签可以在本地安全删除
48. git push origin <tagname> 推送某个标签到远程
git push origin --tags 一次性推送全部未推送到远程的本地标签
49. 如果标签已经推送到远程,要删除远程标签
a. 先从本地删除 git tag -d v0.9
b. 然后从远程删除 git push origin :refs/tags/v0.9
登录Github查看哪是否真的从远程库删除了标签
50.
git push origin <tagname> 推送一个本地标签
git push origin --tags 推送所有未推送过的本地标签
git tag -d <tagname> 删除一个本地标签
git push origin :refs/tags/<tagname> 删除一个远程标签
51. 参与一个开源项目 在项目主页 点击fork就在自己账号下克隆了一个仓库,从自己的账号下clone。只能从自己的账号下clone才能推送修改。自己修复bug或者添加新功能后,向开源项目的官方发起一个pull request
52. 有时候,你必须把某些文件放在git工作目录里,但又不能提交它们,比如保存了数据库密码的配置文件等等。在git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,git就会自动忽略这些文件
不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore
忽略文件的原则是:a. 忽略操作系统自动生成的文件,如缩略图等;
b. 忽略编译生成的中间文件、可执行文件的功能。
c. 忽略带有敏感信息的配置文件,比如存放密码的配置文件
最后把.gitignore提交到git。检验.gitignore的标准是git status命令是不是说”working directory clean”
53. 自定义别名
git config --global alias.st status //以后st就代表status 命令
其他的一些别名:co == checkout
ci == commit
br == branch
54. 配置git的时候, 加上--global是针对当前用户起作用,不加就是针对当前仓库起作用
每个仓库的git配置文件都在.git/config文件中
当前用户的git配置文件在用户主目录下的.gitconfig中
55. 搭建git服务器
用Linux的机器,例如ubunte或者debian
a. 安装git
sudo apt-get install git
b. 创建git用户,用来运行git服务
sudo adduser git
c. 创建证书登录
收集所有需要登录的用户的公钥,就是它们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个
d. 初始化git仓库
先选定一个目录作为git仓库, 在该目录下
sudo git init —-bare sample.git
git就会创建一个裸仓库,裸仓库没有工作去,因为服务器上的git仓库纯粹是为了共享,所以不让用户直接登录到服务器上改工作区,并且服务器上的git仓库通常以.git结尾。然后把owner改成git
sudo chown -R git:git sample.git
e. 禁用shell登录
出于安全考虑,第二步创建的git用户不允许登录shell,通过/etc/passwd文件完成。找到类似下面的一行
git:x:1001:1001:,,,:/home/git/bin/bash
改为 git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出
f. 克隆远程仓库
现在就可以git clone克隆远程仓库,在各自的电脑运行了
56. 管理公钥
如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用Gitosis来管理公钥。
57. 管理权限
因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精神,不支持权限控制。不过,因为Git支持钩子(hook),所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。Gitolite就是这个工具。