1.环境搭建(linux,windows 请自行百度):
搭建成功后,通过 git --version 查看git 版本
2.git 配置:
用户名 git config --global user.name “username”
邮箱 git config --global user.eamil "[email protected]"
编辑器 git config --global core.editor vim
颜色 git config --global color.ui true
别名 git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'
git config --global alias.last 'log -1'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue)<%an>%Creset' --abbrev-commit"
其他等等......
git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置
忽略特殊文件: 创建.gitignore文件,添加添加不想加入git管理中的文件名(带项目工程路径)
忽略文件的原则是:
1).忽略操作系统自动生成的文件,比如缩略图等;
2).忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
3). 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
最后一步就是把.gitignore也提交到Git,就完成了!当然检验.gitignore的标准是 git status命令是不是说“working directory clean”。
所有配置文件可以直接在线浏览:https://github.com/github/gitignore
3.概念:
工作区:在电脑里能看到的目录
暂存区stage(或者叫index):add操作后的修改存放位置
版本库:工作区有一个隐藏目录“.git”,这个不算工作区,而是Git的版本库。
HEAD:表示当前版本,也就是当前分支的最新的提交
上一个版本就是HEAD^,上上一个版本就是HEAD^^,
当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
4.常用操作:
git add filename1 filename2
git add .
git commit
git commit -m "comment"
git checkout -- file 丢弃file 最近一次的add修改(没有--就是切换分支的命令了)
git rm test.txt
git init 初始化仓库,生成.git目录
git log -2 查看最近两次提交记录
git log --pretty=oneline
git log --graph
git diff
git diff HEAD -- file 查看工作区和版本库里面最新版本的区别
git reset --hard commitID 回到commitID 前的版本
git reflog 记录每次git操作命令
使用git reset --hard commitID之后,再想恢复到原先的提交的话,只要找到对应的commitID,可以通过git reset --hard commitID 回到对应的版本
git stash 本地代码不成熟,暂时不打算提交,又需要在这部分修改之前的代码基础上做其他事,可以先将这部分修改储存起来,将来继续做这部分修改的时候再取出来
git stash list 查看目前被存储起来的修改项列表
git stash pop 从储存列表的最顶部一次记录恢复,但是最顶部的一次存储记录会被删除
git stash apply 从储存列表的最顶部一次记录恢复,但是最顶部的一次存储记录依然保存
git stash drop 删除最顶部的一次存储记录
5.生成公钥和秘钥(创建SSH Key):
生成home目录下.ssh目录下的公钥和秘钥
$ ssh-keygen -t rsa -C "[email protected]"
生成id_rsa和id_rsa.pub这两个文件,其中id_rsa.pub是公钥,id_rsa是秘钥
6.分支:
git checkout -b dev 创建dev分支,然后切换到dev分支:
相当于以下两条命令:
git branch dev
git checkout dev
git merge dev 在当前分支合并dev分支的提交
git branch -d dev 删除分支
git branch -D dev 强制删除分支
通常,合并分支支时,如果可能,Git会用“Fast forward”模式,但这种模式下,删除分支后,会丢掉分支信息。
git branch -vv 查看分支具体信息(包括与远程分支的关系)
git merge --no-ff -m "merge with no-ff" other-branch-name 合并分支时,加上 --no-ff 参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
git branch -a 查看所有分支
git push origin master 推送分支,master为本地分支,origin为远程分支的简称(origin为git remote add的时候指定)
git pull 将远程分支代码拉下来并合入本地分支
git checkout -b dev origin/dev 创建本地分支dev,并关联远程分支origin/dev (origin为git remote add的时候指定)
git branch --set-upstream dev origin/dev 设置本地分支dev关联远程分支origin/dev
7.分支注意点:
master分支:稳定分支,发布使用
dev,feature分支: 添加新功能,新特性,在测试稳定后,合入到master分支
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。
.git/config 文件部分内容如下: cat .git/config
[branch "master"]
remote = origin
merge = refs/heads/master
8.远程仓库:
git remote add remote_depository_shortName https://github.com/xxxxx/learngit.git 添加远程仓库(以个人github为例),remote_depository_shortName 如origin
git remote 查看远程分支
git remote -r 查看远程分支
git remote -v 显示更详细的信息,如果没有推送权限,就看不到push的地址。
git clone https://github.com/xxxxx/gitskills.git 从远程库克隆, Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
9.标签管理:
git tag v1.0 在本地commitID基础上创建tag,取名v1,0
git tag 查看所有tag,标签不是按时间顺序列出,而是按字母排序的。
git show tagname 查看标签信息:(即tag对应commitID的信息)
git tag v2.0 commitID 在源码对应的commitID提交基础上创建tag
git tag -d v1.0 删除标签
git tag -a 1.0 -m "version 0.1 released" commitID 创建带有说明的标签,用-a指定标签名,-m指定说明
git push origin v1.0 推送某个标签v1.0到远程origin
git push origin --tags 一次性推送全部尚未推送到远程的本地标签:
删除远程标签:(1) git tag -d v1.0 从本地删除 (2) git push origin :refs/tags/v1.0 从远程删除
10.github使用:
(1)注册
(2)添加本地公钥到github的ssh key中
(3)创建项目,开始工作
fork其他人的项目到自己的github中,然后从自己的github上clone代码,那么客户端就可以推送代码到github上了
(4)如果你希望类似bootstrap的官方库能接受你的修改,你就可以在GitHub上发起一个pull request。当然,对方是否接受你的pull request就不一定了。
11.搭建自己的git服务器:
(1)linux机器, 如ubuntu,debian系统
(2)安装git: $ sudo apt-get install git
(3)创建一个git用户,用来运行git服务: $ sudo adduser git
(4)创建证书登录: 收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里里,一行一个。
(5)初始化Git仓库: 选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:
$ sudo git init --bare sample.git
把owner改为git: $ sudo chown -R git:git sample.git
(6)禁用shell登录: 出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。
找到类似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
(7)克隆远程仓库:
$ git clone git@server:/srv/sample.git
(8)管理公钥:可以用Gitosis来管理公钥。
(9)管理权限:Git也继承了开源社区的精神,不支持权限控制。
因为Git支持钩子(hook),所以, 可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。Gitolite就是这个工具。