GIT 是一个分布式的版本管理工具
=================
====== ssh远程登录不输入密码 ======
执行ssh-keygen -t rsa 生成.ssh目录
进入目录.ssh下,将id_rsa.pub里的内容添加到远程的机子.ssh下的authorized_keys文件中(文件不存在的话就创建一个)
这样在远程登录的时候就不用输入密码
ssh-keygen -t rsa -C "youremail@example.com" github上介绍使用的方法 不用加email也可以
=================
安装git,用它的图形界面gitk,需要tcl, tk的支持,在gitk里面的File栏有Start git gui。
=================
======git init 初始化方法======
git init (个人使用)
git --bare init 初始化成裸库
git --bare init sample.git 生成本地sample库目录, 并且初始化好
=================
=======添加远程库=======
本地已建有库,把本地库推送到github上(远程库需要建立对应库),本地库和远程库相互关联.
git remote add origin git@github.com:xxx/xxx.git
git push --set-upstream origin master
=================
=======克隆远程库=======
git clone git@github.com:xxx/xxx.git
# 当远程库文件大于1G时,会出现问题,可以考虑只拉取最近一次的提交,这样下载就不会有问题。
git clone --depth=1
centos git clone 报错 fatal: HTTP request failed 解决办法
yum update -y nss curl libcurl # 不确定是不是要干脆升级到centos7
git默认拒绝了push操作,需要进行设置,修改.git/config 或者.gitconfig文件添加如下代码:
[receive]
denyCurrentBranch = ignore
=================
别名alias 比如用git st 代替 git status
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.mr merge
=================
======基本使用======
提交修改到暂存区: git add file1 撤消操作: git checkout -- file1
从暂存区提交版本到库: git commit file1 撤消操作: git reset HEAD file1
查看状态: git status
版本回退
git reset --hard HEAD^
git reset --hard 版本号 版本号可以只输入前几位,git会自动查找,一般可以输7位
--hard 版本指针回退到指定版本, 文件也回退到指定版本
--soft 版本指针回退到指定版本, 文件保持不变,个人感觉没什么意义
git reset HEAD file 取消单个文件的git add
HEAD 表示最新版本, HEAD^ 表示上一个版本, HEAD^^表示上上个版本
HEAD~100表示向上100个版本
git reflog 会记录版本的每一次变化(提交&回退等),用于很方便的版本回退工作。
git log
git log --oneline 显示的log信息以单行显示
git log -1 显示最近1次 log
git log -2 显示最近2次 log
=================
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
git push origin :branch-name (如果把本地分支传到远程分支,删除远程分支需要此句,冒号前空格不可少)
合并分支
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息.
git merge --no-ff -m "merge message with no-ff" dev
BUG分支
用于暂存现场的环境, 一般是用于工作干到一半,代码不能提交,但是又需要分析另外一个BUG,使用如下命令
git stash 把现场环境保存起来,本地恢复成干净的分支
git stash pop 恢复刚才保存起来的现场
=================
git 全局忽略.svn目录
编辑~/.gitignore_global文件,添加如下行
.svn 忽略.svn目录
*~ 忽略以~结尾的文件
执行命令 git config --global core.excludesfile ~/.gitignore_global
=================
=======搭建Git服务器=======
准备一台运行Linux的机器
第一步,创建git用户,用来运行git服务:
$ adduser git
第二步,创建证书登录:
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
第三步,初始化Git仓库:
先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:
$ git init --bare sample.git
Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:
$ chown -R git:git sample.git
第四步,禁用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每次一登录就自动退出。
第五步,克隆远程仓库:
现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:
$ git clone git@server:/srv/sample.git
剩下的推送就简单了。
====== git配置文件 ======
.gitconfig
[push]
default = current
[receive]
denyCurrentBranch = ignore
[alias]
co = checkout
ci = commit
br = branch
st = status
mr = merge
[user]
name = xxx
email = xxx@xxx.com
[core]
excludesfile = ~/.gitignore_global
[http]
postBuffer = 10737418240