设为首页 收藏本站
查看: 1046|回复: 0

[经验分享] Git版本管理器

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-4-27 08:43:39 | 显示全部楼层 |阅读模式
                      


一、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
                   Or: service  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.jpg
4.测试ssh key是否成功,使用命令“ssh -T git@github.com”,
如果出现You’ve 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 将本地的修改推送到服务器仓库中。随着项目发展,有其他人想要参与到这个项目中来,他可以在GitHub上Fork我这个项目,这样他对这个项目才有写权限,而且可以将他的工作保存到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 #将本地文件提交到Github的origin版本库中。此时才更新了本地变更到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
                   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-209326-1-1.html 上篇帖子: [转载]Debian/Ubuntu 安装配置Git过程记录 下篇帖子: ubuntu 使用gitosis和gitweb安装git服务器 修复 控制系统 服务器 命令集 客户端
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表