Git版本管理器与猫脸五爪鱼

(声明:内容按个人实践经验并部分整合自网络,供学习参考)

 

一、git软件是什么?它与SVN有什么异同?

 

Git 是一个快速、可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系统提供了高级操作和完全访问。

 

svn属于集中化的版本控制系统:有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的成员通过客户端连接到这台服务器,进行文件上传和更新。

      优点:a.使用简单,比较符合我们的常规思维。b.同步代码比较简单,只要一步操作即可。

      缺点:a.丢失数据的风险:最显而易见的,由于集中化的特点,如果版本库的服务器磁盘发生故障等,你不能保证所有的数据已经有人提取出来了,最坏的情况是彻底的丢失整个项目的所有历史更改记录。b.网络中断的情况下,协作就无法进行了,因为无法连接服务器进行上传和更新。

git属于分布式版本控制系统:客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。

  优点:a.由于任何人每次提取操作,实际上都是一次对代码仓库的完整备份,因此近乎所有的操作都可以在本地执行,速度就是相当的快,并且可以在网络断开的时候操作仍然不受影响,可以频繁的进行提交更新,等到有网络的时候再上传到远程的镜像仓库就可以了。b.文档很详细,并且命令行的提示也很到位,用起来比较得新应手,而且很多的设置与操作跟linux操作很相近(不亏是linux之父创造的)。c.git的分支模型,相当的轻量级,被称为必杀技

   缺点:a.每个开发人员都拥有所有的代码,不利于核心代码的保密(如果有重要代码需要保密,则不建议使用git

 

Git和SVN之间的五个基本区别http://blog.jobbole.com/31444/

http://www.cnblogs.com/shenliang123/p/3824383.html

 

二、git的编译安装

 

1安装依赖的包

#yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc cpio perl

2,下载git压缩源码包

#Wget https://github.com/git/git/releases/tag/v2.8.0.tar.gz

 

3,将目录切换到压缩包包所在目录tools

执行命令:tar  zxvf  git.v2.8.0.tar.gz  -C  /usr/local

 

4, 并将解压的目录git-v2.8.0修改名称为git

执行命令:mv   /usr/local/git-v2.8.0   /usr/local/git

 

5,编译并安装

         make

 make  install

 

6,查看git版本号

 git --version

7,# whereis  git

/etc/profile 中添加export PATH=/usr/local/git/bin:$PATH

不用重启:# source  /etc/profile

三、开启远程网络连接

 

前提开启ssh远程服务器:service  sshd  start

                   Orservice  sshd  restart

△查看ssh服务有没有运行: ps -e | grep ssh  

 

△再看下这个ssh服务的网络连接情况: netstat -ntlp 

 

△关闭linux下的ssh服务:killall sshd -9
                      :service sshd stop

 

四、SSH Key的配置:

 

1.

     》创建Github账号,https://github.com

     》Windows下打开Git Bash,创建SSH Key,按提示输入密码,可以不填密码一路回车

 

$ ssh-keygen -t rsa -C "注册邮箱"

然后用户主目录/.ssh/下有两个文件,id_rsa是私钥,id_rsa.pub是公钥

 

 

2.获取key,打开.ssh下的id_rsa.pub文件,里面的内容就是key的内容

 

$ vim  ~/.ssh/id_rsa.pub

3.登录GitHub,打开"SSH Keys"页面,快捷地址:https://github.com/settings/ssh

wKiom1cfUrrwDBGCAAK49Xn-JQc520.png

4.测试ssh key是否成功,使用命令“ssh -T git@github.com”,

如果出现Youve successfully authenticated, but GitHub does not provide shell access

这就表示已成功连上github

 

五、哪什么又是github

GitHub是一个利用Git提供免费的代码托管服务的网站(类似的网站还有老牌的SourceForge),很多著名的项目都托管在上面。

 

要想在GitHub上参与开源项目,根据Git的使用方法,有两种途径可以实现。

 

第一种是项目的创建人将你添加到项目的合作贡献者列表中,这样你就可以直接向这个项目推送代码。

第二种是Fork一份代码到自己的空间下,这样的一份代码自己具有推送的权限。如果开发的进展很好,项目的创建者可以将Fork的这些项目添加为Remote仓库,在他认为合适的时候将代码fetch到自己的仓库中进行合并,也可以由我们发起请求,请创始人将代码合并。GitHub上提倡的就是使用这种方式进行开发合作。

Git 支持许多数据传输协议,包括本地传输、 git://协议、http(s):// 或者 SSH传输协议 user@server:/path.git,除了HTTP协议之外,其他所有协议都要求在服务器端安装并运行Git

使用远程仓库

 

     要参与任何一个 Git 项目的协作,必须要了解该如何管理远程仓库。远程仓库是指托管在网络上的项目仓库,可能会有好多个,其中有些你只能读,另外有些可以写。同他人协作开发某 个项目时,需要管理这些远程仓库,以便推送或拉取数据,分享各自的工作进展。管理远程仓库的工作,包括添加远程库,移除废弃的远程库,管理各式远程库分 支,定义是否跟踪这些分支,等等。

 

     以现在比较流行的GitHub为例,如果我在上面创建了一个项目,实际上相当于使用 git init 新建了一个服务器端的仓库。如果我想在本地进行开发,那么我就需要 git clone 到我的本地。做了一些开发之后,我可以 git push 将本地的修改推送到服务器仓库中。随着项目发展,有其他人想要参与到这个项目中来,他可以在GitHubFork我这个项目,这样他对这个项目才有写权限,而且可以将他的工作保存到GitHub的服务器上。如果他希望将自己的工作提交给我,首先他需要在本地开发环境中添加我的远程仓库 git remote add。然后 git push remotename master 发起推送的请求,如果我接受了,他的工作就可以合并到主干中了。因为我们此时是并行开发,如果他想看我的工作,可以采用 git pull remotename 的方式将我所做的修改拉取到本地,非常的方便。

 

 

六、两地仓库关联操作

 

同步github到本地
1、复制项目到本地:

git clone git://github.com:xxxx/test.git ##gitreadonly方式克隆到本地,只可以读

git clone git@github.com:xxx/test.git  ##SSH方式克隆到本地,可以读写

git clone https://github.com/xxx/test.git ##https方式克隆到本地,可以读写

git fetch git@github.com:xxx/xxx.git  ##获取到本地但不合并

git pull git@github.com:xxx/xxx.git ##获取并合并内容到本地


本地提交项目到github
1、本地配置

git config --global user.name '用户名'

git config --global user.email '注册@邮箱.com' #全局联系方式,可选

 

2、新建Git项目并提交到Github

mkdir myptree & cd myptree

touch listen.md

git init #初始化一个本地库

git  add  listen.md #添加文件到本地仓库

git  rm  listen.md #本地倒库内删除

git commit -m "first commit" #提交到本地库并备注,此时变更仍在本地。

git commit -a  ##自动更新变化的文件,a可以理解为auto

git remote add origin git@github.com:sangredo/JobProg.git #增加一个远程服务器的别名。

git remote rm origin   ##删除远程版本库的别名

git push -u origin master #将本地文件提交到Githuborigin版本库中。此时才更新了本地变更到github服务上。

第一次提交项目遇到报错,如何解决failed to push some refs to git

wKiom1cfUyHBwxZyAACy3QdWDA4566.jpg 

方法:此时很多人会尝试下面的命令把当前分支代码上传到master分支上。

$ git push -u origin master

但依然没能解决问题,,出现错误的主要原因是github中的README.md文件不在本地代码目录中。

可以通过如下命令进行代码合并【注:pull=fetch+merge

git pull --rebase origin master

执行上面代码后可以看到本地代码库中多了README.md文件

此时再执行语句 git push -u origin master即可完成代码上传到github。如下所示:

wKioL1cfVBKicXHvAAEVcAmdXs4446.jpg 

到网上查看结果:【刷新】

wKiom1cfU1ziCCkNAACCJOPVvpM030.jpg

要添加的listen.md出现了。


分支版本操作
1、创建和合并分支

git branch #显示当前分支是master

git branch new-feature  #创建分支

git checkout new-feature  #切换到新分支

vi page_cache.inc.php

git add page_cache.inc.php

git commit -a -m "added initial version of page cache"

git push origin new-feature  ##把分支提交到远程服务器,只是把分支结构和内容提交到远程,并没有发生和主干的合并行为。

2、如果new-feature分支成熟了,觉得有必要合并进master

git checkout master  #切换到新主干

git merge new-feature  ##把分支合并到主干

git branch #显示当前分支是master

git push  #此时主干中也合并了new-feature的代码

wKiom1cfUuKQwaSQAAAaZ5QqKG0958.jpg