Git是一个分布式的版本管理系统,而SVN是一个远程集中式的版本管理系统。
在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
。
关于SSH:本地仓库可以生成SSH的秘钥(公钥+私钥),本地Git仓库和远程Git仓库之间的传输是通过SSH加密的,因此需要将公钥配置在远程仓库中。
实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。
因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦。好在Git考虑到了大家的感受,这个问题解决起来也很简单,在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
客户端安装
- linux :
yum install git
- windows:参见廖雪峰的博客
教程
常用命令
- git clone
- git remote add origin git@github.com:xxx/learngit.git
- git remote rm origin:删除已有的远程仓库;
- git push
- git push -u origin master:由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
- git push origin master
- git init
- git add <file/directory>
- git add -A 添加所有
- git commit -m <注释>
- git status
- git diff
- git log:提交历史
- git log --pretty=oneline
- git log --graph:可以看到分支合并图。
- git reset
- git reset --hard HEAD^
- git reset --hard 1094a
- git reset HEAD <file>:git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
- git reflog:命令历史
- git checkout
- git checkout -- file:丢弃工作区的修改,让这个文件回到最近一次git commit或git add时的状态。命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令。
- git rm
- git checkout -b dev:git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
- git branch dev
- git checkout dev
- git branch:查看当前分支,git branch命令会列出所有分支,当前分支前面会标一个*号。
- git branch -d dev:删除dev分支了
- git merge
- git merge dev:git merge命令用于合并指定分支到当前分支。
- git tag
- git tag:查看所有标签
- git tag v1.0:在当前分支的HEAD上打标签
- git tag v0.9 f52c633:在当前分支的指定commit上打标签
- git tag -d v0.1:删除指定标签
- git push origin <tagname>:推送某个标签到远程
- git push origin --tags:一次性推送全部尚未推送到远程的本地标签
Gogs
企业git私服使用Gogs搭建,其简单易用完档齐全、国际化做的相当不错。Gogs官网下载压缩包,解压之后直接安装:
Linux的安装
- 前台运行
./gogs web
- 后台运行
$nohup ./gogs web &
- 邮件配置
- 定时备份与恢复
- 客户端公钥配置及添加
网友评论