songziming / hippocampus

MIT License
0 stars 0 forks source link

Git使用(1) #4

Open songziming opened 9 years ago

songziming commented 9 years ago

由于wiki不能进行评论,将wiki中的内容搬到这里

为了便于理解Git的相关概念,有必要从版本管理讲起。

版本控制(Version Control)

版本控制系统是一个软件,它能够将一个或多个文件的修改记录下来,方便快速地恢复到某个特定版本。在一定程度上,版本控制工具有些类似于文件备份工具,二者都是创建多个快照,并允许用户恢复到某个从前的状态,区别在于版本控制工具按版本记录,备份工具按时间记录,同时版本控制工具提供了更适合开发的功能。

理论上,任何类型的文件都可以用于版本管理系统,但Git这类工具对文本文件的效率要高一些。

diff与patch

Linux内核由全世界的程序员进行开发,这样大型的工程是如何进行版本控制的,关键就在diff和patch。diff是unix系统的一个命令,能够发现两个文件之间的区别,并生成diff文件。patch是另一个命令,它可以将diff生成的文件作为补丁文件应用在旧文件上。

例如,某项目只包含一个文件a.txt,某人对其进行了修改,我们将修改后的文件称作b.txt,那么此人通过命令diff -u a.txt b.txt > a.patch就生成了一个名为a.patch的diff文件。如果此人想把自己的修改告诉别人,只需要将diff文件a.patch发送给他人,其他开发者只要执行命令patch a.txt < a.patch,这样a.txt就自动变成了b.txt。

本地版本控制(Local Version Control)

直到今天,有许多人的版本控制方法仍然是将文件整体复制到一个文件夹下。这样做非常简单,但是也非常原始,程序员很容易忘记当前版本放在哪一个文件夹下。为此,早起程序员开发出了本地版本控制系统(local VCS),它利用diff记录不同版本之间做了哪些修改,并且可以迅速切换到任意版本。

集中式版本控制系统

当项目由多人开发时,本地VCS就不管用了,因此,人们自然地想到了集中式VCS。集中式VCS中,代码存储在中心服务器上,所有开发者对代码进行的修改都直接提交到服务器上。由于只有一个代码仓库,因此不会有冲突的问题。然而,也是因为只有一个代码仓库,信息丢失、数据损坏的风险较大。

分布式版本控制系统

Git就是一个典型的分布式版本管理系统。分布式VCS就相当于很多个松散耦合的本地VCS。在集中式VCS中,一个程序员修改文件A,另一个程序员就不能修改它,因为只有一个代码仓库。分布式VCS中,则没有这个问题,每人电脑上都有一个代码仓库的镜像,每人做的修改都是在本地仓库进行修改。

如果仅仅在本地仓库修改,那么与本地VCS没有区别,分布式VCS一个重要功能就是可以进行分支合并。Git中,有“上游仓库”这个概念,可以将本地仓库的修改push到上游仓库,并由他人pull到各自的本地仓库,从而实现代码共享。

LiangMingyang commented 9 years ago

简直赞!虽然我觉得应该是我们每次怎么用,流程自以及注意事项……

发自Thor

Song Ziming notifications@github.com编写:

由于wiki不能进行评论,将wiki中的内容搬到这里

为了便于理解Git的相关概念,有必要从版本管理讲起。

版本控制(Version Control)

版本控制系统是一个软件,它能够将一个或多个文件的修改记录下来,方便快速地恢复到某个特定版本。在一定程度上,版本控制工具有些类似于文件备份工具,二者都是创建多个快照,并允许用户恢复到某个从前的状态,区别在于版本控制工具按版本记录,备份工具按时间记录,同时版本控制工具提供了更适合开发的功能。

理论上,任何类型的文件都可以用于版本管理系统,但Git这类工具对文本文件的效率要高一些。

diff与patch

Linux内核由全世界的程序员进行开发,这样大型的工程是如何进行版本控制的,关键就在diff和patch。diff是unix系统的一个命令,能够发现两个文件之间的区别,并生成diff文件。patch是另一个命令,它可以将diff生成的文件作为补丁文件应用在旧文件上。

例如,某项目只包含一个文件a.txt,某人对其进行了修改,我们将修改后的文件称作b.txt,那么此人通过命令diff -u a.txt b.txt > a.patch就生成了一个名为a.patch的diff文件。如果此人想把自己的修改告诉别人,只需要将diff文件a.patch发送给他人,其他开发者只要执行命令patch a.txt < a.patch,这样a.txt就自动变成了b.txt。

本地版本控制(Local Version Control)

直到今天,有许多人的版本控制方法仍然是将文件整体复制到一个文件夹下。这样做非常简单,但是也非常原始,程序员很容易忘记当前版本放在哪一个文件夹下。为此,早起程序员开发出了本地版本控制系统(local VCS),它利用diff记录不同版本之间做了哪些修改,并且可以迅速切换到任意版本。

集中式版本控制系统

当项目由多人开发时,本地VCS就不管用了,因此,人们自然地想到了集中式VCS。集中式VCS中,代码存储在中心服务器上,所有开发者对代码进行的修改都直接提交到服务器上。由于只有一个代码仓库,因此不会有冲突的问题。然而,也是因为只有一个代码仓库,信息丢失、数据损坏的风险较大。

分布式版本控制系统

Git就是一个典型的分布式版本管理系统。分布式VCS就相当于很多个松散耦合的本地VCS。在集中式VCS中,一个程序员修改文件A,另一个程序员就不能修改它,因为只有一个代码仓库。分布式VCS中,则没有这个问题,每人电脑上都有一个代码仓库的镜像,每人做的修改都是在本地仓库进行修改。

如果仅仅在本地仓库修改,那么与本地VCS没有区别,分布式VCS一个重要功能就是可以进行分支合并。Git中,有“上游仓库”这个概念,可以将本地仓库的修改push到上游仓库,并由他人pull到各自的本地仓库,从而实现代码共享。


Reply to this email directly or view it on GitHub: https://github.com/songziming/hippocampus/issues/4

wjfwzzc commented 9 years ago

不是要科普,而是要讲怎么用,并确定一个规范……

王剑锋 Jeffrey Wang

北京航空航天大学 软件学院 2012级本科生 | Undergraduate of School of Software, Beihang University

E-mail:wjfwzzc@gmail.com Skype:Jeffreywzzc Mobile:+86 156 5290 9590

Address:北京市昌平区沙河高教园南三街9号 | No.9 Nansan Street, Shahe Higher Education Park, Changping District, Beijing Zip Code:102206

发自我的小米手机

Song Ziming notifications@github.com编写:

由于wiki不能进行评论,将wiki中的内容搬到这里

为了便于理解Git的相关概念,有必要从版本管理讲起。

版本控制(Version Control)

版本控制系统是一个软件,它能够将一个或多个文件的修改记录下来,方便快速地恢复到某个特定版本。在一定程度上,版本控制工具有些类似于文件备份工具,二者都是创建多个快照,并允许用户恢复到某个从前的状态,区别在于版本控制工具按版本记录,备份工具按时间记录,同时版本控制工具提供了更适合开发的功能。

理论上,任何类型的文件都可以用于版本管理系统,但Git这类工具对文本文件的效率要高一些。

diff与patch

Linux内核由全世界的程序员进行开发,这样大型的工程是如何进行版本控制的,关键就在diff和patch。diff是unix系统的一个命令,能够发现两个文件之间的区别,并生成diff文件。patch是另一个命令,它可以将diff生成的文件作为补丁文件应用在旧文件上。

例如,某项目只包含一个文件a.txt,某人对其进行了修改,我们将修改后的文件称作b.txt,那么此人通过命令diff -u a.txt b.txt > a.patch就生成了一个名为a.patch的diff文件。如果此人想把自己的修改告诉别人,只需要将diff文件a.patch发送给他人,其他开发者只要执行命令patch a.txt < a.patch,这样a.txt就自动变成了b.txt。

本地版本控制(Local Version Control)

直到今天,有许多人的版本控制方法仍然是将文件整体复制到一个文件夹下。这样做非常简单,但是也非常原始,程序员很容易忘记当前版本放在哪一个文件夹下。为此,早起程序员开发出了本地版本控制系统(local VCS),它利用diff记录不同版本之间做了哪些修改,并且可以迅速切换到任意版本。

集中式版本控制系统

当项目由多人开发时,本地VCS就不管用了,因此,人们自然地想到了集中式VCS。集中式VCS中,代码存储在中心服务器上,所有开发者对代码进行的修改都直接提交到服务器上。由于只有一个代码仓库,因此不会有冲突的问题。然而,也是因为只有一个代码仓库,信息丢失、数据损坏的风险较大。

分布式版本控制系统

Git就是一个典型的分布式版本管理系统。分布式VCS就相当于很多个松散耦合的本地VCS。在集中式VCS中,一个程序员修改文件A,另一个程序员就不能修改它,因为只有一个代码仓库。分布式VCS中,则没有这个问题,每人电脑上都有一个代码仓库的镜像,每人做的修改都是在本地仓库进行修改。

如果仅仅在本地仓库修改,那么与本地VCS没有区别,分布式VCS一个重要功能就是可以进行分支合并。Git中,有“上游仓库”这个概念,可以将本地仓库的修改push到上游仓库,并由他人pull到各自的本地仓库,从而实现代码共享。

— Reply to this email directly or view it on GitHub.

songziming commented 9 years ago

哦,确实,写着写着就跑偏了,下一部分会讲到使用方法。

Vincent88Forever commented 9 years ago

宋子明好像都和我说过。具体用的时候,命令行,我得再熟悉熟悉。