github的简单使用
git config --global user.name "qiu"
git config --global user.email "xx@xx.com"
初始化
git init
添加文件
git add .
提交
git commit - m '提交的说明'
生成ssh秘钥
ssh-keygen 会在 ~/.ssh/目录下生成 ,id_rsa私钥 ,id_rsa.pub公钥
github-->settings--> SSH-Keys 添加key(将公钥 id_rsa.pub内填入key中)
连接github
ssh -T
将本地git仓库推送到gitHub上
git remote add origin git@github.com:用户名/项目.git
git push origin master
========================================
git的一些信息设置
git config --global user.name "xx"
git config --global user.email "xx@xx.com"
git config --global color.ui auto 色彩设置
git config --global alias.co checkout 别名设置,本例中把 checkout 设置位co
git config --global core.quotepath off windows下使用git bash 含非 ASCII 字符的文件名会显示为 "\346\226\260\350\246..." 。若设定如下,就可以让含非 ASCII 字符的文件名正确显示了。
别名:
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.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
--global 正对当前用户,不加指对当前仓库起作用
仓库配置文件放在 .git/config
用户配置文件放在用户主目录下的 .gitconfig ,可以在配置文件中修改
git init 初始化 会出现.git目录
.git目录是版本库(repository) 、当前项目目录工作区(working directory)
git add file 实际把文件添加到暂存区(index 或 stage)
git commit -m "" 把暂存区的所有内容提交到当前分支
git status 查看状态
git diff <file> 可以查看没有被add的,修改那些内容
git 版本回退
git log --pretty=oneline 单行查看那commit_id, 可以加上--graph
git reset --hard HEAD^ HEAD表示当前版本 HEAD^表示上一个版本 HEAD^^表示上上个版本 HEAD~100上100个版本
git reset --hard commit_id
git reflog 查看历史命令 (最后的保险)
git checkout -- file 撤销工作区的的修改或删除 ,如果已经添加到暂存区,先进 git reset HEAD file ,然后在进行上一步
远程仓库
ssh-keygen -t rsa -C “your@example.com”
git remote add origin git@github.cm:qiuhoude/xxx.git 远程仓库的名称叫origin ,也可以是其他的
git remote 查看远程库 git remote -v 更加详细
git remote remove <repository_name> 删除远程库的
git push -u origin master -u代表update
我们第一次推送master 分支时,加上了-u 参数,Git不但会把本地的master 分支内容推送的远程新的master 分支,还会把本地的master 分支和远程的master 分支关联起来,在以后的推送或者拉取时就可以简化命令
以后的推送命令可以使用 git push origin master
git pull 从远程仓库抓取
git branch --set--upstream dev origin/dev 和远程库的分支建立链接
git checkout -b dev origin/dev 创建本地分支和远程分支
验证是否连接
ssh -T -o "VerifyHostKeyDNS yes" (正对github)
git clone xxx.git 克隆仓库到本地,支持https 和 ssh协议,但是ssh支持原生的git协议速度最快
分支管理
git 鼓励大量使用分支
git branch <name> 创建分支分支
git checkout -b <name>创建并切换分支
git branch 查看分支
git checkout <name> 切换分支
git merge <name> 合并某个分支到当前分支来
git branch -d <name> 删除分支
git branch -D <name> 强制删除分支
分支管理策略:
git 在合并分支时会默认使用Fast forward模式,此模式在删除分支后会丢掉分支信息
所以在合并分支时 使用 --no--ff
git merge --no--ff -m '<commit_message>' <branch_name>
分支策略:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
bug分支:
git stash 可以储存当前状态, 如果是新建文件需要add到暂存区才能进行stash
git stash list 查看当前状态列表
git stash apply stash@{0} 回复指定的状态,但不删除stash的内容
git stash drop 删除stash内容
git stash pop 回复并删除stash
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
修改完master分支bug ,要更新到当前分支,可以先把master分支merge到当先分支,如果有冲突先解决冲突然后,在把dev分支merge到master上
标签管理
发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
git tag v1.0 创建一个表现,默认标签是打在最新提交的commit上
git tag <tag_name> commit_id 如果要打在之前的commit上,可以在后面加上commit_id
git tag -a <tag_name> -m '<tag_message>' commit_id 添加带注解标签,-a指定标签名,-m指定说明文字
git tag -s <tag_name> -m '<tag_message>' commit_id -s表示私钥标签 , 签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错
git tag 查看标签列表,可以加上-n 显示标签的注解
git show <tag_name> 查看标签内容
git tag -d <tag_name> 删除标签,如果要删除远程仓库标签,先要删除本地标签,然后 git push origin :refs/tags/<tag_name>
git push origin <tag_name> 推送tag到远程仓库
git push origin --tags 推送所以tag到远程仓库
git的忽略文件
在项目根目录下创建 .gitignore 文件,并提交到git中,所以的ignore文件
创建git服务器
1 安装git sudo apt-get install git
2 添加git用户用于运行git sudo adduser git
3 创建证书,先切换到 git用户下 su git --> ssh-keygen -t ras -C '<email_adress>' --> 创建 /home/git/.ssh/authorize_key文件,并加入需要登陆的公钥,一行一个。
4 初始化git仓库 sudo git init --bare /srv/<repository>.git (git仓库一般是.git结尾)
5 修改仓库的owner sudo chown -R git:git /srv/<repository>.git
6 禁用shell登陆 在/etc/passwd 中找到
git:x:1001:1001:,,,:/home/git:/bin/bash
改成
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell高级的公钥管理可以使用gitosis
高级的权限管理 gitolite