我们知道,版本控制对于大中型软件系统的开发非常重要。Linux在91年的时候被创造出来,吸引了来自全世界的很多志愿者参与他的代码编写。但是,人多手杂不可避免的,代码的管理也变得非常的困难。由于种种原因,CBS、SVN等的集中式版本控制系统没有被采用,并且商用免费授权给他们用的,也由于一些版权原因被收回授权了。于是,Linux他的作者花了两周时间自己用C写了个分布式的版本控制系统。聪明的你一定已经知道了这就是Git,很快Git已经成为最流行的分布式版本控制系统之一了。
其实,Git这个词在英文里是饭桶的意思,牛人嘛总有一些自嘲的幽默感。那对Git来说,最关键最关键的就是它分布式的特点。这节课呢我们就将细细体会。如果你喜欢自学的话,也可以打开屏幕上的自学链接,一步一步跟着做学起来也很快。
了解一个新玩意,我们首先要了解一些基本的概念。对于Git来说,它作为版本控制系统,控制单位就是版本库。而它作为分布式的版本控制系统,这就有远端版本库和本地版本库。远端版本库可以认为是在非本机上的,比如我们可以放在服务器上或者放在第三方托管主机上,而本地版本库就是在你电脑上的。如果你有很多合作的小伙伴,每个人都可以有自己的本地版本库。
接下来我们主要要解决的问题呢,就是如何在分布式这个大前提下,做到版本库之间的同步操作。在此之前,我们先了解一下Git的版本库是如何创建的,以及如何向它提交变更。我们需要使用Git的命令行,它在Unix系列比较新的操作系统一般都自带了。如果没有呢,各个操作系统都有方便的安装途径。
假设,我们现在已经安装好Git命令行了。首先,我们要在希望创建版本库的地方打开命令行,创建一个空的文件夹。进入这个空的文件夹之后呢,用git init就可以把这个空的文件夹变成一个空的版本库。其实说白呢,所谓版本库啊,在你的本机磁盘看来,它就是一个有着特殊结构的文件夹。
假设,我们在这个版本库的文件夹里面呢,创建了一个文件。那么我们通过git status这条命令,它就会列出当前版本库中尚未提交的文件改动,那这些改动呢,我们就称为未跟踪的文件。比如我们就会发现file.txt这个文件还没有被跟踪。
那接着呢,我们就通过git add file.txt这条命令,它就可以把这个文件给标记一下,它就被Git版本库获知了,或者说它已经被跟踪了,我们的版本库就知道这个文件是需要提交的。那接着我们通过git commit命令,带上-m参数,写上一条提交消息,那这样就会把版本库中已经被跟踪的所有文件一同提交到版本库中,那这样就叫做完成了一次提交,这些文件的改动就都被版本库记录下来了。
比如假设我们又创建两个新文件,那继续用git status就能同样发现这两个文件尚未被跟踪,然后继续可以用git add的命令加上文件的通配符来一次性把它们都跟踪。当然我们可以也可以分为两条git add的命令来跟踪,那最后呢同样可以用git commit带上提交的消息来完成提交,那这样我们就已经进行了两次提交了,我们的版本库中呢就有了三个新的文件。
刚刚说的版本库是在我们本机创建的,如果同样方式在服务器上创建一个Git版本库这就成为了远端版本库。为了更好进行协作,我们经常采用一个远端版本库以及若干个分布在不同机器上的本地版本库。这样的模式,任何本地版本库有提交,都把提交同步到远端版本库去,这样所有的本地版本库就可以进行同步。
很多时候,我们是先创建好远端版本库的,这样呢我们就需要把它克隆到本地。通过git clone带上版本库的地址就可以完成远端版本库到本地版本库的克隆。这边版本库的地址如果在Github上,一般是[email protected]:用户名/版本库名这样格式呢,其实如果你熟悉的话,会发现这其实是个SSH格式的URI。当然Git它的兼容性很好,也可以用其他格式的版本库地址,比如说Github,它也提供了HTTPS格式的版本库地址。
我们现在已经把远端版本库在本地的若干台机器上完成了克隆,那接下来要介绍的是如何把文件的变动从远端版本库同步到本地版本库。这种操作呢,叫做从远端版本库拉取commit到本地,具体的使用命令呢很简单就是git pull。
比如说我们远端版本库上最新的提交,它把file.txt这个文件进行了变动,那我们在本地版本库就只需要运行一下git pull,它就会自动的从远端拉取commit,这样变动的文件就同步到本地了。那对于另一个本地版本库也是一样的,运行这条命令后就可以把变动的文件同步到本地。
我们刚刚知道了,怎么把变动从远端同步到本地,那远端版本库的变动是怎么来的呢?我们当然不会在远端版本库上去改动文件,然后提交。其实啊我们可以在本地版本库进行文件的变动,然后呢,我们把这些变动提交到本地版本库去,最后再把本地版本库同步到远端去就可以了。
而我们要把本地版本库同步到远端,就需要通过git push这条命令,它就会自动的把远端版本库上还没有的文件变动从本地同步过去。那这边有一个需要注意的点,就是git push命令,它要求你的本地版本库已经拥有了远端版本库的所有commit,所以呢我们一般会先git pull,然后再进行文件变动并提交后再git push。
我们对file.txt进行了改动,然后让版本库标记这个文件的改动是已经跟踪了,那接下来如果我们想撤销这一改动,可以通过git reset的命令来实现,这样它只会把file.txt的改动恢复成未跟踪的状态,而他的改动是仍然存在的。而如果我们想彻底抛弃这个文件改动,让它恢复成上次commit时候的样子呢,就可以通过git checkout并指定这个文件。大家在用的时候一定要小心,因为这条命令呢它会丢失自从上次commit之后的所有改动,比较危险,因为它会丢失你对文件的修改,除非你真的想这么做,否则慎用。
我们对一些文件进行改动,然后想提交的话,可以用git commit带上-a来自动的把修改的文件先add再进行commit,带上提交的消息,做法呢和之前一样就是用-m的参数。这样我们就让版本库中增加一次新的commit,提交消息呢为msg4。接着呢我们在把它推送到远端之前突然间灵光一闪,想到有个地方忘了修改了,于是我们打开file.txt来进行改动,那接着就要把这个改动的标记为已跟踪,然我了解,版本控制对于大中型软件系统的开发非常重要。Linux在91年的时候被创造出来,吸引了来自全世界的很多志愿者参与他的代码编写。但是,人多手杂不可避免的,代码的管理也变得非常的困难。由于种种原因,CBS、SVN等的集中式版本控制系统没有被采用,并且商用免费授权给他们用的,也由于一些版权原因被收回授权了。于是,Linux的作者花了两周时间自己用C写了个分布式的版本控制系统。聪明的你一定已经知道了这就是Git,很快Git已经成为最流行的分布式版本控制系统之一了。
其实,Git这个词在英文里是饭桶的意思,牛人嘛总有一些自嘲的幽默感。那对Git来说,最关键最关键的就是它分布式的特点。这节课呢我们就将细细体会。如果你喜欢自学的话,也可以打开屏幕上的自学链接,一步一步跟着做学起来也很快。
了解一个新玩意,我们首先要了解一些基本的概念。对于Git来说,它作为版本控制系统,控制单位就是版本库。而它作为分布式的版本控制系统,这就有远端版本库和本地版本库。远端版本库可以认为是在非本机上的,比如我们可以放在服务器上或者放在第三方托管主机上,而本地版本库就是在你电脑上的。如果你有很多合作的小伙伴,每个人都可以有自己的本地版本库。
接下来我们主要要解决的问题呢,就是如何在分布式这个大前提下,做到版本库之间的同步操作。在此之前,我们先了解一下Git的版本库是如何创建的,以及如何向它提交变更。我们需要使用Git的命令行,它在Unix系列比较新的操作系统一般都自带了。如果没有呢,各个操作系统都有方便的安装途径。
假设,我们现在已经安装好Git命令行了。首先,我们要在希望创建版本库的地方打开命令行,创建一个空的文件夹。进入这个空的文件夹之后呢,用git init就可以把这个空的文件夹变成一个空的版本库。其实说白呢,所谓版本库啊,在你的本机磁盘看来,它就是一个有着特殊结构的文件夹。
假设,我们在这个版本库的文件夹里面呢,创建了一个文件。那么我们通过git status这条命令,它就会列出当前版本库中尚未提交的文件改动,那这些改动呢,我们就称为未跟踪的文件。比如我们就会发现file.txt这个文件还没有被跟踪。
那接着呢,我们就通过git add file.txt这条命令,它就可以把这个文件给标记一下,它就被Git版本库获知了,或者说它已经被跟踪了,我们的版本库就知道这个文件是需要提交的。那接着我们通过git commit命令,带上-m参数,写上一条提交消息,那这样就会把版本库中已经被跟踪的所有文件一同提交到版本库中,那这样就叫做完成了一次提交,这些文件的改动就都被版本库记录下来了。
比如假设我们又创建两个新文件,那继续用git status就能同样发现这两个文件尚未被跟踪,然后继续可以用git add的命令加上文件的通配符来一次性把它们都跟踪。当然我们可以也可以分为两条git add的命令来跟踪,那最后呢同样可以用git commit带上提交的消息来完成提交,那这样我们就已经进行了两次提交了,我们的版本库中呢就有了三个新的文件。
刚刚说的版本库是在我们本机创建的,如果同样方式在服务器上创建一个Git版本库这就成为了远端版本库。为了更好进行协作,我们经常采用一个远端版本库以及若干个分布在不同机器上的本地版本库。这样的模式,任何本地版本库有提交,都把提交同步到远端版本库去,这样所有的本地版本库就可以进行同步。
很多时候,我们是先创建好远端版本库的,这样呢我们就需要把它克隆到本地。通过git clone带上版本库的地址就可以完成远端版本库到本地版本库的克隆。这边版本库的地址如果在Github上,一般是[email protected]:用户名/版本库名这样格式呢,其实如果你熟悉的话,会发现这其实是个SSH格式的URI。当然Git它的兼容性很好,也可以用其他格式的版本库地址,比如说Github,它也提供了HTTPS格式的版本库地址。
我们现在已经把远端版本库在本地的若干台机器上完成了克隆,那接下来要介绍的是如何把文件的变动从远端版本库同步到本地版本库。这种操作呢,叫做从远端版本库拉取commit到本地,具体的使用命令呢很简单就是git pull。
比如说我们远端版本库上最新的提交,它把file.txt这个文件进行了变动,那我们在本地版本库就只需要运行一下git pull,它就会自动的从远端拉取commit,这样变动的文件就同步到本地了。那对于另一个本地版本库也是一样的,运行这条命令后就可以把变动的文件同步到本地。
我们刚刚知道了,怎么把变动从远端同步到本地,那远端版本库的变动是怎么来的呢?我们当然不会在远端版本库上去改动文件,然后提交。其实啊我们可以在本地版本库进行文件的变动,然后呢,我们把这些变动提交到本地版本库去,最后再把本地版本库同步到远端去就可以了。
而我们要把本地版本库同步到远端,就需要通过git push这条命令,它就会自动的把远端版本库上还没有的文件变动从本地同步过去。那这边有一个需要注意的点,就是git push命令,它要求你的本地版本库已经拥有了远端版本库的所有commit,所以呢我们一般会先git pull,然后再进行文件变动并提交后再git push。
我们对file.txt进行了改动,然后让版本库标记这个文件的改动是已经跟踪了,那接下来如果我们想撤销这一改动,可以通过git reset的命令来实现,这样它只会把file.txt的改动恢复成未跟踪的状态,而他的改动是仍然存在的。而如果我们想彻底抛弃这个文件改动,让它恢复成上次commit时候的样子呢,就可以通过git checkout并指定这个文件。大家在用的时候一定要小心,因为这条命令呢它会丢失自从上次commit之后的所有改动,比较危险,因为它会丢失你对文件的修改,除非你真的想这么做,否则慎用。