GIT的基本命令和名词解释
1、git init <目录> : 指定当前目录为仓库,指定后里面有个 .git目录,这个为版本库。
2、git add <file> : 增加加入仓库的文件,可反复多次使用,添加多个文件
3、git commit –m “名称”:提交到仓库目录
4、git status :显示当前仓库的状态
5、git diff <file> : 查看仓库的文件的修改情况
6、git log –pretty=oneline :显示简要信息,其中十六进制字符串是commit id (版本号)
7、git reset –hard HEAD^ :回退到上一个版本,用HEAD来代替版本次序,由近到远,前一个10版本,则为HEAD~100。
8、git reset –hard <commit id> :回退到这个commit id的版本
9、git reflog :查看历史更改的ID
10、工作区(working directory):就是你在电脑里面看到的目录,仓库目录就是一个工作区
11、版本库(repository):工作区的隐藏目录 .git 。称为Git的版本库。
版本库里面最重要的称为stage(或者叫index)的暂存区,当你提交后,git会自动创建的第一个分之,master,以及指向master的一个指针HEAD。
第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master
分支,所以,现在,git commit
就是往master
分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
即:git提交过程中,git add 将数据暂时放到暂存区,然后执行git commit 将修改提交到分支。
正确的提交方式:
第一次修改 -->git add – –> 第二次修改 – –> git add – – > git commit
所以,每次修改后,必须add 到暂存区,否则不会加入到commit 中。
12、git checkout -- <文件名> :撤销你的修改,必须加—,不加-- 的话,就成了创建了一个新分支、
13、git reset HEAD <文件名> :撤销掉暂存区里面的修改,然后加git checkout 的命令,将文件恢复到未修改的状态。
14、git rm <文件名>:在版本库中删除掉文件,并且要git commit ,如果只是在工作区将文件删除后,再次使用git checkout命令,文件就会恢复回原文件。
15、要关联一个远程库,使用命令:
git remote add origin git@server-name:path/repo-name.git;
关联后,使用命令:
git push -u origin master
第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令 git push origin master
推送最新修改;
16、要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone
命令克隆。
Git支持多种协议,包括https
,但通过ssh
支持的原生git
协议速度最快。
git clone git@github.com:windyyu/gitskills.git
17、分支的操作:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
18、git log – graph :查看分支合并图
19、
GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用。
搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt
命令就可以完成安装。
假设你已经有sudo
权限的用户账号,下面,正式开始安装。
第一步,安装git
:
$ sudo apt-get install git
第二步,创建一个git
用户,用来运行git
服务:
$ sudo adduser git
第三步,创建证书登录:
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub
文件,把所有公钥导入到/home/git/.ssh/authorized_keys
文件里,一行一个。
第四步,初始化Git仓库:
先选定一个目录作为Git仓库,假定是/srv/sample.git
,在/srv
目录下输入命令:
$ sudo git init --bare sample.git
Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git
结尾。然后,把owner改为git
:
$ sudo 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 Cloning into 'sample'... warning: You appear to have cloned an empty repository.
剩下的推送就简单了。
管理公钥
如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys
文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用Gitosis来管理公钥。
这里我们不介绍怎么玩Gitosis了,几百号人的团队基本都在500强了,相信找个高水平的Linux管理员问题不大。
管理权限
有很多不但视源代码如生命,而且视员工为窃贼的公司,会在版本控制系统里设置一套完善的权限控制,每个人是否有读写权限会精确到每个分支甚至每个目录下。因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精神,不支持权限控制。不过,因为Git支持钩子(hook),所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。Gitolite就是这个工具。
参考:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000