赞
踩
CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统(c语言开发)
所有的版本控制系统,只能跟踪文本文件的改动,而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
使用Windows要特别注意:千万不要使用Windows自带的记事本编辑任何文本文件(会遇到很多不可思议的问题),建议下载Notepad++代替记事本
区别------------------------------------------------------
集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改。
在Linux上安装Git
$ git (看看系统有没有安装Git)
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
像上面的命令,有很多Linux会友好地告诉你Git没有安装,还会告诉你如何安装Git。
如果你碰巧用Debian或Ubuntu Linux,通过一条sudo apt-get install git就可以直接完成Git的安装,非常简单。
老一点的Debian或Ubuntu Linux,要把命令改为sudo apt-get install git-core,因为以前有个软件也叫GIT(GNU Interactive Tools),结果Git就只能叫git-core了。由于Git名气实在太大,后来就把GNU Interactive Tools改成gnuit,git-core正式改为git。
如果是其他Linux版本,可以直接通过源码安装。先从Git官网下载源码,然后解压,依次输入:./config,make,sudo make install这几个命令安装就好了。
在Mac OS X上安装Git
如果你正在使用Mac做开发,有两种安装Git的方法。
一是安装homebrew,然后通过homebrew安装Git,具体方法请参考homebrew的文档:http://brew.sh/。
第二种方法就是直接从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。
在Windows上安装Git
在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
创建版本库----------------------------------------------------------
打开“Git Bash”
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
pwd命令用于显示当前目录。在我的Mac上,这个仓库位于/Users/michael/learngit
(为了避免遇到各种问题,请确保目录名(包括父目录)不包含中文)
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
通过git init命令把这个目录变成Git可以管理的仓库
随便编写一个onegit.txt文件,内容如下:
this is a git
一定要放到learngit目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。
$ git add onegit.txt
git add告诉Git,把文件添加到仓库
$ git commit -m "this is a git"
用命令git commit告诉Git,把文件提交到仓库
-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
常用命令------------------------------------------------------------------------------
git init //初始化一个Git仓库
git status //仓库当前的状态
cat <file>//看文件内容
git diff //查看修改内容
git log //历史记录(--pretty=oneline)
git reflog //记录你的每一次命令
git diff HEAD -- <file> //查看工作区和版本库里面最新版本的区别:
vi 进入vim编辑器
在命令模式下:
ZZ/:wq 保存修改并且退出 。
:w 保存
:q! 回车后放弃修改并退出。
o,i,a都可以进入输入模式,
—管理修改------
git add <file> //注意,可反复多次使用,添加多个文件;(实际上就是把文件修改添加到暂存区)
git commit -m "提交的说明" //完成。(实际上就是把暂存区的所有内容提交到当前分支)
—版本回退-------
git reset --hard HEAD^ 历史之间穿梭 HEAD表示当前版本(上一个版本就是HEAD^,上上一个版本就是HEAD^^/HEAD~100)
—撤销修改-------
git checkout -- <file> 把<file> 文件在工作区的修改全部撤销(回到最近一次git commit或git add时的状态)(错误在工作区,没添加到)
git reset HEAD <file> 把暂存区的修改撤销掉(unstage),重新放回工作区:(错误添加到暂存区,先reset 再checkout)
—删除文件-------
git rm 用于删除一个文件
配置别名—
$ git config --global alias.st status st就表示status
添加远程仓库----------------------------------------------------------------
git remote add origin git@github.com:1367205279/repo-name.git //关联一个远程库
git push -u origin master //第一次推送master分支的所有内容
git push origin master //推送最新修改
//fatal: remote origin already exists.(报错远程起源已经存在。)
git remote rm origin 删除关联
git remote -v 查看仓库地址
远程库克隆------------------------------------------------------------------
git clone git@github.com:13672052792/repo-name.git 克隆一个本地库
分支--------------------------------------------------------------------------
git branch //查看当前分支
git branch <name> //创建分支
git checkout <name> //切换分支
git checkout -b <name> //表示创建并切换分支(git switch -c dev)
git branch -d <name> //删除分支 (-D强行删除)
git merge <name> //合并指定分支到当前分支
$ git merge --no-ff -m "merge with no-ff" dev(强制禁用Fast forward模式)
--no-ff //参数就可以用普通模式合并,合并后的历史有分支
当Git无法自动合并分支时,就必须首先解决冲突,手动编辑再提交
git log --graph --pretty=oneline --abbrev-commit //分支合并图
bug分支处理—
git stash //把当前工作现场“储藏”起来,等以后继续工作
git stash list //查看储藏了的工作
git stash apply //恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;(git stash apply stash@{0})
git stash pop //恢复的同时把stash内容也删了:
cherry-pick <commit> //把bug提交的修改“复制”到当前分支,避免重复劳动。
多人协作—
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
git rebase 可以把本地未push的分叉提交历史整理成直线;看历史提交的变化时更容易
标签—
git tag <tagname> //新建一个标签
git tag -a <tagname> -m "blablabla... //指定标签信息;
git tag //查看所有标签。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。