Git
1Git
a.是什么?
git是一个快速的,开源的,分布式的版本控制系统,也就是git有一个本地的仓库,也有一个远程的仓库。所以相对来SVN来说,更加高效,SVN是依赖与服务器端的,然而Git是有一个自己本地的仓库,即使远程的服务端出了问题,或者在没有联网的状态下也是可以正常工作的。
所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。 由于Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的。
b.能干什么?
源码备份
版本管理
协同工作
冲突解决
分支管理
里程碑管理
。。。。。
c.特点
分布式:不需要中心仓库,但是如果需要交互,那还是需要中心仓库的
Git的版本号都是生成一个哈希值,这样可以保证每个人做的不一样
性能好(因为其大部分的工作都是在本地完成),分支与合并比较简单,对比快,存储空间少
d.Git的安装
git在不同的操作系统上安装是不一样的。
windows下的安装,主要安装msyGit和TortoiseGit
安装msysGit,到官网下载git对应的版本没然后一路安装下来即可。安装后,能执行Git的shell命令,如果ls cd等,注意:忽略大小写,带命令行补全功能
msysGit Shell的中文支持
修改/etc/inputrc
#disable/enable 8bit input
set meta-flag on
在/etc/profile的最后,加上
aias ls='ls --show-control-chars'
ubuntu
apt-get install git
安装ssh
ssh-keygen -t rsa -C "xxxx@qq.com"
多个用户的配置,不同的用户提交至不同的官网,如一个提交至github.com,一个提交至其他的官网
1.ssh-keygen -t rsa -C "xxxx@qq.com" 在执行一遍,但是起一个不同的名称
2.在~/.ssh/下有 id_rsa id_rsa.pub osc osc.pub
3.在.ssh下配置创建一个config文件
Host github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa Host git.oschian.com HostName git.oschian.com User git IdentityFile ~/.ssh/os
e.Git与Svn的区别
对于SVN它是记录文件的更改信息,对于未更改的信息它是不做记录的。然而git是记录更改后的真个文件,对于没有修改的文件它是有一个指针指向原来的那个文件的。
git是一个分布式的,也就是即使远程server端宕机了,我们也是一个在本地正常工作的。
2.常用命令
git init:初始化某个目录为git管理的目录,其中有一个.git的隐藏目录,那就是本地的版本控制
git add xxx 把文件xxx添加到仓库 git add .表示将所有未添加的文件添加到仓库
git commit 把文件提交到仓库 -m "输入本次提交说明" 是将仓库中所有的文件提交
git status 查看状态
git diff 查看文件修改内容
git log a.txt查看提交信息
git log --pretty=oneline a.txt
git reset --hard HEAD^回退(一个^表示回退一步,两个^^表示回退两步。。。。 也可以用git reset --hard HEAD~加数字n表示回退n步)
如果回退很多步,就不能叫回退啦,就是穿梭啦,就得用git reflog a.txt查看id再用git reset --hard加上id
对于未add的 git checkout -- a.txt是回撤,并不是回退
对于已add但是未commit git reset HEAD a.txt可以再用git checkout -- a.txt
对于已add并且已commit git reset -hard HEAD^/或id
远程仓库
git remote add origin git@github.com:XXX/xxx.git(这条指令的意思相当于origin绑定一个远程的项目地址)
需要将XXX替换成需要提交的远程仓库的账户名
需要将xxx替换成提交的项目名
远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库
git push -u origin master 把本地仓库的所有内容推送到远程库上
master表示把当前分支master推送到远程
-u 由于远程库是空的,我们第一次推送master分支时, Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
以后每次本地提交就是git push origin master
git clone git@github.com:XXX/xxx.git
GitHub给出的地址不止一个,我们还可以使用https协议的地址,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。
使用https除了速度慢以外,还有个最大的麻烦就是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能使用https
分支
查看分支 git branch
新建分支 git branch dev
切换分支git checkout dev
合并分支git merge dev 当合并分区出现冲突时,别轻易删除文件,应进入文件对文件进行修改
删除分支git branch -d dev