砖3 GIT学习

今天差点玩过了,那怎么可以呢?和师姐聊天很开心

回想了下,今天好像效率有点低

在说GIT之前,先提一下CVS、SVN

CVS(Concurrent Version System协同版本控制系统)是一个C/S系统,是一个常用的代码版本控制软件。主要在开源软件管理中使用。与它相类似的代码版本控制软件subversion。主要用于多人开发环境下的源码维护。

CVS工作思路:

在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序。由源代码管理员统一管理这些源程序。每个用户在使用源代码库之前,首先要把源代码库里的项目文件下载到本地,然后用户可以在本地任意修改,最后用CVS命令进行提交,由CVS源代码库统一管理修改。这样,就好像只有一个人在修改文件一样,既避免了冲突,又可以做到跟踪文件变化等。

SVN(subversion),相对于的RCSCVS,采用了分支管理系统,近年来崛起的版本管理软件,目标取代CVS互联网上免费的版本控制服务多基于Subversion

CVSSVN都属于Centralized Version Control Systems CVCS集中化版本控制系统

 

三、GIT

1.GIT是什么?

GIT是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理,是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Distributed Version Control System简称DVCS

GIT(the stupid content tracker) Git最为出色的是它的合并追踪(merge tracing)能力。

GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。Git 使用SHA-1 算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个SHA-1 哈希值,作为指纹字符串。该字串由40 个十六进制字符(0-9 a-f)组成。???这到底是怎么回事,还没弄清楚

2.GIT的功能

SubversionCVS等,他们使用“增量文件系统” (Delta Storage systems就是说它们存储每次提交(commit)之间的差异。Git正好与之相反,它会把你的每次提交的文件的全部内容(snapshot)都会记录下来。

从一般开发者的角度来看git有以下功能:

(1):从服务器上克隆数据库(包括代码和版本信息)到单机上。

(2):在自己的机器上创建分支,修改代码。

(3):在单机上自己创建的分支上提交代码。

(4):在单机上合并分支。

(5):新建一个分支,把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。

(6):生成补丁(patch),把补丁发送给主开发者。

(7):看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。

(8):一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。

有点问题,回头再看。

基本的Git 工作流程如下所示:

(1). 在工作目录中修改某些文件。

(2). 对这些修改了的文件作快照,并保存到暂存区域。

(3). 提交更新,将保存在暂存区域的文件快照转储到git 目录中。

Git 管理项目时,文件流转的三个工作区域:Git 的本地数据目录,工作

目录以及暂存区域。

3.GIT命令   把书上的命令都记下了,才发现原来不用,只要记住常用的那几个就可以了。生活也是如此,不必每件事都做得那么好,不必让每个人都觉得你好。

git clone : 一次Git 克隆会建立你自己的本地分支master 和远程分支origin/master,它们都指向origin/master 分支的最后一次提交.git clone git@gitserver:test.git mygit

git add:跟踪新文件、把已跟踪的文件放到暂存区、还能用于合并时把有冲突的文件标记为已解决状态

git status:检查当前文件状态

创建一个名为.gitignore 的文件,列出要忽略的文件模式,cat .gitignore

Git diff:比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。 

Git diff --cached:比较的是已经暂存起来的文件和上次提交时的快照之间的差异

git commit :提交-m 参数后跟提交说明的方式

git commit -a: 会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add 步骤,跳过使用暂存区域。

git rm --cached 文件名:把文件从Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。换句话说,仅是从跟踪清单中删除,但不删除文件。

git rm -f: 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项-f(译注:即force 的首字母),以防误删除文件后丢失修改的内容。

这里加rm -rf file_name:强制删除文件

Git mv file_from file_to :对文件改名

相当于 

$ mv README.txt README

$ git rm README.txt

$ git add README 

git log: 查看提交历史 -p 选项展开显示每次提交的内容差异,用-2 则仅显示最近的两次更新;--stat,仅显示简要的增改行数统计

-(n) 仅显示最近的条提交

--since, --after 仅显示指定时间之后的提交。

--until, --before 仅显示指定时间之前的提交。

--author 仅显示指定作者相关的提交。

--committer 仅显示指定提交者相关的提交。

--pretty 选项,可以指定使用完全不同于默认格式的方式展示提交历史。

git log --pretty=oneline: 将每个提交放在一行显示,这在提交数很大时非常有用。

format,可以定制要显示的记录格式,这样的输出便于后期编程提取分析,例如:$ git log --pretty=format:"%h - %an, %ar : %s"

如果刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行--amend 提交:

$ git commit -m 'initial commit'

$ git add forgotten_file

$ git commit --amend

Git reset HEAD <file>:取消已经暂存的文件

Git checkout --<file>:取消对文件的修改

git remote :列出每个远程库的简短名字,在克隆完某个项目后,至少可以看到一个名为origin 的远程库,Git 默认使用这个名字来标识你所克隆的原始仓库。-v 选项,显示对应的克隆地址。

git remote add [shortname] [url]:添加远程仓库

git fetch [remote-name]:从远程仓库抓取数据到本地

默认情况下git clone 命令本质上就是自动创建了本地的master 分支用于跟踪远程仓库中的master 分支(假设远程仓库确实有master 分支)。所以一般我们运行git pull,目的都是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中当前分支。

git push [remote-name] [branch-name]:将本地仓库中的数据推送到远程仓库。例如:git push origin master

git remote show [remote-name] :查看某个远程仓库的详细信息

git remote rename :命令修改某个远程仓库的简短名称

git remote rm:移除对应的远端仓库

git tag:列出已有的标签

git tag -a tag_name -m 'my version 1.4':创建一个含附注类型的标签,-a 指定标签名字,-m 指定对应的标签说明

git show :查看相应标签的版本信息,并连同显示打标签时的提交对象

git push origin [tagname]:分享标签,如果要一次推送所有(本地新增的)标签上去,可以使用--tags 选项

git config: 为命令设置别名,例如:git config --global alias.br branch

分支:

Git会使用master 作为分支的默认名字。在若干次提交后,你其实已经有了一个指向最后一次提交对象的master 分支,它在每次提交的时候都会自动向前移动。

Git 是如何知道你当前在哪个分支上工作的呢?其实答案也很简单,它保存着一个名为HEAD 的特别指针。在Git 中,它是一个指向你正在工作中的本地分支的指针。git branch 命令,仅仅是建立了一个新的分支,但不会自动切换到这个分支中去。要切换到其他分支,可以执行git checkout 命令。我们现在转换到新建的testing 分支,$ git checkout testing这样HEAD 就指向了testing 分支。

git checkout branch_name:只是转换HEAD指向的分支

git checkout -b branch_name:新建分支,HEAD指针并切换到该分支 

git branch -d branch_name:删除分支

git branch:不加任何参数,列出所有分支

git branch -v :查看各个分支最后一次commit 信息

git branch -merge :查看哪些分支已被并入当前分支

git branch --no-merged :查看尚未合并的工作:

远程分支(remote branch)是对远程仓库状态的索引,标记你上次连接远程仓库时上面各分支的位置。

git fetch origin 来进行同步。

git push (remote_name) (branch_name):推送我的branch_name本地分支,到远程仓库的--分支。

git push [远程名] :[分支名]:删除远程分支

git remote add :

git pull:执行两个操作,它从远程分支(remote branch)抓取修改 的内容,然后把它合并进当前的分支

合并分支:1.快进合并,没有什么分歧需要解决,只是简单地把指针前移2.合并提交,因为祖先不只一个

git checkout master 

git merge branchename: branchname合并到当前工作分支

把一个分支整合到另一个分支的办法有两种:merge(合并) 和rebase(衍合)

git checkout experiment

git rebase master

它的原理是回到两个分支(你所在的分支和你想要衍合进去的分支)的共同祖先,提取你所在分支每次提交时产生的差异(diff),把这些差异分别保存到临时文件里,然后从当前分支转换到你需要衍合入的分支,依序施用每一个差异补丁文件。

git rebase [主分支] [特性分支]:先检出特性分支,然后在主分支上重演。

4.GIT的原理

Git 是一套内容寻址文件系统。原理明天弄清楚,更。以后用到再更吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值